File tree 5 files changed +40
-30
lines changed
5 files changed +40
-30
lines changed Original file line number Diff line number Diff line change 3
3
4
4
我非常鄙视这种行文,一个公司应该想到如何把产品做的更完善,而不是用这些技术来损害用户的利益,来获取自己肮脏的所谓的功能。
5
5
6
- - Service设置成START_STICKY, kill 后会被重启(等待5秒左右),重传Intent ,保持与重启前一样
7
- - 通过 startForeground将进程设置为前台进程 ,做前台服务,优先级和前台应用一个级别,除非在系统内存非常缺,否则此进程不会被 kill
8
- - 双进程Service: 让2个进程互相保护,其中一个Service被清理后 ,另外没被清理的进程可以立即重启进程
9
- - QQ黑科技 :在应用退到后台后,另起一个只有 1 像素的页面停留在桌面上 ,让自己保持前台状态,保护自己不被后台清理工具杀死
10
- - 在已经root的设备下 ,修改相应的权限文件,将App伪装成系统级的应用( Android4.0系列的一个漏洞 ,已经确认可行)
11
- - Android系统中当前进程( Process)fork出来的子进程 ,被系统认为是两个不同的进程。当父进程被杀死的时候,子进程仍然可以存活,并不受影响。
12
- 鉴于目前提到的在Android-Service层做双守护都会失败,我们可以fork出c进程 ,多进程守护。死循环在那检查是否还存在,
13
- 具体的思路如下(Android5.0以下可行 )
14
- - 用C编写守护进程 (即子进程),守护进程做的事情就是循环检查目标进程是否存在,不存在则启动它。
15
- - 在NDK环境中将1中编写的C代码编译打包成可执行文件( BUILD_EXECUTABLE)。
6
+ - ` Service ` 设置成 ` START_STICKY ` , ` kill ` 后会被重启(等待5秒左右),重传 ` Intent ` ,保持与重启前一样
7
+ - 通过` startForeground ` 将进程设置为前台进程 ,做前台服务,优先级和前台应用一个级别,除非在系统内存非常缺,否则此进程不会被` kill `
8
+ - 双进程 ` Service ` : 让2个进程互相保护,其中一个 ` Service ` 被清理后 ,另外没被清理的进程可以立即重启进程
9
+ - ` QQ ` 黑科技 :在应用退到后台后,另起一个只有1像素的页面停留在桌面上 ,让自己保持前台状态,保护自己不被后台清理工具杀死
10
+ - 在已经 ` root ` 的设备下 ,修改相应的权限文件,将 ` App ` 伪装成系统级的应用( ` Android4.0 ` 系列的一个漏洞 ,已经确认可行)
11
+ - ` Android ` 系统中当前进程( ` Process ` ) ` fork ` 出来的子进程 ,被系统认为是两个不同的进程。当父进程被杀死的时候,子进程仍然可以存活,并不受影响。
12
+ 鉴于目前提到的在 ` Android-Service ` 层做双守护都会失败,我们可以 ` fork ` 出 ` c ` 进程 ,多进程守护。死循环在那检查是否还存在,
13
+ 具体的思路如下(` Android5.0`以下可行 )
14
+ - 用`C`编写守护进程 (即子进程),守护进程做的事情就是循环检查目标进程是否存在,不存在则启动它。
15
+ - 在`NDK`环境中将1中编写的`C`代码编译打包成可执行文件(` BUILD_EXECUTABLE` )。
16
16
- 主进程启动时将守护进程放入私有目录下,赋予可执行权限,启动它即可。
17
17
18
18
- 联系厂商,加入白名单
Original file line number Diff line number Diff line change @@ -441,7 +441,7 @@ public class PluginClass {
441
441
```
442
442
现在如果想调用插件`APK `中`PluginClass `内的方法,应该怎么办?
443
443
444
- ####从已安装的apk中读取dex
444
+ #### 从已安装的apk中读取dex
445
445
446
446
先来看第一种方法,这种方法必须建一个`Activity `,在清单文件中配置`Action `.
447
447
@@ -513,7 +513,7 @@ public void btnClick(View view){
513
513
}
514
514
```
515
515
516
- ####从apk文件中读取dex
516
+ #### 从apk文件中读取dex
517
517
518
518
这种方法由于并不需要安装,所以不需要通过`Intent `从`activity`中解析信息。换言之,这种方法不需要创建`Activity `。无需配置清单文件。我们只需要打包一个`apk`,然后放到`SD `卡中即可。
519
519
核心代码如下:
Original file line number Diff line number Diff line change 1
1
快捷方式工具类
2
- ==
2
+ ===
3
3
4
4
``` java
5
5
/**
Original file line number Diff line number Diff line change @@ -38,21 +38,21 @@ DevicePolicyManager中的方法
38
38
```
39
39
40
40
2 . 在清单文件中配置自定义的类
41
- ```xml
42
- <receiver
43
- android:name=".receiver.MyAdmin"
44
- android:description="@string/admin_des"
45
- android:label="防卸载"
46
- android:permission="android.permission.BIND_DEVICE_ADMIN" >
47
- <meta-data
48
- android:name="android.app.device_admin"
49
- android:resource="@xml/device_admin_sample" />
41
+ ``` xml
42
+ <receiver
43
+ android:name=" .receiver.MyAdmin"
44
+ android:description=" @string/admin_des"
45
+ android:label=" 防卸载"
46
+ android:permission=" android.permission.BIND_DEVICE_ADMIN" >
47
+ <meta-data
48
+ android:name=" android.app.device_admin"
49
+ android:resource=" @xml/device_admin_sample" />
50
50
51
- <intent-filter>
52
- <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
53
- </intent-filter>
54
- </receiver>
55
- ```
51
+ <intent-filter >
52
+ <action android : name =" android.app.action.DEVICE_ADMIN_ENABLED" />
53
+ </intent-filter >
54
+ </receiver >
55
+ ```
56
56
57
57
3 . 完成第二步中所需的meta-data。在res下新建一个xml文件,device_admin_sample.xml
58
58
``` xml
Original file line number Diff line number Diff line change @@ -2,8 +2,13 @@ volatile和Synchronized区别
2
2
===
3
3
4
4
- volatile
5
- ` Java ` 语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量
6
- 的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。而` volatile ` 关键字就是提示` JVM ` :对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
5
+ 作用:使变量在多个线程间可见(可见性)
6
+ ` Java ` 语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而在这个过程中,变量的新值对其他线程是不可见的.而且只当线程进入或者离开同步代码块时才与共享成员变量
7
+ 的原始值对比。这样当多个线程同时与某个对象交互时,就必须要注意到要让线程及时的得到共享成员变量的变化。
8
+
9
+ 也就是说每个线程都有一个自己的本地内存空间,在线程执行时,先把变量从主内存读取到线程自己的本地内存空间,然后再对该变量进行操作,当对该变量操作完后,在某个时间再把变量刷新回主内存
10
+
11
+ 而` volatile ` 关键字就是提示` JVM ` :对于这个成员变量不能保存它的私有拷贝,而应直接与共享成员变量交互。
7
12
使用建议:在两个或者更多的线程访问的成员变量上使用` volatile ` 。当要访问的变量已在` synchronized ` 代码块中,或者为常量时,不必使用。
8
13
由于使用` volatile ` 屏蔽掉了` JVM ` 中必要的代码优化,所以在效率上比较低,因此一定在必要时才使用此关键字。 就跟` C ` 中的一样 禁止编译器进行优化.
9
14
@@ -24,4 +29,9 @@ volatile和Synchronized区别
24
29
---
25
30
26
31
- 邮箱 :charon.chui@gmail.com
27
- - Good Luck!
32
+ - Good Luck!
33
+
34
+
35
+
36
+
37
+
You can’t perform that action at this time.
0 commit comments