简单搞定Android加固签名多渠道打包

1,041 阅读3分钟

背景

我们辛辛苦苦开发完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