当前位置:   article > 正文

Android多渠道打包_android 多渠道打包

android 多渠道打包

Android多渠道打包

author:Tzy

方式

Gradle构建

渠道信息配置

productFlavors中的flavordefaultConfig是同种类型,defaultConfig相当于一个默认的flavor.所有flavor都会继承defaultConfig中的配置,而flavor中的配置会覆盖它的任何值.

android {
    ...

    signingConfigs {
        release {
            ...
        }
        flavor3 {
            ...
        }
    }

    defaultConfig {
        applicationId "com.example.default"
        minSdkVersion 8
        targetSdkVersion 8
        versionCode 1
        versionName "1.0"
    }

    //渠道规格,必须配置
    flavorDimensions "dimension1","dimension2"

    //产品渠道信息配置
    productFlavors {
        //同defaultConfig
        flavor1 {
            dimension "dimension1"
        }
        //不同包名
        flavor2 {
            dimension "dimension2"
            applicationId "com.example.flavor2"
        }
        //不同签名
        flavor3 {
            dimension "dimension2"
            signingConfig signingConfigs.flavor3
        }
    }

    buildTypes {
        release {
            ...
            
            //不同签名也可以在此配置
            productFlavors.flavor3.signingConfig signingConfigs.flavor3
    }
}
  • 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
渠道资源配置

产品渠道可以通过配置不同的资源集来替换默认资源文件,Gradle在构建应用时,会优先使用flavor所属sourceSet中的同名资源,此特性可实现不同应用名称和图标等需求.

src目录下创建以渠道名称命名的文件夹,然后创建资源文件(路径要与main中的一致)然后打包的时候 gradle 就会自己替换或者合并资源.

例如使用不同应用名

默认的字符串资源文件路径为src/main/res/values/strings.xml:

<resources>
    <string name="app_name">defaultName</string>
</resources>
  • 1
  • 2
  • 3

flavor1渠道字符串资源文件路径为src/flavor1/res/values/strings.xml:

<resources>
    <string name="app_name">flavor1Name</string>
</resources>
  • 1
  • 2
  • 3

对应的渠道包的应用名称就会被替换,替换图标/颜色等同理.

判断渠道
通过渠道名称占位符判断
  • 在AndroidManifest.xml中添加占位符
    <meta-data android:name="InstallChannel" android:value="${InstallChannel}" />
    
    • 1
  • 在Gradle中的productFlavors中为占位符赋值
    android{
        ...
    
        productFlavors {
            flavor1 {
                manifestPlaceholders = [InstallChannel: "flavor1"]
            }
            flavor2 {
                manifestPlaceholders = [InstallChannel: "flavor2"]
            }
            flavor3 {
                manifestPlaceholders = [InstallChannel: "flavor3"]
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    也有另外一种简便的写法,其实就是用Groovy语法执行一个for循环:
    android{
        ...
    
        productFlavors {
            flavor1 {}
            flavor2 {}
            flavor3 {}
        }
    
        productFlavors.all { flavor ->
            flavor.manifestPlaceholders = [InstallChannel: name]
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 在代码中获取占位符对应渠道名称
private String getChannel(Context context) {
    try {
        PackageManager pm = context.getPackageManager();
        ApplicationInfo appInfo = pm.getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA);
        return appInfo.metaData.getString("InstallChannel");
    } catch (PackageManager.NameNotFoundException ignored) {

    }
    return "";
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
通过被替换的渠道资源判断

参考渠道资源配置

构建渠道包

使用Android Gradle Build Tasks构建渠道包

  • 打全部包: gradle assemble
  • 打全部 Debug 包: gradle assembleDebug
  • 打全部 Release 包: gradle assembleRelease
  • 打指定 flavor 包: gradle assemble(Flavor)(Debug|Release)
  • 打包并安装指定 flavor 包: gradle install(Flavor)(Debug|Release)
  • 清除项目/app目录下的build文件夹: gradle clean

反编译修改

参考Android 多渠道打包方式详解

META-INF修改(美团方式)

参考Android 多渠道打包方式详解Android多渠道打包

多渠道打包框架推荐

所有框架都是针对于单一flavor配置快速打出多个channel包,故不能实现不同包名,不同资源等需求.

多渠道打包工具对比VasDollypacker-ng-pluginWalle
V1签名方案支持支持不支持
V2签名方案支持支持支持
已有注释块的APK支持不支持不支持
根据已有APK生成渠道包支持不支持不支持
命令行工具支持支持支持
强校验支持不支持支持
多线程加速打包支持不支持不支持

参考

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

闽ICP备14008679号