2

我可以以某种方式R为库中生成的R文件和应用程序中生成的文件取别名吗?

IE: 我有两个项目,一个是图书馆。我在应用程序中引用了库。库创建一个R文件,应用程序创建两个:com.example.mapplication.R以及R来自引用库的com.example.mlibrary.R. 但是,由于我想在应用程序中经常使用这两个类,所以我想为这两个R类设置别名。例如,调用库之类的R东西libR和应用程序之R类的appR.

我尝试了一些非常愚蠢的事情,我什至不会完全提及它们,但我做了一些事情,例如private com.example.mapplication.R appR = com.example.mapplication.R(立即意识到这行不通),并且private Class<com.example.mapplication.R> appRclass = com.example.mapplication.R.class;,但这并没有给我想要的效果. 但是,我确实使用后一种方法和一些反射来获得像这样的字段和内部类:

Class<com.example.mapplication.R> appRclass = com.example.mapplication.R.class;
int activity_main_layoutid = Toolkit.getFromClass(appR).
         getMeTheInnerClass("layout").getMeAField("activity_main");

我还没有完全实现 Toolkit 方法,但我们都知道反射可以做这种事情,但归根结底,它与打字com.example.mapplication.Rcom.example.mlibrary.R任何地方一样多。

所以总结一下:是否可以给多个R命名,以便我可以使用appRlibR区分两者?

4

1 回答 1

0

我希望我们可以,但据我所知,这是不可能的,至少现在还不可能。

我也希望我们可以将资源放在子文件夹中,但即使这样也是不可能的。

您可以做的是为每个库设置一个唯一的前缀(重命名每个资源文件),因为它是由一些第三方库完成的(例如actionBarSherlock,它使用“abs”作为前缀)。

或者,您可以有一个特殊的技巧,将文件放在src文件夹中并从那里访问它们,但这更像是一种解决方法,因为R不会引用那里的任何资源。

例如,您可以将名为image.png的图像放入src/com/company/app_name,然后使用以下命令从中创建位图:

final InputStream fis = getClass().getResourceAsStream("/com/company/app_name/image.png");
final Bitmap bitmap = BitmapFactory.decodeStream(fis);

顺便说一句,如果您考虑过使用 assets 文件夹,则不能对库项目执行此操作,因为它要求您在使用库项目的项目中拥有文件。它会起作用,但它错过了封装的想法......

于 2013-01-08T23:00:40.470 回答