常用 gradle 命令
2022-11-16 本文已影响0人
北疆小兵
库的依赖
- 查询库的依赖
gradlew app:dependencies
不过这种命令行方式查看依赖树出来的信息太多,看的有些费劲
所以官方又推出了Scan工具来帮助我们更加方便地查看依赖树
在项目根目录位置下运行
gradle build \--scan
即可,然后会生成 HTML 格式的分析文件的分析文件
分析文件会直接上传到Scan官网,命令行最后会给出远程地址
- 将依赖树输入到 文件中
gradlew -q :app:dependencies > dependencies.txt
- gradlew [module_name]:dependencies
[module_name] 换成需要打印的模块名,例如 gradlew account:dependencies ->account_dependencies.txt 将会把 account模块的
依赖信息写入到 account_dependencies.txt
- 排除某个库的依赖
implementation(rootProject.ext.thirddependencies["sf-upload-sdk"]) {
force = true
exclude group: 'com.google.guava'
exclude group: 'com.sf.andlibrary'
exclude group: 'com.android.support'
}
- 查看gradle报错信息
./gradlew build -s
./gradlew build --scan
自定义Transform
- 写一个继承 Transform 的类
class HenCodeTransorm extends Transform{
@Override
String getName() {
return "hencoder222"
}
/**
* 定义 Transform的输入范围为 class 或者 jar 文件
* @return
*/
@Override
Set<QualifiedContent.ContentType> getInputTypes() {
return TransformManager.CONTENT_CLASS
}
/**
* 定义项目范围,例如主项目、子项目、第三方库、所有?
* @return
*/
@Override
Set<? super QualifiedContent.Scope> getScopes() {
return TransformManager.SCOPE_FULL_PROJECT
}
@Override
boolean isIncremental() {
return false
}
}
** 2将 Transform 注入到打包过程
class HenCoder implements org.gradle.api.Plugin<Project>{
@Override
void apply(Project target) {
//所有的扩展
def extension = target.extensions.create("hencoder",HencoderExtension)
target.afterEvaluate {
println "Hello name: ${extension.name}, value:${extension.value}"
}
def transform = new HenCodeTransorm()
//拿到com.android.application 这个插件的扩展,去干预 android 的打包流程
def baseExtension = target.extensions.getByType(BaseExtension)
//将 HenCodeTransorm 注入到打包过程
baseExtension.registerTransform(transform)
}
}
sync 一下项目,将会在gradle 的窗口显示
image.png直接运行,发现会报错, 原因是需要实现
List of apks:
[0] '/Users/jerry/work/FastAndroid/app/build/outputs/apk/devPay/debug/com.apache.fastandroid-V1.0.0-100-debug.apk'
The APKs are invalid.
原因是需要在 HenCodeTransorm 中,实现 transform 方法
void transform(TransformInvocation transformInvocation) throws TransformException, InterruptedException, IOException {
super.transform(transformInvocation)
def inputs = transformInvocation.inputs
def outputProvider = transformInvocation.outputProvider
inputs.each {
it.jarInputs.each {
File dest = outputProvider.getContentLocation(it.name,it.contentTypes,it.scopes, Format.JAR)
def msg = "Jar: ${it.file}" +" , dest:${dest}"
println(msg)
FileUtils.copyFile(it.file,dest)
}
it.directoryInputs.each {
File dest = outputProvider.getContentLocation(it.name,it.contentTypes,it.scopes, Format.DIRECTORY)
// rintln("Dir: ${it.file},Dest:${dest}")
def msg = "Dir: ${it.file}" +" , dest:${dest}"
println(msg)
FileUtils.copyDirectory(it.file,dest)
}
}
}