当前位置:   article > 正文

Android 项目必备(七)--> Android 的多渠道打包_androidmanifest.xml加密后打包

androidmanifest.xml加密后打包

在这里插入图片描述

前言

google play 无法在国内打开(翻墙的就不在考虑之内了),所以 Android 系的应用市场,群雄争霸。后果就是国内存在着有众多的应用市场,产品在不同的渠道可能有这不同的统计需求,为此 Android 开发人员需要为每个应用市场发布一个安装包。

国内存在着众多的 Android 应用市场,为了统计不同安卓应用市场的下载量一个个性化统计需求,需要为每个应用市场的 Android 包设定一个可以区分应用市场的标识,这个为 Android 包设定应用市场标识的过程就是多渠道打包。

几种主流的多渠道打包方式

1. 通过配置 gradle 脚本实现多渠道打包

这种打包方式是使用Android Studio的编译工具gradle配合使用的,其核心原理就是通过脚本修改AndroidManifest.xml中的mate-date内容,执行N次打包签名操作实现多渠道打包的需求,具体实现如下。

  • 在 Androidmanifest.xml 中定义 mate-data 标签
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"    
    package="your.package.name">    
    <application>    

          <meta-data Android:name="UMENG_CHANNEL" Android:value="{UMENG}"/>    

    </application>    
</manifest>   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里需要注意的是:上面的value的值要和渠道名所对应,比如wandoujia里面要对应为你豌豆荚的渠道名称

  • 在build.gradle下的productFlavors定义渠道号:
productFlavors {
        yingyongbao {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
        }
        huawei {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "huawei"]
        }
        xiaomi {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        oppo {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "oppo"]
        }
        vivo {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "vivo"]
        }
        weibo {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "weibo"]
        }
        bzhan {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "bzhan"]
        }
        toutiao {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "toutiao"]
        }
        guangdiantong {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "guangdiantong"]
        }
        baidu {
            dimension "versionCode"
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "baidu"]
        }
        urlTest {
            dimension "serverUrl"
            buildConfigField("int", "SERVER_TYPE", "1")
        }
        urlOnline {
            dimension "serverUrl"
            buildConfigField("int", "SERVER_TYPE", "2")
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

需要注意的是,这里需要在 defaultConfig 中配置一个默认的渠道名称

manifestPlaceholders = [UMENG_CHANNEL_VALUE: "channel_name"]  
  • 1

实现多渠道打包更换 mate-data 标签中的内容

2. 使用第三方打包工具
这种方式就是使用第三方的服务,比如360,百度,友盟等,其原理也是通过修改AndroidManifest.xml中的mate-data标签内容,然后执行N次打包签名的操作实现多渠道打包的。

3. 使用腾讯多渠道打包方式

  • 在项目根目录添加插件
dependencies {
        classpath 'com.leon.channel:plugin:2.0.3'
    }
  • 1
  • 2
  • 3
  • 在项目根目录新建渠道列表 flavor_channel.txt
xiaomi //每行一个渠道
huawei
vivo
oppo
meizu
  • 1
  • 2
  • 3
  • 4
  • 5
  • 根目录新建 flavor_channel.gradle
apply plugin: 'channel'
channel {
    //指定渠道文件
    channelFile = file("../flavor_channel.txt")
    println("channelFile:" + channelFile.exists())
    //多渠道包的输出目录,默认为new File(project.buildDir,"channel")
    baseOutputDir = new File(project.buildDir, "channel")
    //多渠道包的命名规则,默认为:${appName}-${versionName}-${versionCode}-${flavorName}-${buildType}
    apkNameFormat = '${appName}-${versionName}-${flavorName}-${buildType}'
    //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false)
    isFastMode = false
    //buildTime的时间格式,默认格式:yyyyMMdd-HHmmss
    buildTimeDateFormat = 'yyyyMMdd-HH:mm:ss'
    //低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式
    lowMemory = false
}
/**
 * apkNameFormat支持以下字段:
 *
 * appName : 当前project的name
 * versionName : 当前Variant的versionName
 * versionCode : 当前Variant的versionCode
 * buildType : 当前Variant的buildType,即debug or release
 * flavorName : 当前的渠道名称
 * appId : 当前Variant的applicationId
 * buildTime : 当前编译构建日期时间,时间格式可以自定义,默认格式:yyyyMMdd-HHmmss
 **/

dependencies {
    //多渠道
    api 'com.leon.channel:helper:2.0.3'
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 在 app 下的 build.gradle 文件中应用
apply from: '../flavor_channel.gradle'
  • 1
  • 读取渠道信息通过helper类库中的ChannelReaderUtil类读取渠道信息
String channel = ChannelReaderUtil.getChannel(getApplicationContext());
  • 1

基本使用
点击gradle的channelRelease就会自动构建打包
在这里插入图片描述

基于加固包或基准包打渠道包
flavor_channel.gradle文件中添加rebuildChannel,如下:

apply plugin: 'channel'

//根据已有基础包重新生成多渠道包
//若是根据已有基础包重新生成多渠道包,首先要配置渠道文件、基础包的路径和渠道包的输出目录:
rebuildChannel {
    //指定渠道文件
    channelFile = new File("../flavor_channel.txt")
    println("rebuildChannel:" + channelFile.exists())
    //debug基础包和release基础包
    baseDebugApk = new File(project.buildDir, "outputs/packers/app-release_10_jiagu_sign.apk")
    baseReleaseApk = new File(project.buildDir, "outputs/packers/app-release_10_jiagu_sign.apk")
    //debug渠道包和release渠道包
    debugOutputDir = new File(project.buildDir, "outputs/rebuildChannel/debug")
    releaseOutputDir = new File(project.buildDir, "outputs/rebuildChannel/release")
    //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false)
    isFastMode = false
    //低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式
    lowMemory = false
}

dependencies {
    //多渠道
    api 'com.leon.channel:helper:2.0.3'
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

根据已有基础包重新生成多渠道包,若是根据已有基础包重新生成多渠道包,首先要配置渠道文件、基础包的路径和渠道包的输出目录 配置成功后

基于加固包去打多渠道包
指令在: app---> Tasks---> channel---> reBuildChannel
多渠道包打包成功后apk路径:
/Users/houyadong/iProject/ASProj/app/build/outputs/rebuildChannel/release/huawei-app-release_10_jiagu_sign.apk 
/Users/houyadong/iProject/ASProj/app/build/outputs/rebuildChannel/release/meizu-app-release_10_jiagu_sign.apk
/Users/houyadong/iProject/ASProj/app/build/outputs/rebuildChannel/release/oppo-app-release_10_jiagu_sign.apk 
/Users/houyadong/iProject/ASProj/app/build/outputs/rebuildChannel/release/vivo-app-release_10_jiagu_sign.apk 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/253067
推荐阅读
相关标签
  

闽ICP备14008679号