Android studio多渠道打包

作者: YoungTa0 | 来源:发表于2018-03-27 15:02 被阅读34次

    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 <签名文件路径>

    相关文章

      网友评论

        本文标题:Android studio多渠道打包

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