美文网首页Android开发Android开发Android开发经验谈
简单搞定Android加固签名多渠道打包

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

作者: AntDream | 来源:发表于2018-07-21 07:24 被阅读28次

    背景

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

    相关文章

      网友评论

      • RicoX2016:博主有在纯kotlin 项目中使用packer-ng-plugin 打包没? 我使用一直报错,按道理说应该不影响的。
        AntDream:@RicoX2016 没有哎,不过你可以去packer-ng-plugin的GitHub上提个issue看看。

      本文标题:简单搞定Android加固签名多渠道打包

      本文链接:https://www.haomeiwen.com/subject/ltccmftx.html