gradle命令(gradle命令行打包生成apk)
本篇文章给大家谈谈gradle命令,以及gradle命令行打包生成apk对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Gradle 命令
- 2、全面理解Gradle - 执行时序
- 3、Android Studio中gradle命令指定打jar包...
- 4、gradle解压源码,重新打包
- 5、gradle 解决重复依赖
- 6、Gradle 任务 --
Gradle 命令
gradle -v //物晌版本号
gradle clean //清除build文件夹
gradle build //检查依赖并打包
gradle assembleDebug //编译打包Debug包
gradle assembleRelease //编译打包Release包
gradle installRelease //打包并安装Release包
gradle unstallRelease //卸载Release包
gradle dependencies //查看依赖图表
gradle clean build -x test //跳过测试编译
gradle --profile build //分析构建任务羡世
gradle build --dry-run //编译并不执行任务
gradle install //安置项目jar包到本地Maven仓库
gradle tasks //查看Gradle任务
gradle tasks --all //查罩派锋看所有Gradle任务
gradle build --daemon //使用Gradle守护程序(Daemon)
gradle build --offline //用离线模式运行
gradle clean build --refresh-dependencies //刷新Gradle依赖缓存
[img]全面理解Gradle - 执行时序
一个像 Ant 一样的非常灵活的通用构建工具
一种可切换的, 像 maven 一样的基乎绝于合约构建的框架岁首姿
支持强大的多工程构建
支持强大的依赖管理(基于 ApacheIvy )
支持已有芹枯的 maven 和 ivy 仓库
支持传递性依赖管理, 而不需要远程仓库或者 pom.xml 或者 ivy 配置文件
优先支持 Ant 式的任务和构建
基于 groovy 的构建脚本
有丰富的领域模型来描述你的构建
如果你本地安装了Gradle,那么你就可以使用gradle命令来直接构建。如果本地没有安装,那么可以通过gradle wrapper来构建,Linux和MAC使用./gradlew,而Windows上面则使用gradlew,还可以在 gradle/gradle-wrapper.properties 中配置 Gradle 版本。
Gradle脚本的执行分为三个过程:
下面我们根据一个实际的例子来详细说明。这里我们仍然采用VirtualAPK这个开源项目来做演示,它的地址是: 。
我们以它的宿主端为例,宿主端有如下几个模块:
其中buildSrc是virtualapk-gradle-plugin,为了便于调试我将其重命名为buildSrc。他们的依赖关系如下:
解释一下,app模块依赖CoreLibrary和buildSrc,CoreLibrary又依赖AndroidStub。为了大家更好理解,下面加一下log。
现在随便执行一个task,比如 ./gradlew clean ,那么将会输出如下日志,大家对比着日志,应该能明白Gradle脚本的执行顺序了吧。
可以看到,Gradle执行的时候遵循如下顺序:
1. 首先解析settings.gradle来获取模块信息,这是初始化阶段;
2. 然后配置每个模块,配置的时候并不会执行task;
3. 配置完了以后,有一个重要的回调 project.afterEvaluate ,它表示所有的模块都已经配置完了,可以准备执行task了;
4. 执行指定的task。
Android Studio中gradle命令指定打jar包...
近期在项目中需要对网络访问接口进行jar封装。
在eclipse中进行指定类进行打jar包很简单,但是在android studio中斗局搭则有点困难,其主要的原因是需要掌握gradle命令形式。接下来就直接上干货。
首先,在你需要进行分装jar的模块进行build.gradle文件下进行以下添加:
然后在Windos CMD中跳转到你的项目路径下,然后执行gradle makeJar命令,如果提示:gradle命令不可用。那么你需要在你的系统环境变量中进行变量的添加:
找到你的gradle插件路径进行添加,然后再在path属性的末尾进行
“;%GRADLE_HOME%\bin”添加。
然后输入 "gradle -v"或者"gradle -version"都可以.
如图就说明gradle配置成功了。
然后再cmd命令到你的项目路径下,然后再次腊尺输入gradle makeJar回车,
这里提示我们在我需要进行jar分装的模块出错了, 我们按照错误提示进行修改 ,在buold.gradle文件中添加
lintOptions {
abortOnErrorfalse
}
然后点击Sync Now。再次运行gradle makeJar。然后再一长串的编译后在末尾看到
然后我们在项目模块的build/libs文件夹下看到了我们命名的.jar文件
OK,到此就结束了。上面是个简单的例子,只能打包某个包下面的所有文件,如果要实现只打某个包下面的某些子包或者文件可参考如下示例:
taskmakeSdkJar(type:org.gradle.api.tasks.bundling.Jar){
baseName'pluginsdk'
//只打包org.cmdmac下的org.cmdmac.pluginsdk.impl和org.cmdmac.gamecenter,其他子包不会被打包进去
from('build/intermediates/classes/debug/org/cmdmac/'){
include'pluginsdk/impl'
include'gamecenter'
}
into('org/cmdmac/')
// exclude('R.class')
// exclude{ it.name.startsWith('R$');}
taskmakeSdkJar(type:org.gradle.api.tasks.bundling.Jar){
baseName'pluginsdk'
//只打包org.cmdmac下的org.cmdmac.pluginsdk.impl和org.cmdmac.gamecenter,其他子包不会被打包进去
from('build/intermediates/classes/debug/org/cmdmac/'){
include'pluginsdk/impl'
include'gamecenter'
}
into('org/cmdmac/')
// exclude('R.class')
// 空拿exclude{ it.name.startsWith('R$');}
}
gradle解压源码,重新打包
这几天工作上遇到一个问题,三方的jar包在liunx下解压不了,用gradle又能正常编译,我们的apk是在liunx下用mk进腔悔行编译的,编译的过程中需要对jar包进行解压,这样就导致编译失败。
错误信息如下:以后再遇到这个错误,可能就jar包的问题。
FAILED: /bin/bash -c "(mkdir -p out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack.tmpjill.res ) (unzip -qo /home/x/xx/xxx/伍渣正APK92_GNBJ_EDO/code/libs/xxx-sdk-java20171027120314.jar -d out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack.tmpjill.res ) (find out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack.tmpjill.res -iname \"*.class\" -delete ) (JACK_VERSION=3.36.CANDIDATE out/host/linux-x86/bin/jack @build/core/jack-default.args --verbose error -D jack.import.resource.policy=keep-first -D jack.import.type.policy=keep-first -D jack.android.min-api-level=1 --import /home/x/xx/xxx/APK92_GNBJ_EDO/code/libs/xxx-sdk-java20171027120314.jar --import-resource out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack.tmpjill.res --output-jack out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack ) (rm -rf out/target/common/obj/JAVA_LIBRARIES/xxx-sdk_intermediates/classes.jack.tmpjill.res )" warning: stripped absolute path spec from / mapname: conversion of failed ninja: build stopped: subcommand failed. build/core/ninja.mk:148: recipe for target 'ninja_wrapper' failed
解决方法:对jar包源码重新打包
解压jar包源码,注意,是带源码的jar包,如果是编译过的jar,是不能重新打包的。
步骤:
1.新建build.gradle文件,因为gradle会默认找到当前目录下的build.gradle下的文件去执行;
2.在终端执行gradle unzip,执行这个task
以下命令将这个目录 app/libs/xxx-sdk-java20171027120314.jar 下的jar包解压到了 unpacked/dist 目录。
解压之后的源码就是文件夹,重新打包的时候需要注意,包名和源码的路径名一致。现在利用Android studio进行打包。
步骤:
1.新建lib module,选择Android Libeary/Java Library;
2.注意修改包名与jar包路径相同,eg:jar包解压之后的路径 dist/com/example/api ,梁乱那么为了确保新生成的jar包里的Java文件import路径相同,module的包名也要命名为 com.example.api ;
3.将解压之后的源码java文件复制到lib model中;
4.在 app module 下添加 lib module 依赖。这是一种取巧的方法,当你添加了lib module依赖之后,项目会重新rebuild,这个过程会将module依赖编译成jar包,存放在lib module的 build/libs 目录下,由于Android Studio版本不同,这个目录可能有有所不同,但是都在build目录下,找新的jar包就可以了。
这一部可能会报jar包找不到,或者lib module中的import失败,可能是因为lib module依赖的jar包没导入,导入之后在lib module的build.gradle里配置一下就可以了。
这个时候,其实直接用这个jar包也可以了,如果向修改jar包名字,可以执行下面的gradle命令:
想了解更多可以参考 这里
然后在项目里测试一下jar包就可以了。
重新打包之后就可以在liunx下解压了,正常编译通过。
最后记录一下mk编译的一个错误 # [ERROR: Dex writing phase: classes.dex has too many IDs. Try using multi-dex]() 在stackoverflow上找到了解决方法。
在mk文件中添加
参考:
gradle 解决重复依赖
一、查看重复依赖
如果出现重复依赖一般会出现以下错误:
通过gradle命令查看重复依赖,在android studio命令窗口中输入以下命令:
稍等片刻,会出来一个树状图,其此卜中用"-"会标示出冲突的部分
二、去除重复依赖
1.如果两个独立的重复依赖包,去除之一即可;
2.如果出现一个森厅穗引用包里面引用的包伏神出现的重复可以使用 exclude group:'***'来解决,如LeanCloud的SDK中可能包含了与你其他的库中不同版本的httpclient或者okhttp
Done!
Gradle 任务 --
----《Android Gradle 权威指南》学习笔记
总目录: Gradle 学习老厅系列 -- 目录
上侍纤隐一篇: Gradle 任务 -- 任务分组和描述
下一篇: Gradle 任务 -- 任务的执行分析
在命令行中执行命令: gradle -q taskExt
如果是 Gradle5以前,则会打印如下:
如果是 gradle 5.0及其以后版竖陪本,则会报错,如图所示:
关于gradle命令和gradle命令行打包生成apk的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。