##前言
记录下项目中使用的方案,本方案是基于乐固进行的加固,在此基础上多渠道打包,具体使用请看流程图。下面的方案会在文中有详细的说明。
- 开发环境:Ubuntu16.04 AndroidStudio2.3.3
- 签名方案:v2
- 加固方案:乐固
- 多渠道打包方案:walle-----(原理详解)
- 统计/异常上报方案:Bugly
- 热更新方案:tinker(Bugly以及集成了tinker)
流程
##详解
###一、接入Bugly
-
不要忘了在
tinker-support.gradle
里开启加固模式isProtectedApp = true
-
最后看下Bugly提供的功能模块:
###二、添加reader依赖
获取渠道号的依赖,walle把它提取出来了,可以单独使用。
dependencies {
compile 'com.meituan.android.walle:payload_reader:1.1.4'
}
在application中设置渠道号
public class MyApplication extends Application {
private String TAG="---------";
@Override
public void onCreate() {
super.onCreate();
setStrictMode();
............
//设置渠道 Bugly市场统计时使用
Bugly.setAppChannel(getApplication(), getChannelName());
//是否设置为开发设备
Bugly.setIsDevelopmentDevice(getApplication(), true);
//初始化 异常上报
CrashReport.initCrashReport(getApplication());
//异常上报时 可以增加额外的数据
CrashReport.putUserData(getApplication(), "data", "额外增加的数据");
}
/**
* 获取渠道号
*
* @return
*/
public String getChannelName() {
Map<String, String> map = ChannelReader.getMap(new File(getApplicationInfo().sourceDir));
boolean hasChannel = map != null && map.get(ChannelReader.CHANNEL_KEY) != null;
return hasChannel ? map.get(ChannelReader.CHANNEL_KEY) : "huoxing";
}
}
###三、生成基线APP
第一步集成好了,执行assembleRelease命令会生成如下文件:
app-0630-18-46-28 // 请务必要保存好基准包目录,这个是作为打补丁的基准。
├── app-release.apk //在桌面新建一个文件夹`jiagu`,并把apk复制进去。
├── app-release-mapping.txt
└── app-release-R.txt
###四、加固应用
乐固提供了不同平台的加固工具,可以下载到本地使用。
下面是windows版的加固工具
加固应用后,签名会失效,此时我们只需要下载这个未签名的应用,签名工作在第六步,下载后的得到的文件为
app-release_legu.apk
(自动生成的)。
###五、对齐资源
####使用方法
zipalign -v 4 infile.apk outfile.apk
zipalign
:需要定位到Android/Sdk/build-tools/25.+
目录下执行此命令。-v
:指详细输出4
: 对齐到4字节边界infile.apk
: 源apk路径outfile.apk
:输出apk路径
####了解为什么要使用zipalign
使用zipalign工具,可为应用文件提供重要优化。 目的是确保所有未压缩的数据以相对于文件开头的特定对齐开始。 具体来说,它将使APK内的所有未压缩数据(如图像或原始文件)在4字节边界上对齐,该优点是减少运行应用程序时所占用的RAM量,并且能够让应用程序和整个系统运行得更快。官网介绍地址:https://developer.android.com/studio/command-line/zipalign.html
###六、V2签名
命令很简单,指定签名文件,源apk路径,签完名后会覆盖源apk。为了方便我把签名文件复制了一份到jiagu
目录下。
apksigner sign --ks release.jks infile.apk
###七、检查v2签名效果
下载CheckAndroidV2Signature.jar到jiagu
目录下。定位到jiagu
目录下,执行下面命令:
java -jar CheckAndroidV2Signature.jar app-release_legu_zipalign.apk
//输出结果: {"ret":0,"msg":"ok","isV2":true,"isV2OK":true}
//isV2: 是否使用的v2签名方案
//isV2OK: v2签名是否成功
###八、walle-cli 打渠道包
walle-cli是walle提供的命令行程序,打包方式非常灵活。下载walle-cli-all.jar 到jiagu
目录下。定位到jiagu
目录下,执行下面命令(这是其中一种):
java -jar walle-cli-all.jar batch -c apple,ali,jd app-release_legu_zipalign.apk
查看渠道号我们已经在第二步集成了。