Android Studio Gradle配置教程与目录解析
2016-04-19 13:24:23 By: shinyuu
1、Gradle的简单介绍
Gradle是可以用于Android开发的新一代的Build System、也是Android Studio默认的build工具、其实Gradle脚本是基于一种JVM语言— Groovy、再加上DSL组成的、由于Groovy是JVM语言、所以可以使用大部分的Java语言库、所谓DSL就是专门针对Android开发的插件、比如标准Gradle之外的一些新的方法(Method)、闭包(Closure)等等、通过我们简单的了解知道Gradle的语法足够简洁和简单、而且可以使用大部分的java包、所以它就当之无愧地成为新一代的Build System
2、Gradle的文件结构
./build.gradle //设置了模块的gradle构建配置
./gradle.properties //grade的运行环境配置、比如使用多少内存之类的
./gradlew //自动完成 gradle 环境的脚本、在linux和mac下直接运行gradlew会自动完成gradle环境的搭建
./gradlew.bat //自动完成 gradle 环境的脚本、在linux和mac下直接运行gradlew会自动完成gradle环境的搭建
./local.properties //配置SDK或者NDK的环境路径、各个机器上这个变量可能都是不一样的、所以不应该进入版本库
./setting.gradle //整个项目的管理、比如这个项目包含哪些模块等
./XXX.iml //iml是Intellij模块文件、Intellij是一款JAVA的IDE、Android Studio是基于开源的Intellij IDEA开发出来的IDE
./app/build.gradle //设置了模块的gradle构建配置
./app/app.iml //设置了模块的iml
./app/proguard-rules.pro //混淆文件
Gradle项目自动编译的时候要读取的配置文件、比如指定项目的依赖包等、build.grade有两个、一个是全局的、一个是在模块里面、全局的build.grade主要设置的是声明仓库源、gradle的版本号说明等
3、./build.gradle 设置声明仓库源
buildscript { repositories { // 声明仓库源、比如我们构建了一个安卓的库、现在想要把库上传到jcenter中供别人一起使用、则可以上传到jcenter中 jcenter() } dependencies { // 说明gradle的版本号 classpath ´com.android.tools.build:gradle:1.5.0´ // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } // 所有项目都继承这个配置 allprojects { repositories { jcenter() } } // 清理 task clean(type: Delete) { delete rootProject.buildDir }
4、./app/build.grade 设置了模块的gradle构建配置
// 说明这个模块是安卓项目、如果是多模块开发、有可能有的值为java/war apply plugin: ´com.android.application´ // 配置了所有android构建的参数 android { // 编译使用SDK版本 compileSdkVersion 23 // 编译工具的版本 buildToolsVersion "23.0.1" defaultConfig { // 包名 applicationId "com.luzhiyao.gongdoocar" // sdk最低支持版本 minSdkVersion 14 // 目标SDK版本、如果目标设备的API版本正好等于此数值、就不会为此程序开启兼容性检查判断的工作 targetSdkVersion 23 // 版本号 versionCode 1 versionName "1.0.0" // 原生 ndk { abiFilters "armeabi-v7a", "x86" } } buildTypes { // 发布时候的设置 release { // 是否进行混淆 minifyEnabled true // 混淆使用文件 proguardFiles getDefaultProguardFile(´proguard-android.txt´), ´proguard-rules.pro´ } } sourceSets { main { jniLibs.srcDirs = [´libs´] //jniLibs路径为libs manifest.srcFile ´AndroidManifest.xml´ java.srcDirs = [´src´] resources.srcDirs = [´src´] aidl.srcDirs = [´src´] renderscript.srcDirs = [´src´] res.srcDirs = [´res´] assets.srcDirs = [´assets´] } //测试所在的路径、这里假设是tests文件夹、没有可以不写这一行 instrumentTest.setRoot(´tests´) } //这个是解决lint报错的代码 lintOptions { abortOnError false } //签名设置 signingConfigs { myConfigs { storeFile file("签名文件地址") keyAlias "..." keyPassword "..." storePassword "..." } } //导入so文件 task nativeLibsToJar(type: Zip, description: "create a jar archive of the native libs") { destinationDir file("$projectDir/libs") baseName "Native_Sina" extension "jar" from fileTree(dir: "libs", include: "**/*.so") into "lib" } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn(nativeLibsToJar) } } // 依赖的工具包 dependencies { compile fileTree(include: [´*.jar´], dir: ´libs´) testCompile ´junit:junit:4.12´ compile ´com.android.support:appcompat-v7:23.0.1´ compile ´com.android.support:design:23.0.1´ compile files(´libs/slidingmenu.jar´) }
相信大家在引入so文件的时候多少会有一些的问题、如果上述的代码不是很清楚的话、可以移步去详细了解一下:Android Studio添加引入so资源库
5、Android Library依赖
对于项目依赖 android library的话、就不是依赖一个jar、那么简单了、在这里需要使用gradle mulit project 机制、在过去、android library并没有一个很好的包管理方式、简单来说、在gradle出现以前、官方并没有一种用于管理android library 依赖包的方式、一般我们都是直接下载别人的android library project 源码进行集成
而对于第三方的android-maven-plugin 用的是apklib 格式、而现在、官方终于推出一种androidlibrary的打包格式、扩展名为*.aar、前面提到、目前android gradle插件并不支持本地直接使用*.aar文件、对android library 进行打包直接在library项目下面使用gradle build 即可、然后、你就会在 build/libs 目录下看到两个*.aar文件、一个debug包用的、一个是release 下用的、看个人需求使用、这里我们用的是release 版本的 .aar 文件、引用脚本跟前面讲的依赖库相似
dependencies { compile(name: ´pulltorefresh´, ext: ´aar´) }
6、总结说明
我估计现在大部分开发的项目普遍使用的是maven、但是不知道为什么、使用Gradle时经常会遇到一些无法获取远程依赖包的问题、最简单的解决办法就是把依赖包下载的本地、所以建议大家尽量使用本地依赖、如果介绍了这些你还不是太明白、那你可以自己在网上搜一些相关的知识学习学习、或者自己找些资料进行了解、最好的学习就是挑战自己而不是依赖别人
若资源对你有帮助、浏览后有很大收获、不妨小额打赏我一下、你的鼓励是维持我不断写博客最大动力
想获取DD博客最新资讯、你可以扫描下方的二维码、关注DD博客微信公众号(ddblogs)
或者你也可以关注我的新浪微博、了解DD博客的最新动态:DD博客官方微博(dwtedx的微博)
如对资源有任何疑问或觉得仍然有很大的改善空间、可以对该博文进行评论、希望不吝赐教
为保证及时回复、可以使用博客留言板给我留言: DD博客留言板(dwtedx的留言板)
感谢你的访问、祝你生活愉快、工作顺心、欢迎常来逛逛