gradle命令(gradle命令行打包生成apk)

本篇文章给大家谈谈gradle命令,以及gradle命令行打包生成apk对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表