-
Notifications
You must be signed in to change notification settings - Fork 8
/
so-file-config.gradle
100 lines (96 loc) · 3.53 KB
/
so-file-config.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/**
* so 库压缩配置
* 版本指根目录 build.gradle 下
* com.android.tools.build:gradle:x.x.x 中 x.x.x 版本号
*
* 3.4.0 版本及以下使用 SoFileTransformPlugin
* 3.5.0 - 3.6.0 版本使用 SoFileAttachMergeTaskPlugin
* 理论上通用 ApkSoFileAdjustPlugin 不过会对 apk 包进行二次打包组装
*
* SoFileTransformPlugin 使用 Transform 进行 so 文件压缩删除
* SoFileAttachMergeTaskPlugin 则在指定文件夹中处理
*
* ApkSoFileAdjustPlugin 插件:4.1.0 中添加了 compressed_assets 机制导致无法把压缩后的 so 文件放入 asstes 中
* 顾调整为针对已出包 apk 进行 so 文件操作并重新签名
**/
//apply plugin: 'SoFileTransformPlugin'
//apply plugin: 'SoFileAttachMergeTaskPlugin'
apply plugin: 'ApkSoFileAdjustPlugin'
SoFileConfig {
/**
* 总开关配置
* 不配置时根据 compressSo2AssetsLibs 与 deleteSoLibs 是否为空自动开启关闭
* 配置 true 强制开启 false 强制关闭
**/
// enable = false
// 设置 debug 下不删除与压缩 so 库
// excludeBuildTypes = ['debug']
useApktool = true
/**
* 强制保留所有依赖
* 默认为 false 时
* minSdkVersion <= 23 保留所有依赖
* minSdkVersion > 23 只保留 deleteSoLibs 与 compressSo2AssetsLibs 中处理过的依赖 */
forceNeededRetainAllDependencies = true
// 设置要删除的 so 库
deleteSoLibs = [
]
backupApk = true
/**
* 移除 so 时回调,这里可以做上传云端的逻辑
*/
onDeleteSo = { File file, String md5 ->
return file.absolutePath.replace(".so", "_${md5}.so")
}
// 设置要压缩的库 注意 libun7zip.so 为 7z 解压库不可压缩
compressSo2AssetsLibs = [
'libtestLibrary.so',
'libnative-aar-lib.so',
'libsource.so',
'libblur-lib.so',
]
// 排除依赖
excludeDependencies = [
'libGLESv2.so',
'libGLESv3.so',
'libgraphicsenv.so',
'libjnigraphics.so',
'liblog.so',
'liblz4.so',
'liblzma.so'
]
/**
* 配置自定义依赖
* 用于解决 a.so 并未声明依赖 b.so 并且内部通过 dlopen 打开 b.so
* 或者反射 System.loadLibrary 等跳过 hook 加载 so 库等场景 */
customDependencies = ['libsource.so': ['liblog.so']]
}
/**
* so 库加载 Hook 插件
* 通过 com.imf.so.SoLoadHook#setSoLoadProxy(com.imf.so.SoLoadProxy)
* 设置加载代理
* 加载代理指编辑期间插件修改 java.lang.System#load(java.lang.String) 与
* java.lang.System#loadLibrary(java.lang.String) 为
* com.imf.so.SoLoadHook#load(java.lang.String) 与
* com.imf.so.SoLoadHook#loadLibrary(java.lang.String)
* 防止递归被 Hook 代理
* 1. 继承 com.imf.so.SoLoadProxy 的类不会被修改 内部类会被修改
* 2.excludePackage 跳过指定包名不会被修改
* 3. 使用 @KeepSystemLoadLib 注解不会被修改
*
* 具体可查看 load-hook 库
* implementation "com.imf.so:load-hook:x.x.x"*/
apply plugin: 'SoLoadHookPlugin'
SoLoadHookConfig {
// 是否跳过 R 文件与 BuildConfig
isSkipRAndBuildConfig = true
// 设置跳过的包名, 跳过的包不去 hook 修改后请先 clean
// excludePackage = ['com.imf.test']
}
dependencies {
implementation "${GROUP_ID}:load-hook:${SO_PLUGIN_VERSION}"
implementation "${GROUP_ID}:load-assets-7z:${SO_PLUGIN_VERSION}"
//调试时源码使用
// implementation project(':load-hook')
// implementation project(':load-assets-7z')
}