gradle的好处详及细介绍就不说了,网上搜下就好
使用gradle构建项目
安装studio,版本0.8.14
gradle 目前支持插件版本gradle-2.1-all
本地安装gradle-2.1-all,下载包,配置环境变量,路径到bin目录
(记得翻墙)
android studio 快捷键 Alt+Enter引入类import
studio新建项目
studio的Project相当于eclipse的workspace,Module相当于Eclipse的project
studio新建一个Project就会新打开一个studio程序
项目目录如下:
1:根目录的gradle文件
2:主项目的gradle文件
3:library项目的gradle文件
4:编译后生成的文件存放处
主项目目录
新建项目之后,点击Studio左下角Terminal,弹出命令行(终端)运行构建命令,记得命令行路径是在根目录下,我刚开始的时候是进到了主项目运行gradle命令,所以遇到
gradle常用命令有:
gradle --help
gradle tasks //列出task列表
gradle asD (gradle assembleDebug) //编译debug打包
gradle asR (gradle assembleRelease) //编译release打包
gradle asD --refresh-dependencies //强制刷新依赖
gradle asD --parallel //并行编译
gradle asD --parallel-threads 3
gradle build gradle clean
直接执行gradle build会生成debug 包和release包 如果不想要debug包可以使用gradle asR命令
gradle基本使用方法可以查看相关文档,不再详细说明
以下是我在研究的时候查找到的文档,或许有用,以备
http://beartung.github.io/rockwithandroid/gradle.html
http://www.cnblogs.com/qianxudetianxia/p/3987395.html
http://www.cnblogs.com/youxilua/archive/2013/05/20/3087935.html
https://gist.github.com/youxiachai/5608223
https://github.com/ShinChven/ImmigrateToGradle
http://avatarqing.github.io/Gradle-Plugin-User-Guide-Chinese-Verision/introduction/README.html
下面是我用的gradle 的配置信息,是在主项目下的,即是上面的2处
另外,1处的配置项目里默认即可,因为有些library项目默认的maven( 默认是这个 jcenter())仓库没找到所以我加了一个
mavenCentral()
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.0.1"
defaultConfig {
applicationId "com.jiangjinyue.pangdan"
minSdkVersion 8
targetSdkVersion 21
versionCode 1
versionName "1.0"
}
signingConfigs {
myConfig{
storeFile file("pangdan.keystore")
storePassword "123456"
keyAlias "pangdan"
keyPassword "123456"
}
}
buildTypes {
release {
signingConfig signingConfigs.myConfig
runProguard false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug{。。。。}//测试包
}
//渠道Flavors,我这里写了一些常用的,你们自己改
productFlavors {
GooglePlay{}
Store360{}
// QQ{}
// Taobao{}
// WanDouJia{}
// AnZhuo{}
// AnZhi{}
// BaiDu{}
// Store163{}
// GFeng{}
// AppChina{}
// EoeMarket{}
// Store91{}
// NDuo{}
}
packagingOptions { // 打包配置
exclude 'META-INF/LICENSE' // 排除一些文件
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
}
//这个是解决lint报错的代码
lintOptions {
abortOnError false
}
sourceSets {
main {//引用libs目录下的so文件,JNI jniLibs.srcDirs = ['libs']
}
}
}
android.applicationVariants.all{ variant ->
//https://gist.github.com/goldierox/9533466 //这里是修改AndroidManifest.xml文件中minSdkVersion variant.processManifest.doFirst {
File manifestFile = file("${buildDir}/intermediates/exploded-aar/com.github.amlcurran.showcaseview/library/5.0.0/AndroidManifest.xml")
if (manifestFile.exists()) {
//println("Replacing minSdkVersion in Android Maps Utils")
String content = manifestFile.getText('UTF-8')
content = content.replaceAll(/minSdkVersion="11"/, 'minSdkVersion=\"8\"')
manifestFile.write(content, 'UTF-8')
// println(content)
}
File manifestFileN = file("${buildDir}/intermediates/exploded-aar/com.github.sd6352051.niftydialogeffects/niftydialogeffects/1.0.0/AndroidManifest.xml")
if (manifestFileN.exists()) {
// println("Replacing minSdkVersion in Android Maps Utils")
String content = manifestFileN.getText('UTF-8')
content = content.replaceAll(/minSdkVersion="10"/, 'minSdkVersion=\"8\"')
manifestFileN.write(content, 'UTF-8')
// println(content)
}
}
variant.processManifest.doLast{
//这里是多渠道打包修改AndroidManifest.xml文件里面的渠道值,以友盟为例 <meta-data
android:name="UMENG_CHANNEL"
android:value="UMENG_CHANNEL_VALUE" />
//关于路径我这里build目录下的intermediates
//之前这里用的copy{},我换成了文件操作,这样可以在v1.11版本正常运行,并保持文件夹整洁
//${buildDir}是指./build文件夹
//${variant.dirName}是flavor/buildtype,例如GooglePlay/release,运行时会自动生成
//下面的路径是类似这样:./build/manifests/GooglePlay/release/AndroidManifest.xml
def manifestFile = "${buildDir}/intermediates/manifests/full/${variant.dirName}/AndroidManifest.xml"
//将字符串default替换成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}/intermediates/manifests/full/${variant.dirName}/AndroidManifest.xml")
}
}
dependencies { //这里是引用的library以及libs下的jar包,另外使用appcompat-v7的时候默认添加的是21版本的,但是我这里有些style文件找不到,修改成18就好了,查了下,似乎是新本不兼容了,还需要研究
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:support-v4:+'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.github.machinarius:preferencefragment:0.1.1'
compile 'com.github.sd6352051.niftydialogeffects:niftydialogeffects:1.0.0@aar'
compile 'com.github.amlcurran.showcaseview:library:5.0.0'
compile project(':libraries:social_sdk_library_project')
compile 'com.android.support:appcompat-v7:18.0+'
}
20141114更新
新版本中对于多渠道打包做了更改,参考资料如下
http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger
http://xuyazhou.com/archives/461
http://relex.me/using-manifestplaceholders/
AndroidManifest.xml
<meta-data
android:name="channel"
android:value="${channelName}"/>
android {
productFlavors {
"xiaomi"{
manifestPlaceholders = [channelName: "xiaomi"]
}
"360market"{
manifestPlaceholders = [channelName: "360market"]
}
"baidu"{
manifestPlaceholders = [channelName: "baidu"]
}
"wandoujia"{
manifestPlaceholders = [channelName: "wandoujia"]
}
}
}