首页 > 编程知识 正文

android studio gradle,gradle使用教程

时间:2023-05-04 19:41:15 阅读:9981 作者:2197

Gradle介绍

Gradle是基于Ant和Maven概念的项目自动化构建工具。 使用基于Groovy的特定领域语言(DSL )声明项目设置。 这比我们的ANT使用XML构建配置要灵活得多。 创建配置时,可以像编程一样灵活。 Gradle是一种基于Groovy的DSL语言,与JAVA完全兼容。

在安卓studio中使用Gradle

Android Studio是使用Gradle自动构建的IDE。 在Android Studio中创建新项目时,项目的目录大致如下:

APP #安卓APP目录

() )APP.IML

()构建build #输出目录

()build.grad le #构建脚本

() libs #so关联库

(()proguard-rules.pro # proguard是混淆配置的

()src #源代码、资源等

build

()Intermediates

Build.gradle#工程生成文件

地面

() wrapper

gradle.properties#gradle部署

gradlew#gradlewrapperLinux外壳程序脚本

gradlew.bat

LibSqlite.iml

配置local.properties#androodSDK位置文件

( settings.gradle #工程配置复制代码

其中,settings.gradle用于设置项目,表示它下面有几个模块。 例如,这里包含: app模块(

include ':app '复印代码

与settings.gradle位于同一目录中的build.gradle是顶级的build配置文件,在此可以为所有项目和模块设置公共设置。

//top-levelbuildfilewhereyoucanaddconfigurationoptionscommontoallsub-projects/modules。

buildscript {

存储库{

使用jcenter ()//jcenter库

}

从属关系

依靠安卓提供的2.1.2 Grad le build

class path ' com.Android.tools.build : grad le :2.1.2 '

//note : donotplaceyourapplicationdependencieshere; they belong

//intheindividualmodulebuild.gradlefiles

}

}

//将所有项目的存储库部署到jcenters中

所有项目{

存储库{

jcenter () )

}

}复制代码

安卓网格基本配置

设置APP应用程序的签名信息

可以在android.signingConfigs{}中定义一个或多个签名信息,并将其配置为与buildTypes{}一起使用。 例如:

安卓{

信令配置{

发布{

指定用于//签名的文件,文件对应的根目录是gradle文件所在的根目录

storefilefile(release.keystore ) )。

//别名

keyAlias 'release '

//key密码

keyPassword '123456 '

//证书密码

storePassword '123456 '

}

调试{

.

}

}

构建类型{

发布{

signingconfigsigningconfigs.release

}

调试{

signingconfigsigningconfigs.debug

}

}

}复制代码

启用编程混淆

我们可以为不同的buildTypes选择是否启用混淆,一般release发布版本是需要启用混淆的,这样别人反编译之后就很难分析你的代码,而我们自己开发调试的时候是不需要混淆的,所以debug不启用混淆。对release启用混淆的配置如下:

