推荐看如下几篇文章.
参见2.3gradle打包遇到的错误
gradle打包错误汇总
至此算是打包的所有流程真正的结束了。加入统计功能的代码,直接根据友盟统计的文档添加相应位置的代码就可以了。
gradle build.gradle配置文件:
buildscript
{
repositories
{
mavenCentral
(
)
}
dependencies
{
classpath
'com.android.tools.build:gradle:0.9.0'
/
/最新版本
}
}
/
/使用
android插件
apply
plugin
:
'android'
/
/各种依赖
dependencies
{
/
/添加
libs文件夹下的所有
jar包
compile
fileTree
(
dir
:
'libs'
,
include
:
'*.jar'
)
/
/这里添加其他依赖,可以是本地、远程的库,例如本地
libraries
/
support
_v7的库
/
/
compile
project
(
':libraries:support_v7'
)
}
/
/下面一段是将
libs
/
*
/
*
.so文件加入打包
/
/如果你的项目是使用
Eclipse
+
ADT建立的,则需要这段代码
task
copyNativeLibs
(
type
:
Copy
)
{
from
(
new
File
(
'libs'
)
)
{
include
'**/*.so'
}
into
new
File
(
buildDir
,
'native-libs'
)
}
tasks
.withType
(
Compile
)
{
compileTask
->
compileTask
.dependsOn
copyNativeLibs
}
clean
.dependsOn
'cleanCopyNativeLibs'
tasks
.withType
(
com
.android
.build
.gradle
.tasks
.PackageApplication
)
{
pkgTask
->
pkgTask
.jniFolders
=
new
HashSet
<
File
>
(
)
pkgTask
.jniFolders
.add
(
new
File
(
buildDir
,
'native-libs'
)
)
}
/
/开始
android配置
android
{
/
/编译版本,这里指定的是最新的
19
compileSdkVersion
19
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
{
storeFile
file
(
"~/.android/debug.keystore"
)
}
/
/你自己的
keystore信息
release
{
storeFile
file
(
"your.keystore"
)
storePassword
"yourPassword"
keyAlias
"yourAlias"
keyPassword
"yourPassword"
}
}
buildTypes
{
debug
{
signingConfig
signingConfigs
.debug
}
release
{
signingConfig
signingConfigs
.release
}
}
/
/渠道
Flavors,我这里写了一些常用的,你们自己改
productFlavors
{
GooglePlay
{
}
/
/
Store360
{
}
/
/
QQ
{
}
/
/
Taobao
{
}
/
/
WanDouJia
{
}
/
/
AnZhuo
{
}
/
/
AnZhi
{
}
/
/
BaiDu
{
}
/
/
Store163
{
}
/
/
GFeng
{
}
/
/
AppChina
{
}
/
/
EoeMarket
{
}
/
/
Store91
{
}
/
/
NDuo
{
}
}
/
/这个是解决
lint报错的代码
lintOptions
{
abortOnError
false
}
}
tasks
.withType
(
Compile
)
{
options
.encoding
=
"UTF-8"
}
/
/替换
AndroidManifest
.xml的
UMENG_CHANNEL
_VALUE字符串为渠道名称
By
Remex
Huang
android
.applicationVariants
.all
{
variant
->
variant
.processManifest
.doLast
{
/
/之前这里用的
copy
{
},我换成了文件操作,这样可以在
v1
.
11版本正常运行,并保持文件夹整洁
/
/
$
{
buildDir
}是指
.
/
build文件夹
/
/
$
{
variant
.dirName
}是
flavor
/
buildtype,例如
GooglePlay
/
release,运行时会自动生成
/
/下面的路径是类似这样:
.
/
build
/
manifests
/
GooglePlay
/
release
/
AndroidManifest
.xml
def
manifestFile
=
"${buildDir}/manifests/${variant.dirName}/AndroidManifest.xml"
/
/将字符串
UMENG_CHANNEL
_VALUE替换成
flavor的名字
def
updatedContent
=
new
File
(
manifestFile
)
.getText
(
'UTF-8'
)
.replaceAll
(
"UMENG_CHANNEL_VALUE"
,
"${variant.productFlavors[0].name}"
)
new
File
(
manifestFile
)
.write
(
updatedContent
,
'UTF-8'
)
/
/将此次
flavor的
AndroidManifest
.xml文件指定为我们修改过的这个文件
variant
.processResources
.manifestFile
=
file
(
"${buildDir}/manifests/${variant.dirName}/AndroidManifest.xml"
)
}
}