android多渠道打包

1. 多渠道打包概述
  • 1.渠道是国内android平台特有的名词
  • 2.由于google play无法使用,因此出现了众多市场
  •  3.一个渠道就是代表一个市场                 
    
2. 使用场景
  • 1.如果应用只针对某个平台,则无须多渠道
  • 2.只要应用提供多种下载途径,就会使用到多渠道,例如:官网,豌豆夹,问问应用商店
3. 意义
  • 1.可以更详细的统计app被下载的途径
  • 2.我们可以查看app在每个渠道上的表现
  • 3.更有利于我们app推广
4. 友盟多渠道打包
  • 1.在友盟统计上注册账号并增加应用(http://mobile.umeng.com/apps),获取appKey
  • 2.在module的build.gradle文件中添加依赖
    dependencies {
        compile 'com.umeng.sdk:common:1.5.0'
        compile 'com.umeng.sdk:analytics:7.5.0'
    }
  • 3.在AndroidMenifest.xml文件中添加
<!-- 友盟统计的meta-data配置-->
        <meta-data
            android:name="UMENG_APPLEY"
            android:value="5b5321eea40fa30660000151">//配置友盟申请的appKey
        </meta-data>
        <meta-data
            android:name="UMENG_CHANNEL"
            android:value="${UMENG_CHANNEL_VALUE}">//通过占位符动态配置渠道号
        </meta-data>
  • 4.在 defaultConfig中添加默认打包
manifestPlaceholders = [UMENG_CHANNEL_VALUE:"umeng"]  //默认打包渠道名umeng
  • 5.添加签名配置以及渠道配置
    渠道配置有两种方式:
    方式1:
productFlavors{
        xiaomi {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
        }
        wandoujia {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"]
        }
    }

方式2:

productFlavors{
        xiaomi {}
        wandoujia {}
    }
    productFlavors.all {
        flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]  //动态的改变渠道名
    }
  • 6.编译生产渠道包
window下使用gradlew,而ubuntu下使用 ./gradlew
gradlew build    //编译所有渠道的debug版本和release版本
gradlew assembleRelease    //编译所有渠道的release版本
gradlew assembleDebug     //编译所有渠道的debug版本
gradlew assemblewandoujiaRelease    //编译豌豆荚渠道的release版本

打包中出现过时Api,在build.gradle中添加
allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}
再编译,可以看到具体的过时方法
解决办法:在build.gradle中添加下面代码,再去编译
android{ 
	lintOptions { 
		checkReleaseBuilds false 
		abortOnError false 
	} 
}

编译中文问题
Q: All flavors must now belong to a named flavor dimension
A: 版本名后面添加一句话,意思就是flavor dimension 它的维度就是该版本号,这样维度就是都是统一的了flavorDimensions "versionCode"

  • 补充说明1:
productFlavors{
        xiaomi {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"]
          resValue "string", "app_name", "xiaomi_app"   //修改渠道对应的apk名称为xiaomi_app
        }
        wandoujia {
          manifestPlaceholders = [UMENG_CHANNEL_VALUE: "wandoujia"] 
          resValue "string", "app_name", "wandoujia_app"    //修改渠道对应的apk名称为wandoujia_app
        }
    }
    还需要将strings.xml中app_name注释掉
     <!--<string name="app_name">MultiChannel</string>-->
  • 补充说明2:
功能测试,解决手机上可以同时安装多个不同功能的apk,从而不用去卸载之前安装的版本,例如测试功能
okhttp和极光推送两个功能:
 productFlavors{
        okhttp {
            applicationIdSuffix "okhttp"               //会在包名后面追加okhttp
            resValue "string", "app_name", "okhttp"
        }
        jpush{
            applicationIdSuffix "jpush"             //会在包名后面追加jpush
            resValue "string", "app_name", "jpush"
        }
    }

5.百度统计多渠道打包
  • 1.在百度统计上注册账号并增加应用,获取appKey

https://app.baidu.com/apps/

  • 2.gradle集成
    为方便开发者,百度移动统计-标准版SDK,已经支持配置gradle网络下载依赖JAR。开发者不再需要自行下载依赖JAR,然后配置;直接指定jcenter仓库的移动统计JAR即可。
    (1). project build.gradle,android studio项目默认已经配置好:
allprojects {
     repositories {
         jcenter()
     }
 }
(2). module build.gradle,需要添加如下配置:
dependencies {
     implementation'com.baidu.mobstat:mtj-sdk:latest.integration'
 }
  • 3…在AndroidMenifest.xml文件中添加
