通过gradle文件构建不同包名的Apk

FashionLazy 2020/5/28 23:26:37

由于业务需求,我们可能需要将同一个工程项目为不同的公司进行定制开发,在代码逻辑基本相同的情况下,我们可以通过在gradle在去为不同的公司构建指定的打包配置信息,而最主要的信息有应用包名、版本信息、icon以及其他一些配置信息。 那么下面看下具体是如何进行配置的…

由于业务需求,我们可能需要将同一个工程项目为不同的公司进行定制开发,在代码逻辑基本相同的情况下,我们可以通过在gradle在去为不同的公司构建指定的打包配置信息,而最主要的信息有应用包名、版本信息、icon以及其他一些配置信息。

那么下面看下具体是如何进行配置的:

android {
    ...
    //在android下方添加
    productFlavors {
        //第一个apk的打包配置
        fashionlazy1 {
            //应用包名
            applicationId 'com.fashionlazy.demo1'
            versionName "1.0.0"
            versionCode 100
            minSdkVersion 21
            targetSdkVersion 21
            resValue "string","app_name","FashionLazy"
            //为manifest配置添加参数,供manifest调用
            manifestPlaceholder = [authorities:"com.fashionlazy.demo1.fileprovider"]
            falvorDimensions "demo1"
        }
        //第二个apk的打包配置
        fashionlazy2 {
            //应用包名
            applicationId 'com.fashionlazy.demo2'
            versionName "1.0.0"
            versionCode 100
            minSdkVersion 21
            targetSdkVersion 21
            resValue "string","app_name","FashionLazy"
            //为manifest配置添加参数,供manifest调用
            manifestPlaceholder = [authorities:"com.fashionlazy.demo2.fileprovider"]
            falvorDimensions "demo2"
        }
    }
    ...
}
复制代码

现在看到在gradle中我们已经配置了两个apk的打包配置,几个比较常用的值就不过多解释,让我们看下下面几个配置的说明

resValue

这里是定制string资源数据,主要是在资源文件中添加一个string的资源,这里特别注意不要在string.xml中再添加这个字段,否则可能会报错,出现重复定义字段的。例子中我们主要是配置了app_name这个值

manifestPlaceholder

这个参数可以理解为往manifest中添加一个对象,然后我们可以在AndroidManifest中去引用这个添加的对象。比如配置中我添加了一个authorities的参数,那么在AndroidManifest中要怎么调用,让我们来看下

<provider
    android:authorities="${authorities}"
    android:name=".provider.FileProvider"
    android:exported="false"
>
    ....
</provider>
复制代码

在代码中,通过${authorities}就可以去根据不同的打包配置去给AndroidManifest的provider设置不同的值啦,同理,其他一些参数我们也可以这样来配置

然后再让我们来看下怎么来打不同的apk包吧,不多说,有图有真相, 首先在Build中选择Generate signed Bundle/APK选项

然后选择一个签名文件进行打包签名,输入文件的相关信息,如下图:

然后让我们再次点击下一步,如下图所示

从图片中我们可以看到,此时我们可以打出四种包,分别是fashionlazy1包名的debug与release包,以及fashionlazy2包名的debug与release包,而fashion1跟fashion2就是我们在gradle文件的productFlavors属性下添加的两种配置信息。

总结

通过gradle文件,我们可以轻松的定制不同渠道下、不同公司业务下的apk包,去定义各个渠道下的包名、版本信息等,同时对于资源文件以及AndroidManifest中的一些配置,我们可以通过resValue、manifestPlaceholder去给各个渠道添加定制的参数信息,比如app_name、app_icon等。而具体的业务逻辑代码,我们也可以通过比对不同的包名数据,去判断具体的代码执行逻辑,从而实现更好的渠道定制。

以上是我的一些心得,本人技术水平一般,不喜勿喷,也希望各位大神有更好的方案可以与我分享,让我们共同进步!谢谢

随时随地学软件编程-关注百度小程序和微信小程序
关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。
本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。
[通过gradle文件构建不同包名的Apk]http://www.zyiz.net/tech/detail-137681.html

上一篇:Appium定位Android控件之Xpath轴使用简介(小白篇)

下一篇:Android Studio 4.0 稳定版发布了

赞(0)

共有 条评论 网友评论

验证码: 看不清楚?
    关注微信小程序
    程序员编程王-随时随地学编程

    扫描二维码或查找【程序员编程王】

    可以随时随地学编程啦!

    技术文章导航 更多>
    扫一扫关注最新编程教程