AndroidStudio同一套代码打出不同包名的应用

今天遇到了一个问题:

之前公司申请软著的应用名字和现在上架的应用并不是同一个,所以在上架应用商店的时候遇到了问题

老板的意思是:我们两个都要做,一个是给企业用户用的,一个是给个人用户用的

香锅骚话Buff大龙全都要 F6不敢要?

那我们也不可能另开一个项目了,所以我们只能是:一套代码,打两个包,同时维护。

搜了搜有gradle配置方案来做这件事,我们需要设置的是app的build.gradle

android {
 productFlavors {
        app1 {
            applicationId "com.xx.xx1"
            // 自动生成@string/app_name为demo
            resValue "string","app_name","第一个app的名字"
            buildConfigField "int", "TYPE", "1"
            manifestPlaceholders = [app_icon : "@mipmap/ic_launcher",
                                    provider_name:"com.xx.xx1.fileprovider",
                                    app_round:"@mipmap/ic_launcher_round"]
        }
        app2 {
            applicationId "com.xx.xx2"
            resValue "string","app_name","第二个app的名字"
            resValue "string","provider_name","com.xx.xx2.fileprovider"
            buildConfigField "int", "TYPE", "2"
            manifestPlaceholders = [app_icon : "@mipmap/ic_launcher2",
                                    provider_name : "com.xx.xx2.fileprovider",
                                    app_round:"@mipmap/brand_value_icon_round"]
        }
    }
}

首先是在android{}这个层级下增加productFlavors{},然后如图所示

这里注意:我们的目的是要把AndroidManifest.xml中的app_name 和app_icon都放到gradle中,类似于资源文件的指向,所以在清单文件里,要这么写:

由于之前,app_name指向了strings.xml文件中的值,我们要把这个值删掉,指向gradle文件中的值。

这里要注意:由于我们的项目适配了8.0的图标,因此你需要再做一套图标,详见

https://blog.csdn.net/LXStrt01/article/details/83868923

注意第二个应用的图标叫什么都行,但是不能叫做ic_launcher了,因为会把第一个的图标给覆盖掉。

然后我在这里遇到了一个坑,就是虽然两个应用都用了不同的图标了,但是跑起来结果并不是。找了一番之后发现问题还是在Manifest文件里,

这里也需要配置不同的圆角图标,因此又要指向gradle文件。

manifestPlaceholders的值是一个[]数组,我们用逗号隔开即可定义app_icon或者是自己想定义的名字,只要和清单文件里写的一样就好了

在这些配置后,我们打包可以得到两个app,包名不同,图标也不同,但是仍然不能安装到同一个手机里,这是因为它们使用了相同的provider.不清楚这个操作的同学可以去搜一下。

好吧,我们又要提出来一个值,老规矩,gradle文件,manifestPlaceholders,逗号隔开

这样配置完之后,我们就可以得到两个图标、包名完全不同,也可以在一个手机上共存的app了。当然,如果你的项目内建了自动更新等功能,还是要考虑区分的。

猜你喜欢

转载自blog.csdn.net/LXStrt01/article/details/83868308