简单搞定Android加固签名多渠道打包
2018-07-21 本文已影响28人
AntDream
背景
我们辛辛苦苦开发完App,结果人家一个反编译就把我们的应用翻版了,这是很让人气愤的事儿。所以发布App前我们还需要用第三方服务加固一下。
再者,我们的应用一般都要发布在多个应用市场,而且运营人员需要知道各个应用市场渠道的数据效果怎么样,所以我们还得为我们的App打多个有应用市场渠道信息的包,便于运营统计分析
常见的实现方式
我们可以利用一些第三方的多渠道插件来打包,比如很有名的packer-ng-plugin,此外一些第三方的软件也提供了多渠道打包,比如360加固助手。下面我们分别介绍下具体的使用方式
packer-ng-plugin
packer-ng-plugin提供了2种方式,一种是集成在项目中,一种是下载jar包进行脚本打包
通过集成在项目中进行多渠道打包
根据官网配置一下就行了
//project build.gradle
dependencies {
classpath 'com.mcxiaoke.packer-ng:plugin:2.0.1'
}
//app model build.gradle
apply plugin: 'packer'
android {
compileSdkVersion 25
defaultConfig {
...
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
packer {
//指定渠道文件地址
channelFile = new File(project.rootDir, "markets.txt")
//其他的配置如有需要可以查看项目的github
}
}
dependencies {
compile 'com.mcxiaoke.packer-ng:helper:2.0.1'
}
然后终端中输入:
./gradlew clean apkRelease
在应用中获取渠道信息也很简单
String channel = PackerNg.getChannel(this);
下载jar包进行脚本打包
首先需要将PackerNg的jar包下载下来,点这里下载
然后通过命令行
java -jar packer-ng-2.0.1.jar generate --channels=@渠道文件地址 输出文件路径 apk地址
用360加固助手
360加固助手提供了加固、签名、打多渠道包的功能
下载地址:360加固助手
360加固助手使用起来比较简单,配置一下应用的相关信息就可以了
360手机助手首页 配置签名信息 配置多渠道信息通过以上简单几步就可以加固签名打包我们的App了。而且签名已经支持V2了。
如果我们设置了多渠道包,比如向上图中那样,设置的是友盟的统计平台,我们的应用里面的渠道信息就在AndroidManifest文件中对应的友盟的位置。那我们怎么在应用里面获取渠道信息呢?这里给大家提供一个获取AndroidManifest文件中meta-data标签内容的方法。
//SysUtils.class
/**
* 获取app当前的渠道号或application中指定的meta-data
* 用于获取渠道
* 比如友盟的话,key就可以是“UMENG_CHANNEL”
*
* @return 如果没有获取成功(没有对应值,或者异常),则返回值为空
*/
public static String getAppMetaData(Context context, String key) {
if (context == null || TextUtils.isEmpty(key)) {
return null;
}
String channelNumber = null;
try {
PackageManager packageManager = context.getPackageManager();
if (packageManager != null) {
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo != null) {
if (applicationInfo.metaData != null) {
channelNumber = applicationInfo.metaData.getString(key);
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return channelNumber;
}
这样我们获取渠道信息就很方便了
//获取渠道信息
String channel = SysUtils.getAppMetaData(this, "UMENG_CHANNEL");
总结
本文介绍了脚本打包的方式和利用第三方软件打包的方式,在日常开发中应该都够用了。其中可以加固签名应用的第三方软件有很多,360只是其中一个。
今天你进步了嘛?欢迎关注我的微信公众号,和我一起每天进步一点点!
AntDream