美文网首页
一份源码编译多个不同包名不同签名的APK

一份源码编译多个不同包名不同签名的APK

作者: 小聪明V | 来源:发表于2018-03-26 18:23 被阅读174次

    前言

    去年公司因为某家客户的安全性和私密性的要求,需要我们提供不同包名不同签名的APP上传到谷歌应用市场。客户的硬性要求,怎么办呢,只能硬着头皮上了。当时时间又紧急,无奈之下只能给这家客户单独维护一套代码。由此开始了苦逼的合代码工作,一到发布的时间点,需要维护两套代码,作为程序员坚决不能忍啊,于是乎开始了回归正轨的工作。

    摘要

    此篇博客主要参考一下两篇文章,有兴趣的同学可以查阅:

    app拆分,多产品打包实录.md

    一套源码编译多个 APP,不同签名,不同接口等配置

    方案

    有一定基础的同学应该都知道要想实现不同的包名,不同的签名,不同的应用名称,不同的应用图标等最好的方案就是使用gradle.

    首先实现第一步:

    productFlavors配置

    这上面设置的几个参数相信大家应该不陌生,applicationId代表你的应用包名,这边大家要和packageName作区分,前者负责APP进程的id,后者负责R包名以及四大组件的包名。resValue  和 manifestPlaceholders主要用来设置名称图标和第三方的key值。manifestPlaceholders在manifest中用占位符来表示,例如:android:icon="${app_icon}"

    你按照如上代码运行这里边会有几个坑,倾听我一一道来:

    (1).Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com/r/tools/flavorDimensions-missing-error-message.html

    google了一下大致是说,Plugin 3.0.0之后有一种自动匹配消耗库的机制,便于debug variant 自动消耗一个库,然后就是必须要所有的flavor 都属于同一个维度。所以你需要在主APP里面添加flavorDimensions "versionCode",然后再productFlavors每个子项里面分别加上dimension "versionCode"

    (2).Error:Execution failed for task ':EroadProduct:mergeEroadDebugResources'.> [string/app_name] /Users/wanjuanjuan/Downloads/android_git/ehr-android/EroadProduct/res/values/strings.xml [string/app_name] /Users/wanjuanjuan/Downloads/android_git/ehr-android/EroadProduct/build/generated/res/resValues/eroad/debug/values/generated.xml: Error: Duplicate resources

    有冲突需要把strings.xml文件里的app_name删除

    (3).需要把第三方使用到的key,id等作区分,在manifest里用占位符,在代码里可以用BuildConfig.FLAVOR进行区分

    (4).signatures are inconsistent

    接下来最主要的就是签名这一块,准备两份签名文件,参考如下格式,

    signingConfig配置

    在productFlavors分别去引用他,例如signingConfig signingConfigs.eroad 

    总结

    以上是我对一套源码多个APK的理解,有错误请纠正,O(∩_∩)O谢谢!

    相关文章

      网友评论

          本文标题:一份源码编译多个不同包名不同签名的APK

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