推薦看如下幾篇文章.
參見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")
}
}