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 "";
    }


目录
相关文章
|
2月前
|
敏捷开发 Java 机器人
云效产品使用常见问题之打包后的Android应用获取下载地址失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
1月前
|
安全 Java Android开发
05. 【Android教程】Android 程序签名打包
05. 【Android教程】Android 程序签名打包
19 1
|
5天前
|
Android开发
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
【亲测,安卓版】快速将网页网址打包成安卓app,一键将网页打包成app,免安装纯绿色版本,快速将网页网址打包成安卓apk
12 0
|
11天前
|
Java 开发工具 Android开发
详细解读Android开发DNK开发将.c文件打包成os
详细解读Android开发DNK开发将.c文件打包成os
10 0
|
16天前
|
jenkins 持续交付 开发工具
Android使用Jenkins打包自动维护sdk版本号
Android使用Jenkins打包自动维护sdk版本号
16 0
|
16天前
|
Android开发
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
Android Gradle开发—脚本实现自动打包后复制一份APK文件,并修改APK名称,到指定目录作备份
26 0
|
2月前
|
设计模式 缓存 Java
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
|
2月前
|
Java Linux 调度
Android 打包分析
Android 打包分析
30 2
|
2月前
|
测试技术 开发工具 Android开发
安卓应用开发:打造高效用户界面的关键步骤
【5月更文挑战第27天】本文将探讨在安卓应用开发中如何通过关键步骤打造高效且用户友好的界面。我们将分析UI设计的基本原则,探究Material Design指南,并讨论如何利用Android Studio中的设计工具来优化布局和提高性能。此外,文章还将涉及如何进行有效的测试以确保应用界面既美观又实用。
|
2月前
|
Java Android开发
Android module 打包成aar或jar
Android module 打包成aar或jar
29 0