android技术专栏安卓开发Android开发

Android多渠道打包

2017-03-24  本文已影响0人  CaptainJno

APP开发过程中,有时会遇到一个需求:公司让开发两个客户端(比如买家端、卖家端),两个APP有很多共同点,开发者为了代码方便,于是在一个项目中开发,但,最终还是要打包成两个APP,就会遇到一些比较棘手的问题:

问题一、APP名字怎么办

1、将Manifest中application的label修改如下:

android:label="${app_name}"               //占位写法,$是占位符,app_name是占位标签

2、在Module的build.gradle中增加下面代码:

productFlavors {

seller {

versionCode1

versionName"1.0.0"

applicationId"com.test.seller"

//app_name是上述label中的占位标签

//app_name_seller是res文件中的字符串资源id

manifestPlaceholders= [app_name:"@string/app_name_seller"]      

}

buyer {

versionCode1

versionName"1.0.0"

applicationId"com.test.buyer"

//app_name是上述label中的占位标签

//app_name_buyer是res文件中的字符串资源id

manifestPlaceholders= [app_name:"@string/app_name_buyer"]    

}

}

这样,打出来的release包就是两个不同名字。

问题二、APP包名怎么办

在“问题一”中,已经把该问题解决了,就是设置不同的applicationId。大家都知道,不同的applicationId代表不同的APP。

按照“问题一”配置后,开发过程中如果需要调试运行seller端,需要注释掉buyer{...}这段代码。反之调试buyer,注释掉sellerr{...}。

问题三、APP图标怎么办

方法类似“问题一”的换APP名字:

1、将Manifest中application的icon修改如下:

android:icon="${app_icon}"

2、在Module的build.gradle中增加下面代码(下面以seller端为例):

manifestPlaceholders= [app_icon:"@string/app_icon_seller"]

注:如果同时需替换APP名字和APP图标,那么manifestPlaceholders这么写:

manifestPlaceholders= [app_name:"@string/app_name_seller",app_icon:"@string/app_icon_seller"]

问题四、其他代码怎么办

有人会问,上面3个问题都是将Manifest中要用到的资源给提取出来,放在gradle中配置了。那,非Manifest中的资源怎么办?

比如:我想在项目中,不同端的登录,我只想用一个LoginActivity.java实现不同跳转;又比如:我想为不同端APP设置不同启动页图片,欢迎页图片等。

其实,这个问题我没有好办法。。。网上有说在与main文件夹同级的目录中,新建两个文件夹(seller、buyer),子文件夹结构和main都一样,只是,文件中资源采用同名不同内容的方法,这样编译打包时会根据"问题一"中2的配置来自动调用。但是,个人亲自尝试验证,此方法不可行。

所以,我只能采用了笨方法。因为两个项目的applicationId不同,所以我在需要区分APP端口的地方,用了如下的代码

if(getApplicationContext().getPackageName().equals("com.test.seller")) {

//TODO ...卖方

}else if(getApplicationContext().getPackageName().equals("com.test.buyer")) {

//TODO ...买方

}

好了,以上就是全部内容。谢谢!


文章末尾:如果大家看到我的文章,有关于问题 四 的好的解决方案,还麻烦评论里说一下,或发个链接。谢谢!

上一篇下一篇

猜你喜欢

热点阅读