【问题标题】:Can I somehow alias R in Android?我可以在Android中以某种方式别名R吗?
【发布时间】:2012-06-14 08:41:40
【问题描述】:

我有两个 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; 替换为统一的导入语句?

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

【问题讨论】:

  • 最好导入R in import statement并使用CTRL+SHIFT+O删除不必要的包
  • 不是您的问题的真正答案,但是您是否将重复的代码放入您从每个应用程序引用的库项目中,或者两个应用程序完全分开并且具有 90% 相同的代码?并且您应该保持 R 文件原样,不要尝试对两个项目使用相同的文件
  • 将共享代码移动到 android 库。然后将其包含在两个应用程序中。
  • 萨米尔 - 我不确定你的意思
  • banzai86 & dziobas - 我的大部分共享代码已经转移到一个 android 库项目中,但我仍然坚持将我的活动放在项目本身的分支中。我有很多共享布局和可绘制对象,但在某些情况下它们是不同的

标签: java android git android-resources


【解决方案1】:

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,但有时会受到时间限制等。

【讨论】:

    【解决方案2】:

    您不能修改RWrapper 以使R 成为静态字段而不是类吗?然后您的代码将通过RWrapper.RClass... 访问R

    例子

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

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

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

    RWrapper.R.<blah>
    

    【讨论】:

      猜你喜欢
      • 2015-07-05
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2021-09-03
      • 1970-01-01
      • 2023-02-14
      • 1970-01-01
      相关资源
      最近更新 更多