5

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

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

import pkg.name.one.R;

对于其他应用程序

import pkg.name.two.R;

我想以R相同的方式为两个类导入。

我尝试像这样包装 R:

打包场景;

public class RWrapper {

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

}

(这将使RWrapper这两个分支之间唯一不同的文件关于源或R)但唉R是最后一个类(我什至不确定这是否会起作用)

那么有没有办法以某种方式给 R 类起别名,让我可以import pkg.name.one.R; / import pkg.name.two.R;用统一的 import 语句替换它?

我也愿意接受其他可以解决我的同步问题的建议:)

4

2 回答 2

0

Couldn't you modify RWrapper to make R a static field instead of a class? Your code would then access R via RWrapper.RClass...

Example

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

and

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

You'd access the R fields with:

RWrapper.R.<blah>
于 2012-06-12T14:04:04.070 回答
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,但有时会受到时间限制等。

于 2017-10-04T23:27:33.083 回答