Android 进行友盟多渠道打包步骤详解

简介: Android 进行友盟多渠道打包步骤详解

1、首先在AndroidManifest.xml文件中的application标签内加入

<meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}" />

2、在应用的build.gradle文件中,添加如下代码

plugins {
    //表示这是一个应用程序模块,com.android.library表示这是一个库模块
    id 'com.android.application'
}
android {
    //编译SDK版本
    compileSdkVersion 30
    //编译工具版本
    buildToolsVersion "30.0.3"
    defaultConfig {
        //appId
        applicationId "com.example.exercisetest"
        //最小支持SDK版本
        minSdkVersion 23
        //目标版本
        targetSdkVersion 30
        //版本号
        versionCode 1
        //版本名称
        versionName "1.0"
        //测试单元
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
         //必须要保证所有的flavor 都属于同一个维度
        flavorDimensions "default"
    }
    //构建类型
    buildTypes {
        //生产环境
        release {
            //表示是否对项目的代码进行混淆,true表示混淆 false表示不混淆
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
    //方式一
//    productFlavors {
//        wandoujia {
//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
//        }
//        xiaomi {
//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
//        }
//        yingyongbao {
//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "yingyongbao"]
//        }
//    }
    //优化1
//    productFlavors {
//        wandoujia {
//        }
//        xiaomi {
//        }
//        yingyongbao {
//        }
//    }
//    productFlavors.all { flavor ->
//        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
//    }
    //优化二
    productFlavors {
        wandoujia {
        }
        xiaomi {
        }
        yingyongbao {
        }
    }
    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }
    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            def outputFile = output.outputFile
            if (outputFile != null && outputFile.name.endsWith('.apk')) {
              //打包的apk包名变为了
              //app-具体的渠道名-release-1.0.apk
                def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionName}.apk")
                outputFileName = fileName
            }
        }
    }
}
//依赖相关信息
dependencies {
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.material:material:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

3.可以在Java代码中,获取apk对应的渠道名

public String getChannel() {
        ApplicationInfo applicationInfo = null;
        try {
            //getPackageManager():返回PackageManager实例以查找全局包信息。
            //getApplicationInfo(String packageName, int flags):
            // 检索我们所了解的有关特定软件包/应用程序的所有信息。
            //参数一:  getPackageName():返回此应用程序包的名称
            //参数二:PackageManager.GET_META_DATA
            // ComponentInfo标志:返回与组件关联的metaData数据Bundle 。 这适用于返回ComponentInfo子类的任何API。
            applicationInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
            if (applicationInfo != null) {
                //metaData属性在其ApplicationInfo类的父类PackageItemInfo里面
                //metaData:与此组件关联的其他元数据。
                //BaseBundle.getString():返回与给定键相关联的值
                return applicationInfo.metaData.getString("UMENG_CHANNEL");
            }
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return "";
    }


目录
相关文章
|
5月前
|
安全 Java Android开发
05. 【Android教程】Android 程序签名打包
05. 【Android教程】Android 程序签名打包
61 1
|
2月前
|
Dart 开发工具 Android开发
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
在 Android 系统上搭建 Flutter 环境的具体步骤是什么?
|
3月前
|
安全 Java Android开发
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
如何解压OTA升级包、编辑升级包内容(例如移除不需要更新的分区)、重新打包、签名以及验证OTA文件的过程。
273 2
【Android P】OTA升级包定制,移除不需要更新的分区,重新打包签名
|
3月前
|
Android开发 iOS开发 C#
Xamarin.Forms:从零开始的快速入门指南——打造你的首个跨平台移动应用,轻松学会用C#和XAML构建iOS与Android通用界面的每一个步骤
【8月更文挑战第31天】Xamarin.Forms 是一个强大的框架,让开发者通过单一共享代码库构建跨平台移动应用,支持 iOS、Android 和 Windows。使用 C# 和 XAML,它简化了多平台开发流程并保持一致的用户体验。本指南通过创建一个简单的 “HelloXamarin” 应用演示了 Xamarin.Forms 的基本功能和工作原理。
76 0
|
4月前
|
Android开发
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
131 0
|
5月前
|
Java 开发工具 Android开发
详细解读Android开发DNK开发将.c文件打包成os
详细解读Android开发DNK开发将.c文件打包成os
32 0
|
5月前
|
jenkins 持续交付 开发工具
Android使用Jenkins打包自动维护sdk版本号
Android使用Jenkins打包自动维护sdk版本号
57 0
|
5月前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
275 0
|
6月前
|
Java Linux 调度
Android 打包分析
Android 打包分析
54 2
|
6月前
|
设计模式 缓存 Java
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试