android 友盟多渠道打包 详细资料

 

前言

本文专注于Android友盟多渠道打包,具体的统计请查看友盟官网 https://www.umeng.com/

一 、获取Appkey

集成友盟SDK之前,首先需要到友盟官网注册并且添加新应用,获取Appkey(一般公司项目不需要自己申请账号,跟项目经理要即可)。每个应用对应的Appkey是唯一的,如下:

申请Appkey地址

二、导入SDK

1、在app的builde.gradle中添加依赖

 implementation 'com.umeng.sdk:common:latest.integration'
 implementation 'com.umeng.sdk:analytics:latest.integration'

如果无法正常集成,则需要在项目的builde.gradle中添加如下配置:

allprojects {
    repositories {
            mavenCentral()     
    }
}

2、添加权限

<!--4个必须添加的权限-->
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.READ_PHONE_STATE"/>

3、配置Appkey , 和渠道    mata-data 最好写在Application下   后续可能会对你有用

<application
    ...
<!--友盟 Appkey 自己应用注册申请来的-->
  <meta-data
       android:name="UMENG_APPKEY"
       android:value="5bdbb92ef1f5568e880001c2" />
  <!--渠道号,多渠道这里使用了占位符$-->
   <meta-data
       android:name="UMENG_CHANNEL"
       android:value="${UMENG_CHANNEL_VALUE}" />
    ...
</application>

4、配置app下的builde.gradle如下:

扫描二维码关注公众号,回复: 4368146 查看本文章

对这个我想大家应该不陌生吧,我就不对说了。不会的上网查 gradle 配置打包

//签名信息配置
    signingConfigs {
        net_core {
            storeFile file('E:/apk/dabao.jks')
            storePassword '123456'
            keyAlias 'apk'
            keyPassword '123456'
        }
    }

 添加一个默认的渠道号

 defaultConfig {
        ...
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "default_channel"]//添加一个默认渠道号
    }

 下面配置你要生成的渠道

   productFlavors {
        default_channel {}
        huawei {}
        oppo {}
        xiaomi {}
        yiyongbao {}
        vivo {}
        _360 {}
        ...
    }

    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

 对应的签名信息配置

 buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.net_core
        }
        debug {
            signingConfig signingConfigs.net_core
        }

其实现在就可以进行打包了, 在Termainal中输入命令   gradlew assembleRelease 就会进行自动打包

中间我有踩到一个坑,很多博客上是没写明的就是一直报这个错

都配置好了却出现这个错误,怎么办?

在build.gradle中添加 flavorDimensions "versionCode"解决问题

android{

defaultConfig{

    ...

flavorDimensions "versionCode"
    ...    

    }

}

我这个项目是有要求的,需要修改apk文件名  

大家可以查看 修改apk名

完整app的builde.gradle如下:

apply plugin: 'com.android.application'

android {
    //签名信息配置
    signingConfigs {
        net_core {
            storeFile file('E:/apk/dabao.jks')
            storePassword '123456'
            keyAlias 'apk'
            keyPassword '123456'
        }
    }
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.ning.dabao"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "default_channel"]//添加一个默认渠道号
    }

    flavorDimensions "a"
    productFlavors {
        default_channel {}
        huawei {}
        oppo {}
        xiaomi {}
        yiyongbao {}
        vivo {}
        _360 {}
    }

    productFlavors.all { flavor ->
        flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.net_core
         
            android.applicationVariants.all { variant ->
                    variant.outputs.all {
                        //这里修改apk文件名
                        outputFileName = "${variant.productFlavors[0].name}.apk"
                    }
            }
        }
        debug {
            signingConfig signingConfigs.net_core
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    /*友盟统计需要的最新版本组件化基础库和统计SDK*/
    implementation 'com.umeng.sdk:common:latest.integration'
    implementation 'com.umeng.sdk:analytics:latest.integration'
}

在Termainal中输入命令   gradlew assembleRelease 就会进行自动打包

在我的项目中需要用  渠道名称

 /**
     * 获取渠道名
     * @param context 此处习惯性的设置为activity,实际上context就可以
     * @return 如果没有获取成功,那么返回值为空
     */
    public  String getChannelName() {
        String channelName = null;
        try {
            PackageManager packageManager = this.getPackageManager();
            if (packageManager != null) {
                //注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
                ApplicationInfo applicationInfo = packageManager.
                        getApplicationInfo(this.getPackageName(), PackageManager.GET_META_DATA);
                if (applicationInfo != null) {
                    if (applicationInfo.metaData != null) {
                        channelName = String.valueOf(applicationInfo.metaData.get("UMENG_CHANNEL"));
                    }
                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return channelName;
    }

猜你喜欢

转载自blog.csdn.net/qq_36802214/article/details/83657022