自定义目录结构
//兼容eclipse
sourceSets{
main{
java.srcDirs=['src']
res.srcDirs=['res']
assets.srcDirs=['assets']
jni.srcDirs=['jni']
jniLibs.srcDirs=['libs']
renderscript.srcDirs=['src']
aidl.srcDirs=['src']
mainfest.srcFile'AndroidMainfest.xml'
}
}
将布局文件分类的办法
sourceSets{
main{
res.srcDirs=['src/main/res',
'src/main/res/layout/activity',
'src/main/res/layout/fragment'
]
}
}
|--res
|--layout
|--activity
|--activity.xml
|--fragment
|--fragment.xml
|--activity_main.xml
全局配置
在根目录build.gradle配置 详细
buildscript{}
allprojects {}
ext {//定义所有project公用参数 使用rootProject.ext.XX就能拿到相应对象
compileSdkVersion=23
buildToolsVersion="23.0.2"
minSdkVersion=14
targetSdkVersion=23
versionCode=3
versionName="1.0.1"
}
在module中引用
android{
compileSdkVersion rootProject.ext.compileSdkVersion
}
buildTypes
系统默认的release debug
buildTypes{
release{
...
}
xys{
applicationIdSuffix".xys"//生成apk为 app-xys-ungisned.apk
}
}
//继承
xys.initWith(buildTypes.debug)
xys{
applicationIdSuffix".xys"
}
signingConfigs
签名文件可以放在app–xys_key.jks
android{
signingConfigs {
xys{
storeFile file("xys_key.jks")
storePassword "android"
keyAlias "xys"
keyPassword "android"
}
}
buildTypes{
xys{
signingConfigs signingConfigs.xys
}
}
可选配置 compileOptions lintOptions
//用来配置java编译版本
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//控制link代码检查
lintOptions{
abortOnError=false
}
动态参数配置
三种方式 1.System.properties 2.Key\Value方式 3.属性方式
//System.properties
方式 通过System.properties[KEY]获取 如
在gradle.properties中配置
systemProp.keyALiasPassword=1234567
systemProp.keyAlias=xys
systemProp.keyStorePassword=1234567
systemProp.keyStore=xys_key.jks
//引用如下
signingConfigs{
xys{
storeFile file(System.properties['keyStore'])
storePassword System.properties['keyStorePassword']
keyAlias System.properties['keyAlias']
keyPassword System.properties['keyAliasPassword']
}
}
//Key\Value方式
//在gradle.properties中配置
xys.keyAlias=xys
xys.keyAliasPassword=1234567
signiingConfig{
xys{
keyAlias project.property('xys.keyAlias')
keyPassword project.property('xys.keyAliasPassword')
}
}
//属性方式
pKeyAlias=xys
pKeyAliasPassword=1234567
//build.gradle中引用
signingconfigs{
xys{
keyAlias pKeyALias
keyPassword pKeyAliasPassword
}
}
总结:第一二中是通过xxx.xx来配置,掉的api不同,第三种最简便,区别是有一种不支持命令行参数。(书中没说懒得查了)
多渠道打包
在AndroidMainifest 的Application节点下创建
<meta-data
android:name="PRODUCT"
android:values="${CHANNEL_VALUE}"//替换的渠道占位符
/>
gradle创建
//mainfestPlaceholders关键字为纽带连接
productFlavors{
product1{
mainfestPlaceholders=[CHANNEL_VALUE:"PRODUCT1"]
}
product2{
mainfestPlaceholders=[CHANNEL_VALUE:"PRODUCT2"]
}
}
不同版本添加不同代码
buildTypes{
release{
//就是BuildConfig类中的变量
buildConfigField "String","myname","\"abx\"" //类型 名字 值 字符串类型主义转义符号
resValue("String","app_name","XYSAppRelease")//可以更改xml中的值,但是要删除文件中的,否则会冲突
}
}
生成jar包
task makeJar(type:Jar){
//清空已经存在的jar包
delete'libs/sdk.jar'
//指定生成的jar包名
baseName'sdk'
//从class文件生成jar包
from('build/intermediates/classes/debug/com/xys')
//打包进jar包后的文件目录结构
into('com/xys')
//去掉不需要打包的目录和文件
exclude('test/','BuildConfig.class',R.class)
//去掉R文件
exclude{it.name.startsWith(R$);}
}
//生成目录
app---build---libs----sdk.jar
SO库依赖
|--main
|----java
|--jniLibs
|--armeabi
|--test.so
|--armeabi-v7a
|--test.so
|--res
Gradle依赖统一管理
在根目录的build.gradle配置
ext{
android=[
compileSdkVersion:23,buildToolsVersion:'23.0.2'
]
dependencies=[supportv7:'com.android.support:appcompat-v7:23.2.0']
}
//使用
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
}
dependencies{
compile rootProject ext.dependencies.supportv7
}
//写在单独的配置文件中
//在项目根目录下创建config.gradle文件
ext{
compileSdkVersion:23,buildToolsVersion:'23.0.2'
]
dependencies=[supportv7:'com.android.support:appcompat-v7:23.2.0']
}
//在根目录下build.gradle引用
apply from:'config.gradle'
//如此所有module都可使用,引用方式和上面一样