我可以在Android中以某种方式对R进行别名吗?

时间:2012-06-11 12:31:37

标签: java android git android-resources

我有两个Android应用程序彼此共享90%的代码,并且由于政治原因(我认为也是技术原因)需要有单独的程序包名称(因此它们将显示在Google Play中的不同URL下)

我为每个应用程序使用git和两个分支,并在每次发布之前手动同步两个分支。当运行两个分支的diff命令时,我的很多文件都是不同的,实际上唯一不同的是自动生成的文件R的包名,所以对于第一个应用程序我有15个文件

import pkg.name.one.R;

和其他应用

import pkg.name.two.R;

我想以某种方式为这两个类以相同的方式导入R

我试着像这样包装R:

打包thescene;

public class RWrapper {

    public class R extends pkg.name.one.R {}

}

(这会使RWrapper成为这两个分支之间关于源或R的唯一不同文件,但是唉R是最后一个类(我甚至不是确定这无论如何都会有用)

那么有没有办法以某种方式将R类别名化为允许我用统一的import语句替换import pkg.name.one.R; / import pkg.name.two.R;的方法?

我也对其他可以解决我的同步问题的建议持开放态度。)

2 个答案:

答案 0 :(得分:0)

您是否无法修改RWrapper以使R成为静态字段而非类?然后,您的代码将通过R

访问RWrapper.RClass...

实施例

public class RWrapper
{
  public static pkg.name.one.R R;
}

public class RWrapper
{
  public static pkg.name.two.R R;
}

您可以通过以下方式访问R字段:

RWrapper.R.<blah>

答案 1 :(得分:0)

seggy几乎是正确的,但你需要单独公开每个R.class。如果子模块具有自己的命名空间,那么您可以重用类名R而不需要修改子模块中的任何内容。

package the.submodule.package;

public final class R {
public static the.app.package.R.string string;
public static the.app.package.R.drawable drawable;
public static the.app.package.R.id id;
//public static the.local.appPackage.R.anythingElse anythingElse;
}

注意:我不是在考虑跨项目共享R,但有时会限制时间等。

相关问题