Android多包技术之Apk版本共存
Googe默认的额打包方式为单打包模式包含release和debug两种,但是并不能同时安装在同一Android设备上,因为Google默认同一Apk 的唯一识别ID就是一个应用,无论是改变apk的签名还是做其他的操作,在没有变动唯一识别ID的情况下,是不能实现版本共存的。因此想要做到版本共存,一定要先改变唯一ID,当然,如果手动修改的话,是作为开发人员所能忍受的事情,通过强悍的标识”applicationIdSuffix“可以实现手动修改ID的麻烦事,如下:
在主项目的bulid.gradle下面加上
applicationIdSuffix
buildTypes { release { //开启混淆 minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.config applicationIdSuffix "AA" // applicationIdSuffix "BB" }
applicationIdSuffixdebug { jniDebuggable = true }}
此时通过切换”applicationIDSuffix“的值,然后打包版本就可以实现版本共存了,当然我们需要做到的不仅仅是这样而已,在实际的开发过程中,遇到共享同一套核心代码的事情必然是会出现,这时候根据不同的版本需求,可能会需要我们准备两套甚至是更多的资源文件。
所以单纯的版本共存上面的方式足够了,但是这并不影响我们继续学习的心。为了实现资源文件的分离模式,我们需要寻求新的解决方案。
productFlavors
signingConfigs { configAA { keyAlias 'AA' keyPassword 'AA' storeFile file('AA.jks') storePassword 'AA' } } signingConfigs { configBB { keyAlias 'BB' keyPassword 'BB' storeFile file('BB.jks') storePassword 'BB' } } productFlavors{ AA{ applicationId "com.xx.xx.AA" buildTypes { release { //开启混淆 minifyEnabled false //shrinkResources false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.configAA applicationIdSuffix "AA" } debug { jniDebuggable = true } } } BB{ applicationId "com.xx.xx.BB" buildTypes { release { //开启混淆 minifyEnabled false //shrinkResources false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.configBB applicationIdSuffix "BB" } debug { jniDebuggable = true } } } }
”productFlavors“ 中放置AA,BB,CC......等等多个不同的共存版本问题,通过在各自的版本中配置新的唯一识别ID,配置新的各自的签名文件以便在同一android市场上可以实现共同上架。build.gradle方面的工作完成,关键的因素来了,如何自动配置不同的资源文件。
1. 首先在主项目的main同级目录下新建需要的版本文件夹,如下:
2. 其次在版本文件夹下面创建对应的资源文件夹,如下:
不仅仅是strings.xml文件哦,像drawable,layout等等文件下的资源文件都可以重新配置。需要注意的是如果在版本文件的资源中有出现的如:<string name="app_name">"AA"<string/>,那么在main文件下的资源文件就不能出现这个字段了,同理其他的资源文件也是一样。因为productFlavors会做资源文件的覆盖操作。
3. 通过Build Variant 可以运行想要的版本了,如下:
这样就可可打包出不同资源,不同ID的共存版本了。