在ADT / ant构建中为生成的类配置特定包

时间:2013-08-22 11:14:38

标签: java android ant adt

我正在为使用完全相同代码的各种客户开发一个应用程序(它只显示WebView)。唯一的区别是一个配置文件,图标和android包名称,都是通过自定义ant任务生成的。

如果我在eclipse中运行ant发布目标或构建项目,则生成的Java类(如R)将在名为android包的包中生成。因此,在我的项目中导入这些类是无效的,因为它们的包已经更改。

Newsnet.java

package ch.newsnet.app;

import ch.newsnet.app.R; // <- cannot be found after build

public class Newsnet extends FragmentActivity {
    //...
}

运行我的自定义ant目标会将我的android包设置为ch.customer1.app,这使得R成为包ch.customer1.app的一类。但我希望它永远是ch.newsnet.app。我怎样才能在a)构建和b)eclipse构建器中实现这一点?我不想设置20多个项目并维护他们的构建文件和资源,而我可以在一个代码库中。

1 个答案:

答案 0 :(得分:0)

对于那些面临同样问题的人,我解决了这个问题如下(虽然它不是最好的解决方案,但它对我有用):

我创建了ant目标moveGeneratedFiles,在那里我将生成的包复制到正确的包中,替换包名并删除生成的包(因为将再次生成类,因此在eclipse中不会真正起作用)。

<target name="moveGeneratedFiles">
    <loadproperties>
      <file file="assets/customer.properties"/>
    </loadproperties>
    <copy todir="gen/ch/newsnet/app" overwrite="true">
        <fileset dir="gen/ch/${customer.name}/app" />
    </copy>
    <replace dir="gen/ch/newsnet/app" token="package ch.${customer.name}.app;" value="package ch.newsnet.app;" />
    <delete>
        <fileset dir="gen/ch/${customer.name}/app" />
    </delete>
</target>

在项目属性中,我添加了一个执行此目标的ant构建器,以便在保存后同步生成的类。