android从图书馆项目导入资源

是否可以使用在应用程序项目中的库项目中定义的字符串等资源? 如果是这样,怎么样? 因为我似乎无法解决我想解决的字符串,如下所示:

String title = "sample"; int id = ressources.getIdentifier(title, "string", "com.package"); 

给了我这个例外

WARN / ResourceType(278):获取资源号0x00000000的值时没有包标识符WARN / System.err(278):android.content.res.Resources $ NotFoundException:字符串资源ID#0x0

我正在寻找的字符串(“sample”)肯定在库项目的strings.xml中提供的这个包中。 我甚至可以在R.java中看到它

所以它看起来像

int id = ressources.getIdentifier(title,“string”,“com.package”);

返回0 ,表示找不到指定的资源。 随后对ressources.getIdentifer()调用会导致exception,因为0不是有效的资源ID。

以下是一些调试/替代想法:


  • 你可能已经做了十几次了,但这并没有伤害提到:首先重新检查所有内容的拼写:

    • 包拼写是正确的(在库项目和客户端项目中),
    • 资源字符串是正确的(库项目和客户端项目),
    • 是在AndroidManifest.xmluses-library元素中正确的库拼写,
    • 等等

  • 您可以访问该库中的任何资源,还是该资源特有的问题( title ),还是特定于该types的资源(字符串)? 你能访问另一个图书馆的资源吗?

  • 您是否以jar文件的forms访问该库? 您可以对代码进行jar操作,但无法从jar访问资源。

Android – 是否可以创建一个自定义库以在多个应用程序中使用?


  • 您是否尝试了备用名称格式:

 String fullyQualifiedResourceName = "com.package:string/sample"; int id = ressources.getIdentifier(title, null, null); if (id == 0) { Log.e(TAG, "Lookup id for resource '"+fullyQualifiedResourceName+"' failed"; // graceful error handling code here } 

  • 您可以尝试使用reflection:

 final String resourceName= "sample"; final int id; try { final Class resourceType = com.package.R.string.class; final Field field = resourceType.getField(title); id = field.getInt(null); } catch (final Exception e) { Log.e(TAG, "Lookup id for resource '"+resourceName+"' failed"; // graceful error handling code here } 

Android,从字符串获取资源ID?

http://daniel-codes.blogspot.com/2009/12/dynamically-retrieving-resources-in.html

在项目代码中,导入R类:

import com.application.libraryproject.R

然后你可以像这样引用任何字符串或其他xml定义的资源:

String mystring = getString(R.string.app_name);

或类似的。

我有一个类似的问题,我用项目库中的getPackageName()方法解决了它。

在你的情况下,它应该是:

 String title = "sample"; int id = ressources.getIdentifier(title, "string", getPackageName()); 

是的,像正常一样定义库项目中的资源。 然后在导入库的项目中引用它们,方法是在库的AndroidManifest.xml中使用包名称添加R类。