1.gradle概念
a.它是一个构建工具
b.它是以Groovy语言为基础
c.它主要面向Java语言
2.gradle配置jar包,和libs文件夹导入jar包的区别
点击“OK”后:(下图右侧是app->build.gradle)
这些jar包是从哪里来的呢?(下图是HelloWorld->build.gradle)
3.签名打包
a.利用Studio
方式一:Buile->Generate Signed APK...
方式二:
填写Signing信息:
填写Build Types信息:
点击“OK"后,在图形化界面填好的东西(Signing和Build Types)就写到了app->build.gradle中:
在生成APK时,会读取这个配置文件,因构建类型(build types)是release,从而生成release类型的apk。
b.命令行
(其他命令如gradlew clean、build...)
在下面的视图中,也可通过双击运行Gradle脚本:
4.BuildConfig
将debug改为release:
结果是:
由此可见,可以在全局直接用BuildConfig.DEBUG来判断是否在测试环境还是生产环境。
5.module中build.gradle文件参数简介
主要顾名思义即可,其中minSdkVersion、targetSdkVersion、versionCode、versionName在Eclipse环境中是在mainfest文件中配置的,但在studio下是在build.gradle中配置的,gradle是构建工程的,gradle在构建工程时,会把这些字段copy到mainfest文件中,有个merge过程。
6.配置跳过lint错误检查
Gradle build finished with 1 error(s) in 32s 888ms
根据错误提示,在build.gradle中添加方框中的代码即可。
在Eclipse中使用gradle进行多渠道打包:
1.在eclipse的Marketplace中搜索并安装插件:Buildship Gradle
2.Window->Preference->Gradle设置默认gradle路径,如下载到最新版本gradle到F盘:F:\gradle-3.5-all\gradle-3.5;设置环境变量GRADLE_HOME并加入到Path,通过命令行gradle -v来验证。
3.右键工程Export->Generate Gradle build files,选中工程目录,finish。
4.这时会在工程同级目录下生成:gradle、gradlew、gradlew.bat、build.gradle、settings.gradle这几个文件。其中gradle、gradlew、gradlew.bat是多余生成的默认文件,没有用处,可以直接删除。
要注意,每次Export后都要进行如下操作:
因为Export后会重置并更新build.gradle和settings.gradle文件,其中要修改build.gradle中默认的classpath 'com.android.tools.build:gradle:1.0.0'为最新版本classpath 'com.android.tools.build:gradle:2.3.1'。
5.单纯的只复制build.grade到工程目录运行是行不通的,因为setting.gradle也要加入对此工程的说明,要注意到在发布其他工程时,setting.gradle重置变化了。
6.命令行cd到工程目录,gradle clean,会在工程同级目录生成.gradle文件。
7.修改工程目录下的build.gradle文件如下:
apply plugin: 'com.android.application'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile project(':xxxLib')
}
android {
compileSdkVersion 21
buildToolsVersion "25.0.2"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['libs']//默认无此项,会导致libs库文件未编译进去
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
lintOptions {
abortOnError false
}
signingConfigs {
myConfig {
storeFile file("xxx.keystore")
storePassword "xxxxxx"
keyAlias "xxx"
keyPassword "xxxxxx"
}
}
buildTypes {
release {
signingConfig signingConfigs.myConfig
minifyEnabled true// 上线版本绝对有必要代码混淆,否则动动手指就能知晓你的全部代码,这是非常可怕的
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
}
}
productFlavors {
baidu {
manifestPlaceholders = ["CHANNEL_NAME":"Baidu"]
}
xiaomi {
manifestPlaceholders = ["CHANNEL_NAME":"Xiaomi"]
}
}
}
运行:gradle build即在工程目录下生成4个apk,分别是baidu和xiaomi渠道的debug和release版本。build后会在工程同级目录下生成build目录,不用理会。
关于混淆,如果开启,要注意有些依赖的第三方库对混淆有一定要求,如百度地图在混淆时要求放过对某些代码的混淆否则编译不通过,一般第三方程序都会对此给予说明。
或者在生成release apk时不混淆,在发布时通过第三方工具加固也行。
其中,manifestPlaceholders中key和value会在生成apk时替换掉AndroidManifest.xml中${ABC}为Baidu这样的值(即使是包名也可在生成apk时完成替换),
即:<meta-data
android:name="XXXXXX"
android:value="${ABC}" />
变为:<meta-data
android:name="XXXXXX"
android:value="Baidu" />
Gradle在Android开发中的应用
本文介绍Gradle作为构建工具的基本概念及其在Android开发中的具体应用,包括配置jar包、签名打包流程、BuildConfig使用、多渠道打包方法等,并探讨了如何配置以跳过lint错误检查。
1455

被折叠的 条评论
为什么被折叠?



