代码之家  ›  专栏  ›  技术社区  ›  thobens

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

  •  0
  • thobens  · 技术社区  · 11 年前

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

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

    新闻网.java

    package ch.newsnet.app;
    
    import ch.newsnet.app.R; // <- cannot be found after build
    
    public class Newsnet extends FragmentActivity {
        //...
    }
    

    运行我的自定义蚂蚁目标会将我的android包设置为 ch.customer1.app ,使R成为一类包 ch客户1.应用程序 。但我希望它永远都是 ch.newsnet.app 。我如何在a)ant构建和b)eclipse构建中实现这一点?我不想在一个代码库中设置20多个项目并维护它们的构建文件和资源。

    1 回复  |  直到 11 年前
        1
  •  0
  •   thobens    11 年前

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

    我创建了ant target 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构建器,以便在保存后同步生成的类。