android - 多渠道打包

我们公司是外包的公司,也是平台性质的公司,所以需要一个软件,分成不同的包来打,我就研究了下,下面是我的代码

主要在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值