赞
踩
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。面向Java应用为主,当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。
注意:gradle和android gradle插件是有区别的,android gradle插件依赖于gradle。
在setting下gradle下设置gradle选择“use defalut gradle wrapper(recommended)”时,AS就会根据{project.dir}\gradle\wrapper\gradle-wrapper.properties文件中的配置去gradle。
配置的gradle必须在缓存目录( “用户主目录/.gradle/wrapper/dists/gradle-..*”)或者在as安装目录下的gradle目录下存在对应的版本。
例如:我的项目中gradle-wrapper.properties
#Tue Aug 14 15:22:35 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-3.5-all.zip
这个配置的gradle如果在目录“用户主目录/.gradle/wrapper/dists/..”存在的话,as就不会去https://services.gradle.org/distributions/gradle-3.5-all.zip去下载了,as就会利用该目录下的缓存,如果该目录下不存在gradle的话as就会去站点根据gradle的版本去下载到“用户主目录/.gradle/wrapper/dists/gradle-3.5-all”目录下。
我的gradle位置:
C:\Users\chaos\.gradle\wrapper\dists\gradle-3.5-all
如果选择的是“use local gradle distribution”的话表示用的是本地的gradle,本地的gradle是在as的主目录下的gradle目录下,比如我的电脑D:\Program Files\Android\Android Studio\gradle\gradle-4.4,而不会去缓存目录 “用户主目录/.gradle/wrapper/dists/gradle-..*”中去找。
上面讨论的是gradle的配置,下面我们来说说android gradle 插件的配置,我们通过工程顶级的build.gradle(不是module的build.gradle)来设置android gradle插件。
dependencies {
classpath 'com.android.tools.build:gradle:2.2.3'
这里配置的android gradle插件的版本是2.2.3,而gradle版本是3.5。
下面是android studio版本,android gralde 插件,gradle版本的版本关系对应表
android studio version | Plugin version | Required Gradle version |
---|---|---|
1.0.0 | 1.0.0 - 1.1.3 | 2.2.1 - 2.3 |
1.2.0 - 1.3.1 | 2.2.1 - 2.9 | |
1.5.0 | 2.2.1 - 2.13 | |
2.0.0 - 2.1.2 | 2.10 - 2.13 | |
2.1.3 - 2.2.3 | 2.14.1+ | |
2.3.0+ | 3.3+ |
官方的文档:http://tools.android.com/tech-docs/new-build-system/version-compatibility
Redirecting to https://developer.android.com/studio/releases/gradle-plugin.html#updating-gradle
所有android gradle 插件版本以及特征见 http://tools.android.com/tech-docs/new-build-system
邓凡平详细介绍groovy特定领域语言:http://www.infoq.com/cn/articles/android-in-depth-gradle/
GRADLE_PATH=C:\Users\chaos\.gradle\wrapper\dists\gradle-3.5-all\exhrs6ca08n232b14ue48lbye\gradle-3.5\bin
%GRADLE_PATH%;再添加到path中
注意:
在bin目录下新建GradleW目录,使用cmd输入gradle wrapper,在\bin\GradleW\gradle\wrapper中可以看到gradlew.bat文件。
这样就可以在GradleW目录中使用gradlew命令了,效果和gradle相同,那么区别是什么呢?
gradle版本会不断更新,每个人使用的版本可能会不同,而gradlew(wrapper)可以算是gradle的一层包装。
gradle进行构建,在wrapper目录中会生成gradle-wrapper.properties文件;
gradlew命令会根据gradle-wrapper.properties文件来使用对应的gradle进行构建,没有则会下载。
如果发生如下错误:
Execution failed for task 'processReleaseManifest'.
Caused by: java.lang.RuntimeException: Manifest merger failed with multiple errors, see logs
可以使用命令来查看详细原因:
gradlew processReleaseManifest --stacktrace
./gradlew -v 版本号 ./gradlew clean clean项目,清除工程目录下的build文件夹 ./gradlew build 构建项目,检查依赖并编译打包 ./gradlew assembleDebug or /gradlew aD 编译并打Debug包 ./gradlew assembleRelease or /gradlew aR 编译并打Release的包 打渠道包: ./gradlew assembleBaiduRelease 编译并打Release的百度渠道包(Baidu字段可以任意替换) 可以和productFlavors结合使用,比如定义了installRelease,uninstallRelease两个productFlavors,则可以如下命令: ./gradlew installRelease or /gradlew iR Release 模式打包并安装 ./gradlew uninstallRelease or ./gradlew uR 卸载Release模式包 同样地: ./gradlew installDebug or /gradlew iD Debug 模式打包并安装 ./gradlew uninstallDebug or ./gradlew uD 卸载Debug模式包 命令可以叠加使用,例如: ./gradlew clean build --info > bugtags.log ./gradlew uD iD
方法一:
1、gradle tasks看看有哪些task,能不能找到对应的task
2、如果找到对应的task,则gradle xxxTask
3、如果没有找到,建议copy要编译的模块,单独打包
方法二:
gradle :子模块名:任务名
例如报错 Execution failed for task ‘:videopatrol:processReleaseManifest’,可以通过如下方法排查:
gradle :videopatrol:processReleaseManifest --info
发现了编译library时的一个问题原因:
AndroidManifest.xml Error:tools:replace specified line:6 for attribute tools:label, but no new value specified.
这里指的是,在manifest中中设置tools:replace时,不能加入没有在设置的属性名。
android.useDeprecatedNdk=true
# 编译时使用守护进程
org.gradle.daemon=true
#JVM最大允许分配的堆内存,按需分配
org.gradle.jvmargs=-Xmx4096m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#使用并行编译
org.gradle.parallel=true
如果是多个module会发现并行编译4个module,推测默认并行编译数为4,而且编译完一个才会在剩余的module中编译下一个。
gradle命令编译时报错:com/android/build/gradle/LibraryPlugin: Unsupported major.minor version 52.0
为什么出现Unsupported major.minor version 52.0?
在stackoverflow找到了本质原因
You get this error because a Java 7 VM tries to load a class compiled for Java 8
Java 8 has the class file version 52.0 but a Java 7 VM can only load class files up to version 51.0
In your case the Java 7 VM is your gradle build and the class is com.android.build.gradle.AppPlugin
简单来说,就是java的编译环境版本太低,java 8 class file的版本是52,Java 7虚拟机只能支持到51。所以需要升级到java 8 vm才行。
为什么gradle命令和android studio按钮运行结果不一样?
按如下路径查找AS的JDK位置:
Android Studio -> Project Structure -> SDK Location -> JDK location
Android Studio使用了自带的JDK环境,其地址为:D:\Program Files\Android\Android Studio\jre
而gradle命令的执行环境是配置在项目工程中的gradle.properties中的,默认指向为JAVA_HOME环境变量的位置。
解决的办法如下:
如果gradle.properties中没有org.gradle.java.home则默认JAVA_HOME,需要新增:
org.gradle.java.home=D:\\Program Files\\Android\\Android Studio\\jre
如果有则将其修改为上面的值。
注意:如果写成org.gradle.java.home=D:\Program Files\Android\Android Studio\jre,会提示Invalid Directory。
电脑中装有多个jdk版本,可能默认的jdk是1.6,如果不想更改的你的JAVA_HOME,下面有几种解决办法:
1.IDEA编译器:比如Android studio.可以在File->Project structure->SDK Location中去指定你的jdk路径
2.build.gradle中添加
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
compileOptions添加在build.gradle的android闭包中
3.在gradle.properties中添加
org.gradle.java.home=your jdk path
4.如果你是直接通过命令行执行任务,比如./gradlew build等,可以使用
gradle build -D org.gradle.java.home=’your jdk path’
命令行带参数的方式执行
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。