android{

buildTypes {

release {

//是否启用混淆

minifyEnabled true

//是否去除无效的资源文件,这个设置依赖于minifyEnabled的设置,因此要两者同时设置为true才会生效

shrinkResources true

//getDefaultProguardFile('proguard-android.txt')表示获取SDK下'proguard-android.txt‘文件中的默认混淆规则

//'proguard-rules.pro'表示使用项目根目录下的 'proguard-rules.pro'文件中的混淆规则

//proguard-rules.pro文件名可以任意,只要在配置文件中指明即可

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

}

}复制代码

此处查看更多关于proguard的信息

启用zipAlign

zipalign是一款重要的优化apk应用程序的工具。

apk包的本质是一个zip压缩文档,优化的目的是使包内未压缩的数据能够有序的排列,从而减少应用程序运行时的内存消耗.

android{

buildTypes {

release {

zipAlignEnabled true

}

}

}复制代码

多渠道打包

通过设置productFlavors的值,我们可以指定不同的渠道包,并且每个渠道包可以自定义其applicationId、versionCode以及versionName等信息

android {

productFlavors {

dev{

applicationId "com.gdut.demo.dev"

}

qa{

applicationId "com.gdut.demo.qa"

}

pro{

applicationId "com.gdut.demo.pro"

}

}

}复制代码

AndroidManifest里的占位符

manifestPlaceholders,它允许我们动态替换我们在AndroidManifest文件里定义的占位符。例如:

android:name="UMENG_APPKEY"

android:value="${umeng_app_key}"/>

android:name="UMENG_SECRET"

android:value="${umeng_app_secret}"/>

然后我们可以针对不同的flavors或者buildTypes动态的指定相应的值,例如:

buildTypes {

debug {

manifestPlaceholders = [umeng_app_key: "替代的内容",umeng_app_secret:"替换的内容"]

}

...

}复制代码

自定义Android BuildConfig

BuildConfig.java是Android Gradle自动生成的一个java类文件,无法手动编译,但是可以通过Gradle控制,也就是说他是动态可配置的。在 gradle 文件 buildTypes 或者 productFlavors 下面,如:

buildTypes {

release{

//release的包中BuildConfig.ENDPOINT 就会被赋值为 http://example.com 就可以供 Java 代码调用了。

buildConfigField "String", "ENDPOINT", ""http://example.com""

}

}复制代码

动态设置 Android resValue

修改 res value 的方式,比如修改 strings.xml 文件中的 AppName 的值。在gradle文件 buildTypes 或者 productFlavors 下面,如:

buildTypes{

release{

//将release的包中名为 AppName 的 string value 值改为 app1

resValue "string", "AppName", "app1"

}

}复制代码

splits的使用

我们除了可以通过设置buildtypes来进行分类打包之外,还可以根据屏幕大小、cpu架构适配类型来进行分类打包,通过使用splits我们可以达成这个目的,例如

splits {

density {

enable true

reset()

include "mdpi", "hdpi"

}

abi {

enable true

reset()

include "x86", "mips"

}

}复制代码

更多的使用情况以及使用说明请参考android的官方文档:Configure APK Splits

解决方法数限制

Android设定的方法数是65536个(DEX 64K problem),超过这个方法数,导致dex无法生成,就无法生成APK.处理这个问题,除了尽可能的进行apk瘦身,减少整个apk的方法数之外,可以进行两种设置进行解决。

1. 使用multiDex。开启分包模式

defaultConfig {

multiDexEnabled=true

}

2. 忽略方法数的检查。2.3版本及以下的手机无法正常安装

android {

dexOptions {

jumboMode = true

}复制代码

dependencies依赖配置

dependencies {

compile fileTree(include: '*.jar', dir: 'libs')

compile project(':pullrefresh')

prodCompile files('src/prod/libs/bankcard-encrypt.jar')

debugCompile files('src/qa/libs/bugrpt.jar')

}复制代码

compile配置将被用于编译main application。它里面的所有东西都被会被添加到编译的classpath中,同时也会被打包进最终的APK。 以下是添加依赖时可能用到的其它一些配置选项:

compile main application(主module)。

androidTestCompile test application(测试module)

debugCompile debug Build Type(debug类型的编译)

prodCompile prod productFlavors(prod渠道的编译)复制代码

因为没有可能去构建一个没有关联任何BuildType(构建类型)的APK,APK默认配置了两个或两个以上的编译配置:compile和< buildTypes >Compile. 创建一个新的buildTypes或者productFlavors将会自动创建一个基于它名字的新配置

使用FindBugs

FindBugs是一个Java静态分析工具,用来检查类或者jar文件,用来发现可能的问题。检测完成之后会生成一份详细的报告,借助这份报告可以找到潜在的bug,比如NullPointException,特定的资源没有关闭,查询数据库没有调用Cursor.close()等;

Java的静态分析工具当然可以无难度的在Android上面运行,通过这种FindBugs的检查可以让App的运行更加的稳定。

apply plugin: "findbugs"

//定义一个task任务,这个任务的类型是FindBugs

task findbugs(type: FindBugs) {

//有警告错误的时候也是允许构建

ignoreFailures= true

effort= "default"

//报告的级别,Low,Medium,High

reportLevel= "high"

println( "$project.buildDir")

//classes和source分别是对应的.classe文件夹地址,和源代码文件地址。

classes = files("$project.buildDir/intermediates/classes")

source= fileTree("src/main/java/")

classpath= files()

//指定报告类型,有两种方式xml和html,只允许一种输出格式

reports{

xml.enabled=false

html.enabled=true

xml {

destination "$project.buildDir/findbugs.xml"

}

html{

destination "$project.buildDir/findbugs.html"

}

}

}复制代码

参考文献

Android Plugin DSL Reference

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。