AndroidAndroid开发Android开发经验谈

Android studio多渠道打包

2018-03-27  本文已影响34人  YoungTa0

1.为什么要多渠道打包

●APP发布到不同的应用平台,监测用户是从哪个平台安装的。
●统计用户安装APP来源
●批量修改生成的apk文件名
●可更改包名
●生成不同应用名称或图标

2.Android studio多渠道打包步骤

1.在AndroidManifest.xml中添加占位符

一般都是像友盟,腾讯统计分析SDK中使用的方案,网上友盟的较多,我实际用的是腾讯分析所以就拿腾讯的来说(其实都一样)。
首先,在AndroidManifest.xml的application标签里添加一个meta-data标签定义MTA_CHANNEL占位符,腾讯分析SDK会读取里面的value值传到后台,便于我们日后分析。

<meta-data android:name="MTA_CHANNEL"
            android:value="${MTA_CHANNEL_VALUE}" />
2.修改app下的build.gradle文件,在android闭包中添加productFlavors属性配置占位符
android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.aimerd.channel"
        minSdkVersion 11
        targetSdkVersion 21
        versionCode 1
        versionName "1.0.0"
        multiDexEnabled true
    }
    buildTypes {
        release {
            // 不显示Log
            buildConfigField "boolean", "LOG_DEBUG", "false"
            //启用混淆代码的功能
            minifyEnabled true
            //压缩对齐生成的apk包
            zipAlignEnabled true
            //指定混淆规则,需要压缩优化的混淆要把proguard-android.txt换成proguard-android.txt
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //移除无用的资源文件
            shrinkResources true
            //启用multidex的支持
            multiDexEnabled true
        }
    }
    productFlavors 
        baidu {
            manifestPlaceholders = [MTA_CHANNEL_VALUE: "baidu"]
        }
        _91 {
            manifestPlaceholders = [MTA_CHANNEL_VALUE: "91"]
        } 
        wandoujia {
            manifestPlaceholders = [MTA_CHANNEL_VALUE: "wandoujia"]
        }
        xiaomi {
            manifestPlaceholders = [MTA_CHANNEL_VALUE: "xiaomi"]
        }
    }
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def outputFile = output.outputFile
            if (variant.buildType.name.equals('release')) {
                //生成apk名字的格式:Channel1.0.0_2016-06-22_baidu.apk
                //可自定义自己想要生成的格式
                def fileName = "Channel${defaultConfig.versionName}_${releaseTime()}_${variant.productFlavors[0].name}.apk"
                       output.outputFile = new File(outputFile.parent, fileName)
            }
        }
    }

def releaseTime() {
    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
3. build->Generate Signed APK…打包即可

3.打包过程中的一些名词

密钥库
●Key store path:签名文件路径
●Key store password:签名文件密码
●Alias:签名文件别名
●Key password:签名文件别名密码
●Validity (years):以年为单位设置密钥的有效时长。密钥的有效期应至少为 25 年,以便您可以在应用的整个生命期内使用相同的密钥签署应用更新
●Certificate:为证书输入一些关于您自己的信息。此信息不会显示在应用中,但会作为APK的一部分包含在您的证书中
● Signature Version V1 V2
Android 7.0中引入了APK Signature Scheme v2,v1呢是jar Signature来自JDK
V1:应该是通过ZIP条目进行验证,这样APK 签署后可进行许多修改 - 可以移动甚至重新压缩文件。
V2:验证压缩文件的所有字节,而不是单个 ZIP 条目,因此,在签名后无法再更改(包括 zipalign)。正因如此,现在在编译过程中,我们将压缩、调整和签署合并成一步完成。好处显而易见,更安全而且新的签名可缩短在设备上进行验证的时间(不需要费时地解压缩然后验证),从而加快应用安装速度。
解决方案一
v1和v2的签名使用
只勾选v1签名并不会影响什么,但是在7.0上不会使用更安全的验证方式
只勾选V2签名7.0以下会直接安装完显示未安装,7.0以上则使用了V2的方式验证
同时勾选V1和V2则所有机型都没问题

什么是签名 MD5? 如何获取
每个签名文件都有一个数字指纹。相当于是公钥,同一个签名文件的指纹是一样的,不同的签名文件指纹不一样。可以通过检查这个指纹确定是不是使用的同一个签名文件。百度人脸鉴权服务使用的是 MD5方式的指纹。
命令行输入:
keytool –list –v –keystore <签名文件路径>

上一篇 下一篇

猜你喜欢

热点阅读