本帖最后由 我是楠楠 于 2018-1-2 10:53 编辑
Studio打包步骤详解: 在AndroidManifext.xml中配置:[AppleScript] 纯文本查看 复制代码 <meta-data
android:name="UMENG_CHANNEL"
android:value="${Pack_CHANNEL}" />
build.gradle中:
[AppleScript] 纯文本查看 复制代码 productFlavors {
wandoujia {}
youmeng {}
}
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [Pack_CHANNEL: name]
}
注意:flavor.manifestPlaceholders = [Pack_CHANNEL: name]中的Pack_CHANNEL 一定要和 AndroidManifext.xml 定义的android:value=”${Pack_CHANNEL}”一致 如果不一致会报错:
wuli,别急心中冒出几个想法. - 1: meta-data中的name=”UMENG_CHANNEL”是干嘛的啊?
- 2: value=”${Pack_CHANNEL}” 又是干嘛的啊?
- 3: value中的值怎么使用
第一个疑问:现在name=”UMENG_CHANNEL” 写成了UMENG_CHANNEL.可以理解为我们集成了UMENG. 友盟可以根据我们的这个name=”UMENG_CHANNEL”配置获取对用的value的值. 第二个疑问:当打包时.会根据productFlavors中的每一个值去替换value中的值
如果打包两次.每个apk中分别为: wandoujia.apk: [AppleScript] 纯文本查看 复制代码 <meta-data
android:name="UMENG_CHANNEL"
android:value="wandoujia" /> youmeng.apk [AppleScript] 纯文本查看 复制代码 <meta-data
android:name="UMENG_CHANNEL"
android:value="youmeng" /> 第三个疑问:meta-data类似与map集合存储的键值对.每个name对用一个value.
meta-data可以配置在清单文件中Application,Activity,service,receiver中.获取方式大致雷同. Application为例: [AppleScript] 纯文本查看 复制代码 package com.example.retrifitdemo.applicaction;
import android.app.Application;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
/**
* ONE Goal,ONE Passion!
* Created by ${PK_Night} on 2016/10/14.
* comment:
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//在application应用<meta-data>元素。
ApplicationInfo appInfo = null;
try {
appInfo = this.getPackageManager()
.getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
String umeng_channel = appInfo.metaData.getString("UMENG_CHANNEL");
System.out.println("--umeng_channel--" + umeng_channel);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
} Activity获取元素 [AppleScript] 纯文本查看 复制代码 ActivityInfo info = this.getPackageManager()
.getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);
info.metaData.getString("meta_name"); service获取元素 [AppleScript] 纯文本查看 复制代码 ComponentName cn = new ComponentName(this, MetaDataService.class);
ServiceInfo info = this.getPackageManager().getServiceInfo(cn, PackageManager.GET_META_DATA);
info.metaData.getString("meta_name"); receiver获取元素 [AppleScript] 纯文本查看 复制代码 ComponentName cn = new ComponentName(context, MetaDataReceiver.class);
ActivityInfo info = context.getPackageManager().getReceiverInfo(cn, PackageManager.GET_META_DATA);
info.metaData.getString("meta_name"); 当集成友盟后,如果是豌豆荚市场发布的apk出现了问题.那么 apk中代码获得的UMENG对应的value就为wandoujia 这样就能统计出是哪个市场的信息了.
传智播客·黑马程序员郑州校区地址 河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层 联系电话 0371-56061160/61/62 来校路线 地铁一号线梧桐街站A口出 |