release {
signingConfig signingConfigs.release
debuggable true
minifyEnabled true
shrinkResources true //删除无用资源
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
报错:
* What went wrong:
A problem was found with the configuration of task ':app:packageWin28Release'.
> File '/Users/mj/Android/xx/app/build/intermediates/res/resources-win28-release-stripped.ap_' specified for property 'resourceFile' does not exist.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
注:Gradle2.0以上的版本minifyEnabled字段为true时已经包含了shrinkResources,在代码优化时会自动去掉多余资源,所以在打正式包时也不需要设置shrinkResources字段。
解决方式是注释掉shrinkResources
release {
signingConfig signingConfigs.release
debuggable true
minifyEnabled true
// shrinkResources true //删除无用资源
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
集成:AndResGuard
github地址 AndResGuard
操作系统 mac
如果没有7zip 请下载 7 zip
如果没有brew 请下注 brew
- brew install p7zip
2.根据配置配置文件
apply plugin: 'AndResGuard'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.6'
}
}
andResGuard {
// mappingFile = file("./resource_mapping.txt")
mappingFile = null
// It will be invalid when you sign apk with schemeV2
use7zip = true
useSign = true
// it will keep the origin path of your resources when it's true
keepRoot = false
whiteList = [
// your icon
"R.drawable.icon",
// for fabric
"R.string.com.crashlytics.*",
// for google-services
"R.string.google_app_id",
"R.string.gcm_defaultSenderId",
"R.string.default_web_client_id",
"R.string.ga_trackingId",
"R.string.firebase_database_url",
"R.string.google_api_key",
"R.string.google_crash_reporting_api_key"
]
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
"resources.arsc"
]
sevenzip {
artifact = 'com.tencent.mm:SevenZip:1.2.6'
//path = "/usr/local/bin/7za"
}
/**
* Optional: if finalApkBackupPath is null, AndResGuard will overwrite final apk
* to the path which assemble[Task] write to
**/
finalApkBackupPath = "${project.rootDir}/final.apk"
// digestalg = "SHA256" // 请注释掉它,如果你用v1签名,否则,下边的异常招呼你
}
Error:(60, 0) Could not set unknown property 'digestalg' for use7zip = true
useSign = true
metaName = META-INF
keepRoot = false
whiteList = [R.drawable.icon, R.string.com.crashlytics.*, R.string.google_app_id, R.string.gcm_defaultSenderId, R.string.default_web_client_id, R.string.ga_trackingId, R.string.firebase_database_url, R.string.google_api_key, R.string.google_crash_reporting_api_key]
compressFilePattern = [*.png, *.jpg, *.jpeg, *.gif, resources.arsc]
finalApkBackupPath = /Users/mj/Android/People28/final.apk
of type com.tencent.gradle.AndResGuardExtension.
<a href="openFile:/Users/mj/Android/People28/app/build.gradle">Open File</a>
FAILURE: Build failed with an exception.
* What went wrong:
Task 'resguard' is ambiguous in root project 'People28'. Candidates are: 'resguardDebug', 'resguardDev', 'resguardRelease', 'resguardWin28', 'resguardWin28Debug', 'resguardWin28Dev', 'resguardWin28Release'.
* Try:
Run gradlew tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 3 mins 16.307 secs
按照配置,到了这里,执行命令
============微信瘦身打包命令
gradlew clean resguardRelease
============微信瘦身打包命令
瘦身后,进行多渠道打包
gradle多渠道打包会很慢,我用的是这个打包神器
传送门
参考他的代码(多渠道打包与AndResGuard的结合)
传送地址
用了下面这个代码片段
project.afterEvaluate {
//在Release后执行资源混淆,然后多渠道打包
//打包命令 ./gradlew resguard
tasks.getByName("resguard") {
it.doLast {
println 'channel package task begin'
def oldName = VERSIO_NNAME +"_${releaseTime()}_release"
def fileName = oldName + "_signed_7zip_aligned.apk"
def rApk = new File("app/build/outputs/apk/AndResProguard_" + oldName+ "/" + fileName)
if (rApk.exists()) {
println 'resGuard apk exits begin channel package'
packageChannel(rApk.absolutePath)
}
}
}
}
这位老铁拼写的路径是
AndResProguard_
实际上是输出目录是这个
AndResGuard_
结果apk文件找不到
=瘦身apk全路径=
app/build/outputs/apk/AndResProguard_全民28-win28_v1.1.64/全民28-win28_v1.1.64_aligned_signed.apk
#########apk瘦身文件找不到啊########
##瘦身后apk文件地址
所以,无法进行多渠道打包
吭哧吭哧很久时间,发现路径是错的好吧,无论如何,在电脑中,你要先找到它才能使用它,我就犯了这个错
所以,复制代码时,请看清文件路径!!``请看清文件路径!!请看清文件路径!!
上我的配置吧,仅供参考
app 下 build.gradle
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
//======== 打包工具和微信瘦身
apply plugin: 'AndResGuard'
apply plugin: 'packer'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.mcxiaoke.packer-ng:plugin:2.0.0'
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.6'
}
}
andResGuard {
mappingFile = null
use7zip = true
useSign = true
keepRoot = false
// add <your_application_id>.R.drawable.icon into whitelist.
// because the launcher will get thgge icon with his name
def packageName = "com.oneweone.allpeople"
whiteList = [
//for your icon
packageName + ".R.drawable.icon",
//for fabric
packageName + ".R.string.com.crashlytics.*",
//for umeng update
packageName + ".R.string.umeng*",
packageName + ".R.string.UM*",
packageName + ".R.string.tb_*",
packageName + ".R.layout.umeng*",
packageName + ".R.layout.tb_*",
packageName + ".R.drawable.umeng*",
packageName + ".R.drawable.tb_*",
packageName + ".R.anim.umeng*",
packageName + ".R.color.umeng*",
packageName + ".R.color.tb_*",
packageName + ".R.style.*UM*",
packageName + ".R.style.umeng*",
packageName + ".R.id.umeng*"
]
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
"resources.arsc"
]
sevenzip {
artifact = 'com.tencent.mm:SevenZip:1.2.6'
//path = "/usr/local/bin/7za"
}
/**
* Optional: if finalApkBackupPath is null, AndResGuard will overwrite final apk
* to the path which assemble[Task] write to
* 可选
**/
finalApkBackupPath = "${project.rootDir}/final.apk"
}
//================
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.oneweone"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName
multiDexEnabled true
// manifestPlaceholders = [
// GETUI_APP_ID : "TXNBMXWZLu7mT4A8aoqkX4",
// GETUI_APP_KEY : "sqTPVHinMG6FLpCa0sE949",
// GETUI_APP_SECRET: "HBvsuO41LWAd6RXvh7cwo3",
// UMENG_APPKEY : "5912b5656e27a46dac000c29",
// UMENG_Channel_ID: "develop"
// ]
manifestPlaceholders = [
GETUI_APP_ID : "8Kpfve1PsA9OIDYDbYDEj2",
GETUI_APP_KEY : "LgeeTbRtZe7USktdAzYXr7",
GETUI_APP_SECRET: "hzBZKPDfRG7yWFqs0brG4A"
]
//x86
ndk {
abiFilters "armeabi", "armeabi-v7a", "x86_64", "x86"
}
}
signingConfigs {
debug {
keyAlias ''
keyPassword ''
storeFile file('stockcode.jks')
storePassword ''
}
release {
keyAlias ''
keyPassword ''
storeFile file('stockcode.jks')
storePassword ''
}
}
buildTypes {
debug {
//shrinkResources true
//buildConfigField "String", "RUN_URL", "\"http://stockapi.76iw.com\""
//buildConfigField "String", "apiVersion", "\"v1.0\""
signingConfig signingConfigs.debug
applicationIdSuffix "allpeople"
minifyEnabled false
shrinkResources false //去除无用资源resource文件
debuggable true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [app_name: rootProject.ext.appname, icon: "@mipmap/ic_launcher"]
}
dev {
//buildConfigField "String", "RUN_URL", "\"http://stockapi.76iw.com\""
//buildConfigField "String", "apiVersion", "\"v1.0\""
signingConfig signingConfigs.debug
applicationIdSuffix "allpeople"
debuggable true
minifyEnabled true // 开启混淆
//shrinkResources true //删除无用资源
//===
zipAlignEnabled true
pseudoLocalesEnabled true
//====
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [app_name: rootProject.ext.appname, icon: "@mipmap/ic_launcher"]
}
release {
//buildConfigField "String", "RUN_URL", "\"http://stockapi.76iw.com\""
signingConfig signingConfigs.release
applicationIdSuffix "allpeople"
debuggable true
minifyEnabled true //删除无用代码
//shrinkResources true //删除无用资源
//===
zipAlignEnabled true
pseudoLocalesEnabled true
//====
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [app_name: rootProject.ext.appname, icon: "@mipmap/ic_launcher"]
}
}
productFlavors {
//wandoujia {}
win28 {}
// sogou {}
// oppo {}
// vivo {}
// xiaomi {}
// xdi28 {}
// m360 {}
// fenxiang{}
// yingyongbao {}
//qq {}
// baidu {}
//letv {}
//a2pchina {}
// haodaijinfu {}
// develop {}
// moren{}
//meizu {}
//jinli {}
//eoe {}
// huawei {}
// goapk {}
//lenovo {}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_Channel_ID: name]
}
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// 前段
def fileName = outputFile.name.replace("app", rootProject.ext.appnamechannel)
// 中段
fileName = fileName.replace("-debug", "_测试")
fileName = fileName.replace("-dev", "_开发")
fileName = fileName.replace("-qa", "_预发布")
fileName = fileName.replace("-release", "")
// 尾端
fileName = fileName.replace(".apk", "_v${defaultConfig.versionName}.apk")
output.outputFile = new File(outputFile.parent, fileName)
println "===============apk打包完毕==============="
}
}
}
packagingOptions {
exclude 'META-INF/rxjava.properties'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
//========================打包
packer {
archiveNameFormat = '${buildType}-v${versionName}-${channel}'
archiveOutput = new File(project.rootProject.buildDir, "apks")
// channelList = ['*Douban*', 'Google/', '中文/@#市场', 'Hello@World',
// 'GradleTest', '20070601!@#$%^&*(){}:"<>?-=[];\',./']
// channelFile = new File(project.rootDir, "markets.txt")
channelMap = [
"Cat" : project.rootProject.file("channels/cat.txt"),
"Dog" : project.rootProject.file("channels/dog.txt"),
"Fish": project.rootProject.file("channels/channels.txt")
]
}
project.beforeEvaluate {
println "===============构建任务开始==============="
}
def packageChannel(String releaseApk) {
try {
println "##瘦身后apk文件地址##" + releaseApk
def stdout = new ByteArrayOutputStream()
exec {
//执行python脚本打多渠道包
//commandLine 'python', rootProject.getRootDir().getAbsolutePath() + "/app/ngpacker.py", releaseApk, rootProject.getRootDir().getAbsolutePath()+"/markets.txt", rootProject.getRootDir().getAbsolutePath() + "/build/archives"
//commandLine 'sh',rootProject.getRootDir().getAbsolutePath()+ "/pack.sh"
// def command = [
// 'sh',rootProject.getRootDir().getAbsolutePath()+'/pack.sh'
// ]
// commandLine command
executable "chmod +x " + rootProject.getRootDir().getAbsolutePath()+"/pack.sh"
executable 'sh'
args "-c",rootProject.getRootDir().getAbsolutePath()+"/pack.sh $releaseApk"
standardOutput = stdout
println "##python打包##"+stdout.toString().trim()+"||"
}
return stdout.toString().trim()
} catch (ignored) {
println "##未知错误##"+ignored
return "##########未知错误##########";
}
}
//全民28-win28_v1.1.63_aligned_signed.apk
project.afterEvaluate {
println "===============构建任务收尾==============="
tasks.getByName("resguardRelease") {
it.doLast {
println '===============多渠道打包开始===============' + rootProject.getRootDir().getAbsolutePath()
//def oldName = VERSIO_NNAME +"_${releaseTime()}_release"
def oldName = rootProject.ext.appnamechannel + "-win28_v" + rootProject.ext.versionName
def fileName = oldName + "_aligned_signed.apk"
println '=瘦身apk目录=' + oldName
println '=瘦身apk目录下文件=' + fileName
println '=瘦身apk全路径=' + rootProject.getRootDir().getAbsolutePath() + "/app/build/outputs/apk/AndResGuard_" + oldName + "/" + fileName
println '=瘦身apk全路径=' + "app/build/outputs/apk/AndResProguard_" + oldName + "/" + fileName
//def rApk = file(rootProject.getRootDir().getAbsolutePath() + "/app/build/outputs/apk/AndResProguard_" + oldName + "/" + fileName)
String path = 'app/build/outputs/apk/AndResGuard_' + oldName + '/' + fileName;
println '=瘦身apk目录-----=' + path
def rApk = new File(path) //找不到文件,我日
//def rApk = new File("/Users/mj/Android/People28/app/build/outputs/apk/quanmin-win28_v1.1.64.apk")
//def rApk = file(new File("app/build/outputs/apk/AndResProguard_" + oldName + "/" + fileName))//找不到文件,日
if (rApk.exists()) {
println '#########apk已经瘦身,多渠道打包开始########'
packageChannel(rApk.absolutePath)
} else {
println '#########apk瘦身文件找不到啊########'
path = rootProject.getRootDir().getAbsolutePath() + '/app/build/outputs/apk/AndResGuard_' + oldName + '/' + fileName;
println '##路径处理下##' + path
packageChannel(path)
}
}
}
}
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
}
//========================打包 end
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.jakewharton.rxbinding2:rxbinding:2.0.0'
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'
compile 'com.android.support:appcompat-v7:25.+'
compile 'com.zhy:autolayout:1.4.5'
compile 'com.android.support:cardview-v7:25.+'
compile 'com.android.support:recyclerview-v7:25.+'
compile 'com.android.support:design:25.+'
compile 'com.facebook.fresco:fresco:0.12.0'
compile 'com.oguzdev:CircularFloatingActionMenu:1.0.2'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.umeng.analytics:analytics:latest.integration'
//阿里热更新
compile 'com.aliyun.ams:alicloud-android-hotfix:3.1.3'
//打包工具
compile 'com.mcxiaoke.packer-ng:helper:2.0.0'
testCompile 'junit:junit:4.12'
compile project(':base')
compile project(':http')
compile project(':uilib')
compile project(':viselog')
compile project(':common')
compile project(':alpay')
compile project(':push')
}
项目根目录 build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
//repositories {
// mavenLocal()
// //阿里云仓库
// maven {
// url "http://maven.aliyun.com/nexus/content/repositories/releases"
// }
// mavenCentral()
// jcenter()
// flatDir {
// dirs 'libs'
// }
//}
allprojects {
repositories {
jcenter()
// maven {
// url "http://mvn.gt.igexin.com/nexus/content/repositories/releases/"
// }
//阿里云
maven {
url "http://maven.aliyun.com/nexus/content/repositories/releases"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
project.ext {
compileSdkVersion = 26
buildToolsVersion = "26.0.0"
minSdkVersion = 15
targetSdkVersion = 26
appname = "全民28"
appnamechannel="quanmin" // 渠道,英文名称
versionCode = 3
versionName = "1.2.0"
abortOnError = false //执行lint检查,有任何的错误或者警告提示,都会终止构建,我们可以将其关掉。
incremental = false
}
apk瘦身之后,进行脚本打包
pack.sh,开始是没有权限的,要了老命了,废了好大劲
Backup Final APk(V2) to /Users/mj/Android/People28/final.apk
<--AndResGuard Done! You can find the output in /Users/mj/Android/People28/app/build/outputs/apk/AndResGuard_quanmin-win28_v1.2.0
===============多渠道打包开始===============/Users/mj/Android/People28
=瘦身apk目录=quanmin-win28_v1.2.0
=瘦身apk目录下文件=quanmin-win28_v1.2.0_aligned_signed.apk
=瘦身apk全路径=/Users/mj/Android/People28/app/build/outputs/apk/AndResGuard_quanmin-win28_v1.2.0/quanmin-win28_v1.2.0_aligned_signed.apk
=瘦身apk全路径=app/build/outputs/apk/AndResProguard_quanmin-win28_v1.2.0/quanmin-win28_v1.2.0_aligned_signed.apk
=瘦身apk目录-----=app/build/outputs/apk/AndResGuard_quanmin-win28_v1.2.0/quanmin-win28_v1.2.0_aligned_signed.apk
#########apk已经瘦身,多渠道打包开始########
##瘦身后apk文件地址##/Users/mj/Android/People28/app/build/outputs/apk/AndResGuard_quanmin-win28_v1.2.0/quanmin-win28_v1.2.0_aligned_signed.apk
##python打包##||
sh: /Users/mj/Android/People28/pack.sh: Permission denied
##未知错误##org.gradle.process.internal.ExecException: Process 'command 'sh'' finished with non-zero exit value 126
BUILD SUCCESSFUL
查看目录下权限
localhost:People28 mj$ ls -l
total 15376
-rw-r--r-- 1 mj staff 843 Aug 22 22:03 People28.iml
-rw-r--r-- 1 mj staff 0 Aug 14 17:22 README.md
drwxr-xr-x 11 mj staff 374 Oct 21 16:54 alpay
drwxr-xr-x 21 mj staff 714 Oct 21 16:55 app
drwxr-xr-x 10 mj staff 340 Oct 21 16:55 base
drwxr-xr-x 4 mj staff 136 Oct 21 16:55 build
-rw-r--r-- 1 mj staff 1452 Oct 21 11:38 build.gradle
drwxr-xr-x 10 mj staff 340 Oct 21 16:54 common
-rw-r--r-- 1 mj staff 0 Sep 7 17:38 file
-rw-r--r-- 1 mj staff 7598819 Oct 21 16:55 final.apk
drwxr-xr-x 4 mj staff 136 Aug 18 18:10 gradle
-rw-r--r-- 1 mj staff 760 Sep 5 19:45 gradle.properties
-rwxr-xr-x 1 mj staff 4971 Aug 14 17:22 gradlew
-rw-r--r-- 1 mj staff 2314 Aug 22 21:49 gradlew.bat
drwxr-xr-x 10 mj staff 340 Oct 21 16:55 http
-rw-r--r-- 1 mj staff 509 Oct 19 16:13 local.properties
-rw-r--r-- 1 mj staff 57 Oct 21 10:54 markets.txt
-rw-r--r-- 1 mj staff 593 Oct 21 16:08 pack.sh
-rwxr-xr-x 1 mj staff 224451 Aug 8 20:32 packer-ng-2.0.0.jar
drwxr-xr-x 9 mj staff 306 Oct 21 16:55 push
-rw-r--r-- 1 mj staff 99 Sep 19 17:56 settings.gradle
-rw-r--r-- 1 mj staff 873 Oct 21 15:57 tst.sh
drwxr-xr-x 9 mj staff 306 Oct 21 16:54 uilib
drwxr-xr-x 9 mj staff 306 Oct 21 16:55 viselog
drwxr-xr-x 7 mj staff 238 Oct 21 16:54 weixinpay
localhost:People28 mj$
为脚本添加执行权限
chmod +x pack.sh
删除脚本执行权限
chmod -x pack.sh
localhost:People28 mj$ chmod +x pack.sh
localhost:People28 mj$ ls -l // 查看权限
执行命令
localhost:People28 mj$ gradlew clean resguardRelease
<--AndResGuard Done! You can find the output in /Users/mj/Android/People28/app/build/outputs/apk/AndResGuard_quanmin-win28_v1.2.0
===============多渠道打包开始===============/Users/mj/Android/People28
=瘦身apk目录=quanmin-win28_v1.2.0
=瘦身apk目录下文件=quanmin-win28_v1.2.0_aligned_signed.apk
=瘦身apk全路径=/Users/mj/Android/People28/app/build/outputs/apk/AndResGuard_quanmin-win28_v1.2.0/quanmin-win28_v1.2.0_aligned_signed.apk
=瘦身apk全路径=app/build/outputs/apk/AndResProguard_quanmin-win28_v1.2.0/quanmin-win28_v1.2.0_aligned_signed.apk
=瘦身apk目录-----=app/build/outputs/apk/AndResGuard_quanmin-win28_v1.2.0/quanmin-win28_v1.2.0_aligned_signed.apk
#########apk已经瘦身,多渠道打包开始########
##瘦身后apk文件地址##/Users/mj/Android/People28/app/build/outputs/apk/AndResGuard_quanmin-win28_v1.2.0/quanmin-win28_v1.2.0_aligned_signed.apk
##python打包##||
BUILD SUCCESSFUL
我用的是方式是文件来配置渠道
markets.txt
## ==========内容是============
xiaomi#小米渠道
oppo#
yingyongbao#应用宝
vivo#vivo
pack.sh脚本内容是
#! /bin/bash
## 测试
ROOT_PATH="/Users/mj/Android/People28"
echo '==============打包开始=============='
echo $1
## java -jar packer-ng-2.0.0.jar generate --channels=@markets.txt --output=build/archives app/build/outputs/apk/AndResGuard_quanmin-win28_v1.2.0/quanmin-win28_v1.2.0_aligned_signed.apk
## echo java -jar $ROOT_PATH/packer-ng-2.0.0.jar generate --channels=@markets.txt --output=$ROOT_PATH/build/archives $1
java -jar $ROOT_PATH/packer-ng-2.0.0.jar generate --channels=@$ROOT_PATH/markets.txt --output=$ROOT_PATH/build/archives $1
echo '==============打包完成=============='
关于路径,请自己配置,packer-ng-2.0.0.jar 请自行下载

把渠道号注入项目,如果你用packer打包的话
在(MyApplication extends Application)自定义Application中,添加如下代码
/**
* 友盟渠道配置|使用快速打包时,会执行该代码进行代码配置<br/>
*/
private void doUmengConfigs() {
String markets = PackerNg.getChannel(this);
//Logger.e("bug002", markets);
if (!Tools.isEmpty(markets)) {
String appkey = Config.APPKEY_FOR_UMENT;
MobclickAgent.UMAnalyticsConfig config = new MobclickAgent.UMAnalyticsConfig(this, appkey, markets);
//Logger.e("bug002", "#友盟appkey#" + appkey);
MobclickAgent.startWithConfigure(config);
}
}
网友评论