我熟悉使用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中执行此操作?
我想解决上面示例中提到的外部依赖关系。实际上我是通过&#39; make&#39;来做的,但我想彻底删除这个额外的步骤。
答案 0 :(得分:3)
可以从Grandle运行外部命令并将它们集成到您的构建过程中。我的示例在Windows上运行inkscape.exe
并在构建脚本中定义其参数,您也可以通过这种方式运行shell脚本。
以下代码进入app\build.gradle
文件。任务convertDrawable
是用Groovy语法编写的,并完成以下任务( tl; dr它是您的&#34;简单示例&#34; 的实现):
*.svg
art/drawable
个文件
*.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)
}
以下是我使用的资源: