gradle多渠道打包及友盟统计-eclipse版本
来源:互联网 发布:淘宝上的伟哥药能买吗 编辑:程序博客网 时间:2024/06/05 08:48
在进行渠道打包的之前,先看看准备篇,知道打包为了什么。
参见1.0android批量打包认知。
批量打包认知
批量打包认知
eclipse中使用gradle多渠道打包全部流程
一.生成gradle文件,配置本地的gradle环境
1.选中需要打包的项目右键选择expert->生成gradle文件,如下图所示
2.完成第一步后,刷新项目可以得到如下图所示的文件
2.完成第一步后,刷新项目可以得到如下图所示的文件
显然项目中多出了gradle.build文件,gradle文件夹。如果没有出现,点击项目右键-refresh
刷新过后看到已经生成的gradle文件夹,如下图:
3.打开上述gradle-wrapper.properties文件
红色表示部分:使用gradle打包的时候,所需要使用的文件。
3.打开上述gradle-wrapper.properties文件
红色表示部分:使用gradle打包的时候,所需要使用的文件。
4.复制上述的url,或者直接到官网下载相应的gradle-1.12-all.zip.
为什么要下载对应的,可能是由于版本之间的差异,导致打包失败。应该也可以尝试升级adt或者eclipse中的gradle插件的版本。
以上是官网下载的截图,在红色标志部分,可以选择想要下载的对应版本。在初期我下载最高版本,最终打包没有成功。下载了匹配版本打包成功。
可是测试高版本,如果不行,就使用匹配的对应版本。这里面选择了匹配的对应版本。
5.配置gradle的本地环境。
gradle-1.12-all的解压路径
GRADLE_HOME
D:\Gradle\gradle-1.12-all\gradle-1.12
配置一下path(GRADLE_HOME只是作为一个根路径而已)
在这个文件中手动添加的代码都已经做了详细的注释。
配置一下path(GRADLE_HOME只是作为一个根路径而已)
新建一个 gradle-repo文件夹配置环境变量
GRADLE_USER_HOME
D:\Gradle\gradle-repo
测试gradle环境是否配置成功。
在命令提示符中输入:gradle -version
出现如上图结果,表示gradle配置成功。
二.使用gradle进行打包
1.查看需要打包的项目中的gradle.build文件(默认生成的文件)并添加相关脚本代码
在这个文件中手动添加的代码都已经做了详细的注释。
2.manifest中添加友盟统计的key和渠道代码(关于友盟统计的key的获取和添加,直接参考友盟统计的文档,不多做解释)
打渠道包的目的是什么?为什么要打渠道包?这个可以见<<1.0apk批量打包认知>>
得到的结论,是要做统计。上面的文件中,使用了友盟统计。
此时需要在manifest.xml添加如下代码:
打批量包的时候,主要使用到的placeHolder:${UMENG_CHANNEL_VALUE} 清单文件中的一个占位符。
在批量打包的过程批量替换这个UMENG_CHANNEL_VALUE这个字段生成不同的apk包。
3.正式执行批量打包
在控制台中,进入项目所在的目录,执行gradle clean,gradle build。如果没有报错,将打包成功
如下图:gradle clean
报错的原因:注释和代码之间添加空行。因为对这个脚本语言不太熟悉,所以不明具体原因。
执行gradle build
到此整个批量打包的过程就完美结束。
刷新项目文件夹看看打出的包:
其中-项目名称-渠道-release.apk就是最终我们所需的渠道apk。
整个批量打包的过程大概十几分钟就搞定了。但是如果对这里面的打包过程是不是还存在很多疑惑。
推荐看如下几篇文章.
①自动生成的gradle.build文件 直接进行打包会生成那些包?各种不同的包,有什么区别?
参见2.1 gradle打包blog
Gradle分步构建android应用
Gradle分步构建android应用
②zipAlign优化是什么意思?
参见2.4
zipAlign优化
zipAlign优化
③lint工具是做什么用的?
参见2.5
lint工具-张兴业
lint工具-张兴业
④配置和打包的全过程大概十多分钟。但是如果出现报错,可就要耗费时间了。
常见的报错参考以下文章:
参见2.3gradle打包遇到的错误
gradle打包错误汇总
至此算是打包的所有流程真正的结束了。加入统计功能的代码,直接根据友盟统计的文档添加相应位置的代码就可以了。
gradle build.gradle配置文件:
buildscript{
repositories{
mavenCentral()
}
dependencies{
classpath'com.android.tools.build:gradle:0.9.0' //最新版本
}
}
//使用android插件
applyplugin:'android'
//各种依赖
dependencies{
//添加libs文件夹下的所有jar包
compilefileTree(dir:'libs',include:'*.jar')
//这里添加其他依赖,可以是本地、远程的库,例如本地libraries/support_v7的库
//compileproject(':libraries:support_v7')
}
//下面一段是将libs/*/*.so文件加入打包
//如果你的项目是使用Eclipse+ADT建立的,则需要这段代码
taskcopyNativeLibs(type:Copy){
from(newFile('libs')){include'**/*.so'}
intonewFile(buildDir,'native-libs')
}
tasks.withType(Compile){compileTask->compileTask.dependsOncopyNativeLibs}
clean.dependsOn'cleanCopyNativeLibs'
tasks.withType(com.android.build.gradle.tasks.PackageApplication){pkgTask->
pkgTask.jniFolders=newHashSet<File>()
pkgTask.jniFolders.add(newFile(buildDir,'native-libs'))
}
//开始android配置
android{
//编译版本,这里指定的是最新的19
compileSdkVersion19
buildToolsVersion"19.0.0"
//配置source路径(如果使用的不是默认路径的话,必须配置)
sourceSets{
main{
manifest{
srcFile'AndroidManifest.xml'
}
//下面的写法看起来比较简洁,当然你也可以用上面的写法
java.srcDirs=['src']
resources.srcDirs=['src']
aidl.srcDirs=['src']
res.srcDirs=['res']
assets.srcDirs=['assets']
}
//测试所在的路径,这里假设是tests文件夹,没有可以不写这一行
//androidTest.setRoot('tests')
}
//签名
signingConfigs{
debug{
storeFilefile("~/.android/debug.keystore")
}
//你自己的keystore信息
release{
storeFilefile("your.keystore")
storePassword"yourPassword"
keyAlias"yourAlias"
keyPassword"yourPassword"
}
}
buildTypes{
debug{
signingConfigsigningConfigs.debug
}
release{
signingConfigsigningConfigs.release
}
}
//渠道Flavors,我这里写了一些常用的,你们自己改
productFlavors{
GooglePlay{}
//Store360{}
//QQ{}
//Taobao{}
//WanDouJia{}
//AnZhuo{}
//AnZhi{}
//BaiDu{}
//Store163{}
//GFeng{}
//AppChina{}
//EoeMarket{}
//Store91{}
//NDuo{}
}
//这个是解决lint报错的代码
lintOptions{
abortOnErrorfalse
}
}
tasks.withType(Compile){
options.encoding="UTF-8"
}
//替换AndroidManifest.xml的UMENG_CHANNEL_VALUE字符串为渠道名称ByRemexHuang
android.applicationVariants.all{variant->
variant.processManifest.doLast{
//之前这里用的copy{},我换成了文件操作,这样可以在v1.11版本正常运行,并保持文件夹整洁
//${buildDir}是指./build文件夹
//${variant.dirName}是flavor/buildtype,例如GooglePlay/release,运行时会自动生成
//下面的路径是类似这样:./build/manifests/GooglePlay/release/AndroidManifest.xml
defmanifestFile="${buildDir}/manifests/${variant.dirName}/AndroidManifest.xml"
//将字符串UMENG_CHANNEL_VALUE替换成flavor的名字
defupdatedContent=newFile(manifestFile).getText('UTF-8').replaceAll("UMENG_CHANNEL_VALUE","${variant.productFlavors[0].name}")
newFile(manifestFile).write(updatedContent,'UTF-8')
//将此次flavor的AndroidManifest.xml文件指定为我们修改过的这个文件
variant.processResources.manifestFile=file("${buildDir}/manifests/${variant.dirName}/AndroidManifest.xml")
}
}
0 0
- gradle多渠道打包及友盟统计-eclipse版本
- gradle多渠道打包及友盟统计-eclipse版本
- gradle多渠道打包及友盟统计-eclipse版本
- gradle多渠道打包及友盟统计-eclipse版本
- gradle多渠道打包及友盟统计-eclipse版本
- eclipse+gradle多渠道打包
- eclipse多渠道打包(gradle)
- 多渠道打包-友盟统计
- 友盟统计sdk集成及多渠道打包
- Eclipse下用Gradle多渠道打包及问题
- Gradle细节详解及多渠道打包
- 友盟统计基础上Eclipse下使用Ant多渠道批量打包
- gradle android友盟多渠道混淆编译打包
- 使用Android studio Gradle 实现友盟多渠道打包
- 使用Android studio Gradle 实现友盟多渠道打包
- 使用Android studio Gradle 实现友盟多渠道打包
- 使用Android studio Gradle 实现友盟多渠道打包
- 使用Android studio Gradle实现友盟多渠道打包
- FFmpeg发送流媒体的命令(UDP,RTP,RTMP)
- JOBDU Q1001
- 【BZOJ 1187】 [HNOI2007]神奇游乐园
- 第五周项目一 体验常成员函数
- 第五周——静态成员运用——时间类
- gradle多渠道打包及友盟统计-eclipse版本
- [POJ 2823] Sliding Window · 单调队列
- SVN使用
- SVN 基础
- C#中类的继承
- ubuntu12.04中输入法安装
- 数据库查询语句
- 第五周项目:对象作为数据成员
- 高效能程序员的修炼