【发布时间】:2017-06-17 23:56:01
【问题描述】:
我的应用程序中有许多图形资源,我想用不同大小的图形资源支持不同的屏幕尺寸。但是,如果我在最终的 apk 中包含每个图形资源的 3 个不同版本(即 res/drawable-hdpi、res/drawable-ldpi、res/drawable-mdpi),则该应用程序非常大。因此,我希望能够生成 3 个不同的 apk 用于测试——并最终用于部署——目的(参见 using mulitple apks),每个都只包含相关的图形资源。
有没有办法自定义 android 构建过程(我正在使用 eclipse)来实现这一点?如果在 Eclipse 中不可能,是否可以从命令行进行?
我的搜索发现很多人都在使用构建工具 Ant 和 Maven 来解决这类问题,并且 android-sdk 有一个支持 Ant out of the box 的工具。
回答注意事项: 完成下面的教程后,请按照以下步骤操作(阅读完 ant 手册和 android-sdk 附带的 main_rules.xml 后会很清楚):
- 将 main_rules 的内容复制到您的 build.xml 中(在 build.xml cmets 中指定)
- 如下创建三个新任务:
<property name="my.custom_res_folder" value="${basedir}/custom_res"/> <property name="my.drawable_folder" value="${my.custom_res_folder}/drawable"/> <property name="my.drawable_hdpi" value="${resource.absolute.dir}/drawable-hdpi"/> <property name="my.drawable_mdpi" value="${resource.absolute.dir}/drawable-mdpi"/> <property name="my.drawable_ldpi" value="${resource.absolute.dir}/drawable-ldpi"/> <property name="my.drawable_default" value="${resource.absolute.dir}/drawable"/>
<target name="my-make-custom-resource-directory">
<echo message="my-make-custom-resource-directory"/>
<mkdir dir="${my.custom_res_folder}"/>
<mkdir dir="${my.drawable_folder}"/>
<copy todir="${my.custom_res_folder}/layout">
<fileset dir="${resource.absolute.dir}/layout"/>
</copy>
<copy todir="${my.custom_res_folder}/menu">
<fileset dir="${resource.absolute.dir}/menu"/>
</copy>
<copy todir="${my.custom_res_folder}/values">
<fileset dir="${resource.absolute.dir}/values"/>
</copy>
</target>
<target name="my-make-res-small" depends="my-make-custom-resource-directory">
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_ldpi}"/>
</copy>
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_mdpi}"/>
</copy>
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_hdpi}"/>
</copy>
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_default}"/>
</copy>
</target>
<target name="my-make-res-medium" depends="my-make-custom-resource-directory">
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_mdpi}"/>
</copy>
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_hdpi}"/>
</copy>
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_ldpi}"/>
</copy>
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_default}"/>
</copy>
</target>
<target name="my-make-res-large" depends="my-make-custom-resource-directory">
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_hdpi}"/>
</copy>
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_mdpi}"/>
</copy>
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_ldpi}"/>
</copy>
<copy todir="${my.drawable_folder}" overwrite="false">
<fileset dir="${my.drawable_default}"/>
</copy>
</target>
- 运行 my-make-res-X 目标之一后,应创建一个新的资源文件夹
- 修改调试、打包和编译目标,并删除所有指向旧资源文件夹的属性以及指向新资源文件夹的属性(您可能希望复制任务并将它们命名为其他名称
- 然后运行修改后的调试任务。
【问题讨论】:
标签: android eclipse build-process