Android Gradle的外部依赖性
我熟悉使用Android Gradle的外部依赖性,android,gradle,makefile,Android,Gradle,Makefile,我熟悉使用make构建大型应用程序,但现在我已经开始使用Android Studio,我想了解如何在Makefile中完成我已经做过的事情 下面是一个可能有助于您确定答案的示例: 生成文件示例:(极简主义) 在Gradle如何做到这一点? 我想解决上面示例中提到的外部依赖关系。实际上,我是通过“make”完成的,但我想完全删除这个额外的步骤。可以从Grandle运行外部命令,并将它们集成到构建过程中。我的示例在Windows上运行inkscape.exe,并在构建脚本中定义其参数,您也可以通过这
make
构建大型应用程序,但现在我已经开始使用Android Studio,我想了解如何在Makefile
中完成我已经做过的事情
下面是一个可能有助于您确定答案的示例:
生成文件示例:(极简主义)
在Gradle如何做到这一点?
我想解决上面示例中提到的外部依赖关系。实际上,我是通过“make”完成的,但我想完全删除这个额外的步骤。可以从Grandle运行外部命令,并将它们集成到构建过程中。我的示例在Windows上运行
inkscape.exe
,并在构建脚本中定义其参数,您也可以通过这种方式运行shell脚本
以下代码进入app\build.gradle
文件。TaskconvertDrawable
是用Groovy语法编写的,它实现了以下功能(它是您的“简单示例”的一个实现):
- 它查看自定义文件夹中的所有
文件*.svg
art/drawable
- 在每个
文件中,查看资源文件夹中的所有*.svg
文件夹drawable-*
- 根据
文件夹名称,确定目标分辨率drawable-*
- 然后调用
将每个inkscape.exe
转换为所需大小的*.svg
*.png
dependencies
标记,但据我所知,它主要用于从项目中添加外部JAR,或者像Maven一样,向外部存储库提供地址,以便为您下载库。希望它能对您有所帮助。@G_V我知道,我想解决外部依赖关系,如我的示例中提到的。在修改图像时手动导出每个图像是徒劳的。事实上,目前我正在使用“make”来做这件事,但我想完全删除这个额外的步骤。我可以想象,我自己在后台线程的代码中预先调整了所有内容,然后缓存我需要的内容,只要我需要它。除非你有数百个大的可绘制文件,否则效果就足够好了。在这种情况下,扩展本身不会使应用程序慢很多,但垃圾收集器会。我真的帮不了你,但也许格拉德尔的更有用。
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
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)
}