<!-- 百度统计的meta-data配置-->
        <meta-data
            android:name="BaiduModAd_STAT_ID"
            android:value="a9e2a84a2">//配置百度申请的appKey
        </meta-data>
        <meta-data
            android:name="BaiduModAd_STAT_CHANNEL"
            android:value="${BAIDU_CHANNEL_VALUE}">//动态配置渠道号
        </meta-data>
  • 在 defaultConfig中添加默认打包
manifestPlaceholders = [BAIDU_CHANNEL_VALUE:"baidu"]  ////默认打包渠道baidu
  • 5 渠道配置和友盟完全类似
productFlavors{
        xiaomi {
            manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "xiaomi"]
        }
        wandoujia {
            manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "wandoujia"]
        }
        baidu {
            manifestPlaceholders = [BAIDU_CHANNEL_VALUE: "baidu"]
        }
    }

利用美团walle(瓦力)快速进行多渠道打包

1.修改项目根目录下build.gradle文件,在buildscripts下的dependencies中增加:

classpath 'com.meituan.android.walle:plugin:1.1.6'

2.修改app工程的build.gradle文件,增加如下信息:

apply plugin: 'walle'

2.2 确保有签名配置(没有签名编译报错 ERROR: A problem occurred configuring project ‘:app’.)

signingConfigs {
        release {
            storeFile file("../test.jks")
            storePassword "123456"
            keyAlias "test"
            keyPassword "123456"
        }
        debug {
            storeFile file("../test.jks")
            storePassword "123456"
            keyAlias "test"
            keyPassword "123456"
        }
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        debug {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.debug
        }
    }

2.3 增加如下配置(按照下面配置生成的渠道包在build/outputs/channels目录下,而不是build/outputs/apk目录):

walle {
    // 指定渠道包的输出路径
    apkOutputFolder = new File("${project.buildDir}/outputs/channels");
    // 定制渠道包的APK的文件名称
    apkFileNameFormat = '${appName}-${packageName}-${channel}-${buildType}-v${versionName}-${versionCode}-${buildTime}.apk';
    // 渠道配置文件
    channelFile = new File("${project.getProjectDir()}/channel")
}

4.在app module下新建文件channel,放置渠道信息

yingyongbao
oppo
huawei
vivo
xiaomi
baidu
meizu
qh360
wandoujia
ppzhushou
jinli
aliyun
sougou
lenovo
anzhi
faqiao

4.命令行打包

常用的walle打包命令
//生成所有渠道包
gradlew clean assembleReleaseChannels
// 生成单个渠道包:
gradlew clean assembleReleaseChannels -PchannelList=meituan

//生成多个渠道包:
gradlew clean assembleReleaseChannels -PchannelList=meituan,dianping

5…为了关联到友盟统计
5.1 在dependencies中增加

implementation 'com.meituan.android.walle:library:1.1.6'

5.2 获取渠道信息

 ChannelInfo channelInfo = WalleChannelReader.getChannelInfo(getApplicationContext());
 String channelName = channelInfo.getChannel();  (渠道名称)
 Map<String, String> extraInfo = channelInfo.getExtraInfo();  (额外信息)
 或者
 String channelId = WalleChannelReader.getChannel(this.getApplicationContext());

5.3 在Application中关联到友盟

String appkey = "your appkey";  //友盟key
String channelId = WalleChannelReader.getChannel(this.getApplicationContext()); //初始化友盟配置信息 通过代码方式配置友盟的渠道信息
MobclickAgent.UMAnalyticsConfig config = new MobclickAgent.UMAnalyticsConfig(this, appkey, channelId); 

6.Gradle依赖中添加

implementation 'com.umeng.analytics:analytics:latest.integration'
如不行,再加上
allprojects {
    repositories {
            mavenCentral()     
    }
}

在activity中添加如下代码,可使用统一的baseActivity中:
/**
     * 友盟统计需要添加的
     */ @Override 
     protected void onResume() { 
     super.onResume();
      MobclickAgent.onResume(this);
       } 
       
       @Override 
       protected void onPause() {
        super.onPause();
        MobclickAgent.onPause(this);
         }
系统退出时,用来保存友盟统计数据
 MobclickAgent.onKillProcess(context);

可参考:
https://blog.youkuaiyun.com/yinxing2008/article/details/82588075
https://blog.youkuaiyun.com/u010622801/article/details/80592877

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值