1 前言
平时如果想要替换包名一般是在AS中右键Rename进行操作。但是如果遇到一份代码希望导出几种不同的包名(不是ApplicationId),并且代码还会持续更新,这时候就需要使用脚本在打包时自动导出成不同包名的apk。
有的人会说直接可以在build.gradle里面的productFlavors里面设置,然后用placeHolder填充包名就行啦。 注意,这时候就要区分ApplicationId和PackageName了。
ApplicationId,是在手机中标识唯一应用的id。(看起来就是包名)
defaultConfig {
applicationId"com.tsy.xxx"minSdkVersion9targetSdkVersion23versionCode1versionName"1.0"multiDexEnabledtrue //Enabling multidex support.
}
PackageName,AndroidManifest里面标明的package和每个java文件里面的package头的包名。
package com.tsy.xxx.xxx;
import xxxpublic classMainActivity {
...
}
平时使用productFlavors+PlaceHolder导出不同包只能导出ApplicationId不同的包,的确可以导出2个同时在手机安装的包,但是其实package并没有改变。当遇到以下情况时就会出现问题。
微信第三方接入时回调要求在包名路径下的.wxapi.WXCallBackxxx 固定写死这个文件才能回调。就是说如果你修改了ApplicationId没有修改PackageName是无法收到微信回调的。