从Gradle上的辅助模块获取资源

时间:2015-01-08 10:03:33

标签: android android-studio android-gradle

我正在尝试从Android Studio上的辅助模块获取一些R.string资源。我有两个不同的模块。我可以将Applicacion Context传递给我的secundary模块,以便调用getString(R.string....)方法。

两个字符串文件都有相同的字符串。但它们都不适合我。这就是我在辅助模块中所做的事情:

 Resources.getSystem().getString(R.string.infraestructura);

当我使用从主模块收到的上下文时,我的结果相同:

cx.getString(R.string.infraestructura);

当我在那里导入辅助模块R.string文件时,我得到例外:

  java.lang.RuntimeException: Unable to start activity ComponentInfo{es.mycompany.sima/es.mycompany.sima.HomeActivity}: android.content.res.Resources$NotFoundException: String resource ID #0x7f0b0047
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2389)
        at android.app.ActivityThread.access$900(ActivityThread.java:169)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5479)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
        at dalvik.system.NativeStart.main(Native Method)
 Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x7f0b0047

当我尝试导入主R.string文件时,我在编译时遇到错误:

Error:(9, 21) error: package es.mycompany.sima does not exist <-- Import line
Error:(32, 125) error: package R does not exist <-- Reference to R

我使用cx.getResources().getString(R.string.infraestructura)代替cx.getString(R.string.infraestructura)解决了问题。不过,我不知道为什么。

2 个答案:

答案 0 :(得分:0)

您无法直接访问数据。您需要使用Content Provider在应用程序之间共享任何数据。如果您使用第二个模块作为库,请正确检查构建路径,并通过查看导入确保R指向正确的模块。

答案 1 :(得分:0)

Resources.getSystem().getString(R.string.infraestructura); 只适用于系统资源(android.R.string ...)

在辅助模块中,由于周期性依赖(app - &gt; sub module&amp;&amp; sub module - &gt; app),您通常不会调用app模块的字符串资源。

从您的app模块,您应该能够像这样引用子模块字符串资源: getString(package.ofsubmodule.R.string.string_name);

根据您调用cx.getResources or cx.getString的位置以及您使用或传递它的方式,它可能会引用应用程序或子模块的资源,您必须显示更多代码才能解决问题。