概述
在android開發時,我們需要加固以確保安全,需要多渠道進行精準客戶分析,並且需要一個平臺進行統計分析。
我現在常用的就是,騰訊樂固進行加固,美團進行多渠道打包,然後用友盟進行渠道分析。
方案
我採取的方案是
1、配置walle
2、先打包出來一個apk
3、樂固加固
4、簽名
5、walle多渠道
6、多渠道配置到umeng分析
步驟這樣的主要原因是因爲加固會把渠道包給去掉。
walle
walle ,是美團Android Signature V2 Scheme簽名下的新一代渠道包打包神器。
walle 多渠道打包的使用 https://github.com/Meituan-Dianping/walle
配置build.gradle
在位於項目的根目錄 build.gradle 文件中添加Walle Gradle插件的依賴, 如下:
buildscript {
dependencies {
classpath 'com.meituan.android.walle:plugin:1.1.6'
}
}
並在當前App的 build.gradle 文件中apply這個插件,並添加上用於讀取渠道號的AAR
apply plugin: 'walle'
dependencies {
compile 'com.meituan.android.walle:library:1.1.6'
}
配置插件
walle {
// 指定渠道包的輸出路徑
apkOutputFolder = new File("${project.buildDir}/outputs/channels");
// 定製渠道包的APK的文件名稱
apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
// 渠道配置文件
channelFile = new File("${project.getProjectDir()}/channel")
}
在需要渠道等信息時可以通過下面代碼進行獲取
String channel = WalleChannelReader.getChannel(this.getApplicationContext());‘
生成渠道包 ./gradlew clean assembleReleaseChannels
簽名
採用命令行簽名,把簽名文件,apk放到一個文件夾中,命令行cd進入到該文件夾下,然後進行如下操作
驗證簽名:
jarsigner -verify -verbose -certs app.apk
加固之後重新簽名
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore 簽名文件名稱 -storepass 簽名密碼 簽名apk名字 簽名別名
對齊:zipalign 4 apk名字 apk新名字
walle多渠道
把walle下面的jar包放到文件夾中,channel文件中配置的是渠道信息(該步驟僅需要這兩個文件,其他文件是簽名需要)
channle.txt內容如下,根據自己的需要配置。
xiaomi # 小米
meizu
huawei
oppo
vivo
googleplay
baidu
360cn
yyb
wangzhan
命令行進入該文件夾下
cd C:\Users\Administrator\Desktop\donghaohuosign
然後打包只需要一句命令行
java -jar walle-cli-all.jar batch -f C:\Users\Administrator\Desktop\donghaohuosign\channel.txt C:\Users\Administrator\Desktop\donghaohuosign
\donghaohuo.apk C:\Users\Administrator\Desktop\donghaohuosignpk
最後的一個路徑是配置apk生成位置,默認生成在目錄下,精簡可以這樣
java -jar walle-cli-all.jar batch -f C:\Users\Administrator\Desktop\donghaohuosign\channel.txt C:\Users\Administrator\Desktop\donghaohuosign
\donghaohuo.apk
就可以生成渠道包了。
umeng分析配置
你的應用中已經配置上了umeng了,我就不多贅述配置過程。
如果不修改,umeng肯定不能識別到渠道包啊,因爲我們去掉了manifest中的umeng 渠道的配置和 gradle中的productFlavors 。
解決的辦法也很簡單。
只需要在初始化的時候,把第二個參數改成你獲取到的channel
//友盟初始化
String channel = WalleChannelReader.getChannel(this.getApplicationContext());
Log.i("yicooll", "" + "*****************************" + channel);
UMConfigure.init(this, "", channel, UMConfigure.DEVICE_TYPE_PHONE, "")