我们公司是外包的公司,也是平台性质的公司,所以需要一个软件,分成不同的包来打,我就研究了下,下面是我的代码
主要在AndroidManifest.xml和build.gradle
<application android:name=".Myapplication" android:allowBackup="true" android:hardwareAccelerated="true" android:icon="${app_icon}" android:label="${app_name}" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="app_icon" android:value="${app_icon}" /> <meta-data android:name="UMENG_CHANNEL" android:value="${UMENG_CHANNEL}" /> <meta-data android:name="app_name" android:value="${app_name}" /> <meta-data android:name="packages" android:value="${package}" /> <!-- Required . Enable it you can get statistics data with channel --> <meta-data android:name="JPUSH_APPKEY" android:value="${JPUSH_APPKEY}" /> <!-- </>值来自开发者平台取得的AppKey-->
PS:JPUSH_APPKEY:是极光的key
下面是我的build.gradle文件
android {
compileSdkVersion 24
buildToolsVersion '25.0.0'
useLibrary 'org.apache.http.legacy'
defaultConfig {
// applicationId "com.unicornhcht.hcht.unicornhcht.xql"
minSdkVersion 15
targetSdkVersion 24
versionCode 16
versionName "1.1.9"
multiDexEnabled true;
}
productFlavors {
xql {
// 每个环境包名不同
applicationId "你的包名1"
manifestPlaceholders = [
app_name:"你的APP名称1",
package: applicationId,
JPUSH_PKGNAME: applicationId,
JPUSH_APPKEY : "极光key1", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL: "自定义渠道名称", //用户渠道统计的渠道名称
UMENG_CHANNEL:"xql",
app_icon:"@drawable/icon"
]
}
qlgf {
applicationId "你的包名2"
manifestPlaceholders = [
app_name:"你的APP名称2",
package: applicationId,
JPUSH_PKGNAME: applicationId,
JPUSH_APPKEY : "极光key2", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL: "自定义渠道名称", //用户渠道统计的渠道名称
UMENG_CHANNEL:"qlgf",
app_icon:"@drawable/icon"
]
}
qlsm {
applicationId "你的包名3"
manifestPlaceholders = [
app_name:"你的appn名称3",
package: applicationId,
JPUSH_PKGNAME: applicationId,
JPUSH_APPKEY : "极光key3", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL: "自定义渠道名称",//用户渠道统计的渠道名称
UMENG_CHANNEL:"qlsm",
app_icon:"@drawable/icon"
]
}
xgc {
applicationId "你的包名4"
manifestPlaceholders = [
app_name:"你的APP名称4",
package: applicationId,
JPUSH_PKGNAME: applicationId,
JPUSH_APPKEY : "极光key4", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL: "自定义渠道名称",
UMENG_CHANNEL:"xgc",//用户渠道统计的渠道名称
app_icon:"@drawable/icongc"
]
}
gc {
applicationId "你的包名5"
manifestPlaceholders = [
app_name:"你的APP名称5",
package: applicationId,
JPUSH_PKGNAME: applicationId,
JPUSH_APPKEY : "极光key5", //JPush上注册的包名对应的appkey.
JPUSH_CHANNEL: "自定义渠道名称",
UMENG_CHANNEL:"gc",//用户渠道统计的渠道名称
app_icon:"@drawable/icongc"
]
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
lintOptions {
checkReleaseBuilds false
abortOnError false
}
dexOptions {
javaMaxHeapSize "4g"
}
}
dependencies {
}
代码就这么多,如果你想只打一个包,你直接注销掉你productFlavors 下面配置的其他渠道就可以了,不要那个就注销那个
然后在运行,打包然后就是写key,记得选择包
我是5个包全部都要打,所以最后就是
PS:如果代码里面,有需要分一些平台的功能或者显示的文字,你只需要更加包名来判断就可以了
//获取包名 public static String getAppInfopkName(Context context) { try { String pkName = context.getPackageName(); String packageName = context.getPackageManager().getPackageInfo( pkName, 0).packageName; int versionCode = context.getPackageManager() .getPackageInfo(pkName, 0).versionCode; return packageName; } catch (Exception e) { return null; } }
i
if (getAppInfopkName(MainActivity.this).equals("你的包名1")) { //这个包要干嘛 } else if (getAppInfopkName(MainActivity.this).equals("你的包名2")) {//这个包要干嘛} else if (getAppInfopkName(MainActivity.this).equals("你的包名3")) {//这个包要干嘛} else if (getAppInfopkName(MainActivity.this).equals("你的包名4")) {//这个包要干嘛} else if (getAppInfopkName(MainActivity.this).equals("你的包名5")) {//这个包要干嘛}
ps:如果有什么不明白的,可以来问我
技术交流群:552123831