美文网首页
Android 打包那些事儿

Android 打包那些事儿

作者: corabsins | 来源:发表于2018-03-28 23:08 被阅读0次

    一、渠道包

    1、什么是渠道包?

    渠道包是 针对不同应用市场添加不同 标识的 apk文件,用于上传不同应用市场,一般是在清单文件中的meta-data标签下配置不同的value来区分不同的渠道

    2、渠道包的作用

    a、用于观察不同应用市场的下载量、用户数等
    b、查看app 在每个渠道的统计数据
    c、通过下载量、渠道统计等统计数据,可以进行运营推广

    二、友盟多渠道打包介绍(Android Gradle Plugin)

    步骤:

    a、清单文件中添加友盟的基本配置(必须)
    b、在build文件中添加默认渠道配置(非必须)
    c、添加签名文件配置(必须)
    d、多渠道脚本支持(必须)
    e、通过命令gradlew assembleRelease 或者Generate signed apk 打包

    1、清单文件中添加友盟的基本配置

    UMENG_CHANNEL 对应value添加channel 点位符,用于动态替换,关于友盟SDK 的集成,请参照友盟官网

           <!-- 友盟appkey  -->
            <meta-data
                android:name="UMENG_APPKEY"
                android:value="242342342424242424" />
    
            <!-- 渠道标示*必须以UMENG_CHANNEL为key -->
            <meta-data
                android:name="UMENG_CHANNEL"
                android:value="${UMENG_CHANNEL_VALUE}" />
    

    2、在build文件中添加默认渠道配置 (manifestPlaceholders )

    如果未设置渠道,会走默认配置,下列代码添加的默认渠道配置为 main

    andrid{
       defaultConfig {
            applicationId "xxx.xxx.xxx"
            minSdkVersion 15
            targetSdkVersion 26
            versionCode 1
            versionName "1.0"
            flavorDimensions "1.0"
    
            // Enabling multidex support.
            multiDexEnabled true
    
            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "main"]
           }    
        }
    

    3、添加签名文件配置

    切记signingConfigs 必须放到buildTypes 前面,否则会报如下错误

    Could not get unknown property 'release' for SigningConfig

    android{
      signingConfigs {
            debug {
                keyAlias 'debug'
                keyPassword '11111111'
                storeFile file('C:/keystore/debug.jks')
                storePassword '11111111'
            }
            release {
                keyAlias 'release'
                keyPassword '11111111'
                storeFile file('C:/keystore/release.jks')
                storePassword '11111111'
            }
        }
    
      buildTypes {
            release {
                minifyEnabled true
                signingConfig signingConfigs.release
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
            debug{
                minifyEnabled false
                signingConfig signingConfigs.debug
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
      
    }
    

    4、多渠道脚本支持

    //定义的所有渠道
        productFlavors {
            main {      //主站
    //            manifestPlaceholders =[UMENG_CHANNEL_VALUE: "main"]
            }
            tencent {  //腾讯应用包
    //            manifestPlaceholders =[UMENG_CHANNEL_VALUE: "tencent"]
            }
        }
    
       //遍历替换清单文件中的渠道名称
        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
        }
    
    //   gradle 3.0及之后用如下配置更改渠道文件名
        android.applicationVariants.all { variant ->
            variant.outputs.all {
                outputFileName = "${variant.productFlavors[0].name}_test.apk"
            }
        }
    //   gradle 3.0之前用如下配置更改渠道文件名
    //    applicationVariants.all { variant ->
    //        variant.outputs.each { output ->
    //            def outputFile = output.outputFile
    //            if (outputFile != null && outputFile.name.endsWith('.apk')) {
    //                def fileName = "${variant.productFlavors[0].name}_test.apk"
    ////                def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
    //                output.outputFile = new File(outputFile.parent, fileName)
    //            }
    //        }
    //    }
    

    5、通过命令gradlew assembleRelease 或者Generate signed apk 打包

    打好包后,可以在 以渠道名为文件夹里找到,提供一个简单的 demo

    三、其它多渠道打包介绍

    Android Gradle Plugin 打包方式是google 提供的,当打多个渠道包,例如20个,往往要花费数个小时才能打完所有渠道包,主要有以下缺点:
    a、每次打包都要走一遍构建流程,效率非常低,只适合较少渠道场景
    b、Gradle会为每个渠道包生成一个不同的BuildConfig.java类,记录渠道信息,导致每个渠道包的DEX的CRC值都不同,一般情况下,这是没有影响的。但是如果你使用了微信的Tinker热补丁方案,那么就需要为不同的渠道包打不同的补丁,这完全是不可以接受的。所以我们得保证每个包的DEX和CRC 完全一致才行,这样我们就只需要生成一个补丁即可

    目前市场上提供比较好用的多渠道打包工具有腾讯的 VasDolly
    (v1和v2都支持)、美团的 walle(支持v2签名)
    packer-ng-plugin(v1和v2都支持),基本原理一致,只是某些技术细节略有差异

    四、多渠道打包原理介绍

    看了美团和腾讯多渠道打包的方案原理,针对v2签名基本原理是一致的具体请参考

    腾讯VasDolly原理

    美团Walle原理

    关于v1和v2的介绍,请参照 连接

    相关文章

      网友评论

          本文标题:Android 打包那些事儿

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