Android:是否可以在app和lib中对R进行别名来区分这两者?

时间:2013-01-02 11:16:51

标签: android android-library

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

IE:我有两个项目,一个是图书馆。我在应用程序中引用了库。 该库创建一个R文件,该应用程序从引用的库com.example.mapplication.R创建两个:Rcom.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方法,但是我们都知道refletion可以做这种事情,但是在一天结束时,它只需要输入{{1 }}或com.example.mapplication.R无处不在。

所以要包装一下:是否可以为多个com.example.mlibrary.R 设置别名,以便我可以使用RappR来区分他们俩?

1 个答案:

答案 0 :(得分: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文件夹,则无法对库项目执行此操作,因为它要求您拥有项目中使用库项目的文件。它会工作,但它错过了封装的想法......