Android打包之多渠道打包

多渠道打包的目的:
为了实现应用包可以在多个应用商城上架
1.首先要有证书(jks文件)
2.在app/build.gradle配置证书信息
1).在gradle.properties中先写一些证书信息用于build.gradle配置的信息引入,增加安全性

KEY_PATH=/Users/zhangqianqian/Documents/packtest.jks
KEY_PASS=970421
ALIAS_NAME=zhangqianqiandev
ALIAS_PASS=970421

2).在android闭包中添加证书信息

 signingConfigs{
        config{
            storeFile file (KEY_PATH)
            storePassword KEY_PASS
            keyAlias ALIAS_NAME
            keyPassword ALIAS_PASS
        }

3).在buildTypes闭包中引入signingConfigs标签

  buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.config
        }
    }

2.修改AndroidManifest.xml的application标签里添加一个meta-data标签定义
⚠️注:渠道信息通常需要在AndroidManifest.xml中配置如下值:

<meta-data android:value="Channel ID" android:name="UMENG_CHANNEL"/>

上面的value值Channel_ID就是渠道标识。我们的期望的就是在编译时候这个值能够自动变化以满足区分多渠道的需求。

所以,在AndroidManifest.xml里设置动态渠道变量
在中添加 标签和代码

   <meta-data
                android:name="UMENG_CHANNEL"
                android:value="${UMENG_CHANNEL_VALUE}"/>

3.修改app/build.gradle,在android标签中添加Flavors

flavorDimensions "default"
        productFlavors{
            xiaomi{
                manifestPlaceholders = [UMENG_CHANNEL_VALUE:"xiaomi"]
            }
            qh360{
                manifestPlaceholders = [UMENG_CHANNEL_VALUE: "qh360"]
            }

        }

productFlavors中配置的每一个flavors都代表着一个渠道的apk信息,如xiaomi渠道号就代表着小米渠道的apk。那么这个渠道号又是如何替换的呢?我们可以看到manifestPlaceholders这个字段,其实可以把它理解为一个HashMap的键值对容器,通过这个键值对容器,我们就可以替换AndroidManifest.xml里面的友盟渠道配置信息即前面所说过的${UMENG_CHANNEL_VALUE}占位符字段的值,要注意名称配置一定要跟gadle中的名称一致。这样就完成了多渠道的替换循环工作,当然多渠道打包的工作也就完成了。上面的多渠道打包配置是不是很明朗也很清晰,但却略带麻烦,其实还有下面一种多渠道配置写法,显得相当简洁,不过就是不太明朗罢了,各自选择吧:

productFlavors{
            xiaomi{}
            qh360{}
        }
        productFlavors.all {
            flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }

4.打包
1).可视化安卓自带的打包方式
在这里插入图片描述
2).gradle方式打包
在这里插入图片描述
3).Terminal方式
输入./ gradlew assembleXiaomi
输入./ gradlew assembleQh360
5.一般工程会写两个代码块,分别名为debugConfig和releaseConfig
1).将打包签名文件拷贝到app目录下
在这里插入图片描述
2).AndroidManifest.xml的标签中添加标签内容(同上)

 <meta-data
                android:name="UMENG_CHANNEL"
                android:value="${UMENG_CHANNEL_VALUE}"></meta-data>

3).gradle.properties的添加变量值(同上)

KEY_PATH=packagetest_2.jks
KEY_PASS=970421
ALIAS_NAME=zhangqianqiandev
ALIAS_PASS=970421

4).修改build.gradle(完全代码)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.example.zhangqianqian.packagetest_2"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    signingConfigs{
        releaseConfig{
            storeFile file(KEY_PATH)
            storePassword KEY_PASS
            keyAlias ALIAS_NAME
            keyPassword ALIAS_PASS
        }
        debugConfig{
            storeFile file(KEY_PATH)
            storePassword KEY_PASS
            keyAlias ALIAS_NAME
            keyPassword ALIAS_PASS
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.releaseConfig
        }
        debug{
            signingConfig signingConfigs.debugConfig
        }
    }
    flavorDimensions "default"
    productFlavors{
        xiaomi{
            manifestPlaceholders=[UMENG_CHANNEL_VALUE:"xiaomi"]
        }
        qh360{
            manifestPlaceholders=[UMENG_CHANNEL_VALUE:"qh360"]
        }
        baidu{
            manifestPlaceholders=[UMENG_CHANNEL_VALUE:"baidu"]
        }
    }
//写法二
//    productFlavors{
//        xiaomi{}
//        qh360{}
//        baidu{}
//    }
//    productFlavors.all{
//        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
//    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

5).打包方式(如上)
Androidstudio自动打包
gradle的task点击打包
Terminal中输入命令打包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值