gpt4 book ai didi

android - Gradle 的外部依赖

转载 作者:太空狗 更新时间:2023-10-29 12:40:21 26 4
gpt4 key购买 nike

我熟悉使用 make 构建大型应用程序,但现在我已经开始使用 Android Studio 并且我想了解如何做我已经在 Makefile 中做的事情>.

下面是一个可能会帮助您构建答案的示例:

Makefile 示例:(极简主义)

INK=inkscape
INKFLAGS=--export-area-page

# Resolve *.png dependencies
drawable-mdpi/%.png: %.svg
$(INK) $< --export-png=$@ -w 48 -h 48 $(INKFLAGS)

drawable-hdpi/%.png: %.svg
$(INK) $< --export-png=$@ -w 72 -h 72 $(INKFLAGS)

drawable-xdpi/%.png: %.svg
$(INK) $< --export-png=$@ -w 96 -h 96 $(INKFLAGS)

更简单的例子:

drawable-mdpi/ic_launcher.png: ic_launcher.svg
inkscape ic_launcher.svg --export-png=ic_launcher.png -w 48 -h 48 --export-area-page

drawable-hdpi/ic_launcher.png: ic_launcher.svg
inkscape ic_launcher.svg --export-png=ic_launcher.png -w 72 -h 72 --export-area-page

如何在 Gradle 中做到这一点?

我想解决上面示例中提到的外部依赖项。实际上我是通过“make”来完成的,但我想完全删除这个额外的步骤。

最佳答案

可以从 Grandle 运行外部命令并将其集成到您的构建过程中。我的示例在 Windows 上运行 inkscape.exe 并在构建脚本中定义其参数,您也可以通过这种方式运行 shell 脚本。

以下代码进入 app\build.gradle 文件。任务 convertDrawable 是用 Groovy 语法编写的并完成了以下任务(tl;dr 它是您的“简单示例” 的一个实现):

  • 它查看自定义文件夹 art/drawable 中的所有 *.svg 文件
  • 在每个 *.svg 文件中,查看资源文件夹中的所有 drawable-* 文件夹
  • 根据drawable-*文件夹名称,确定目标分辨率。
  • 然后调用 inkscape.exe 将每个 *.svg 转换为具有所需大小的 *.png

代码:

task convertDrawables() {
def ink = 'C:\\Program Files (x86)\\Inkscape\\inkscape.exe'

// look for *.svg files in app/src/art/drawable folder
new File('app\\src\\art\\drawable').eachFileMatch(~/.*\.svg/) { file ->
// look for destination folders
new File('app\\src\\main\\res').eachFileMatch(~/drawable-.*/) { outputDir ->

// define size based on folder name
def size = ''
switch (outputDir.getAbsolutePath()) {
case ~/.*-ldpi/:
size = '36'
break
case ~/.*-mdpi/:
size = '48'
break
case ~/.*-hdpi/:
size = '72'
break
case ~/.*-xhdpi/:
size = '96'
break
case ~/.*-xxhdpi/:
size = '144'
break
case ~/.*-xxxhdpi/:
size = '192'
break
}
def cmd = ink + ' ' + file.getCanonicalPath() + ' --export-png=' + outputDir.getAbsolutePath() + '\\ic_launcher2.png -w ' + size + ' -h ' + size + ' --export-area-page'
def process = cmd.execute();
process.waitFor();
}
}
}


// make sure the convertDrawable task is executed somewhere in the make process
gradle.projectsEvaluated {
preBuild.dependsOn(convertDrawable)
}

以下是我使用的资源:

关于android - Gradle 的外部依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27263160/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com