有条件地在Android(Eclipse)中包含基于项目的资源

时间:2012-07-21 14:35:47

标签: java android eclipse resources

我正在Eclipse中构建一个Android应用程序,并且基于相同的代码库有两个类似的应用程序,一个是“伦敦”,一个是“英国”。要构建每个应用程序,我只需重命名主包并在Application类中更改静态int。该应用程序使用此int的值来显示正确的UI,限制用户行为等。

我有两个图标文件,每个应用一个:

  • res / drawable-hdpi / icon_london.png
  • RES /抽拉-HDPI / icon_uk.png

根据某种项目配置设置,有没有办法有条件地为应用程序和活动使用正确的图标文件?否则,项目维护会增加,因为每次代码库更改时我都必须更改清单,例如

<application
    android:icon="@drawable/icon_london"
    ...
    >

    <activity
        android:name="com.company.MainActivity" 
        android:logo="@drawable/icon_london"
        >
    </activity>

...依此类推,适用于所有活动。

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,最终构建了我的定制Ant脚本来构建应用程序。您可以运行宏或正则表达式来分配一个或另一个资源。

修改

首先,将build.xml添加到项目中:

打开命令提示符并导航到项目目录:

android update project --path

然后,您可以覆盖现有的build.xml,如下所示。

注意:这个Ant脚本只是一个例子,我还没有测试过它:

<?xml version="1.0" encoding="UTF-8"?>
<project name="Example" default="help">
    <property file="local.properties" />
    <property file="ant.properties" />

    <loadproperties srcFile="project.properties" />

    <!-- quick check on sdk.dir -->
    <fail
            message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through an env var"
            unless="sdk.dir"/>

    <!-- IMPORT ANT?S BUILD.XML -->
    <import file="${sdk.dir}/tools/ant/build.xml" />

    <property name="app.icon"       value="${icon}" />
    <property name="icon.file"      location="res/drawable/icon.png" />

    <target name="test-release">
      <antcall target="test-pre-release" />
      <antcall target="release" />
    </target>

    <target name="test-pre-release">
      <copy file="${app.icon}" tofile="${icon.file}" overwrite="true"/>
    </target>

</project>

然后,要使用自定义图标构建此项目,请打开命令提示符并转到项目目录:

CALL ant -f build.xml test-release -Dicon=path/to/your/icon.png

如上所述,这是一个非常基本的例子。要构建一个好的脚本,你必须学习一些Ant语法,但这并不困难。