2014-03-12 56 views
0

我有一个问题,当我试图做到这一点:创建Android的外部JAR图书馆,没有发现资源

LinearLayout container = (LinearLayout)findViewById(R.id.chat_list_container); 

android.content.res.Resources $ NotFoundException:资源ID#0x7f030001

这是我刚刚创建并添加到我的应用程序的外部代码。

顺便说一句,这个确切的代码工作时,我用它作为导入模块,而不是像外部的jar使用它。

任何帮助?

谢谢!

+1

你是包装资源还在罐子里?你应该制作一个图书馆项目,并在另一个参考相同的情况下,如果是这样的话 – Raghunandan

+0

是的我认为我增加了资源,我怎么能确定它?在jar中,我可以看到R文件中包含一些关于外部资源ID的内容。我把它作为库和参考.. –

+0

你不能将资源打包成jar。 – Raghunandan

回答

0

Android不会在任何外部jar中查找资源,因为它们只包含可执行代码。

如果您想要将资源发布为库,事情会变得更加难看。在这种情况下,您可以像创建framework-res.apk一样创建资源apk。要做到这一点,创建一个没有源的Android项目,将资源文件,并添加到您的AndroidManifest.xml:

... 
<application 
    ... 
    android:hasCode=false > 
    ... 
</application> 

在这种情况下,你将不得不直接从RES-APK检索资源ID :

int resId = getPackageManager().getResourcesForApplication("res.apk.package.name") 
.getIdentifier("chat_list_container" , "layout", "res.apk.package.name"); 

// Maybe getResources.getIdentifier() works, but I'm not sure. 
LinearLayout container = (LinearLayout)findViewById(resId); 

我应该指出,这将运行应用程序的设备也必须安装了资源的apk。

+0

那么,你的意思是我不能显示对话框,例如,一些布局很容易?这是奇怪的。 –

+0

是的,这就是我的意思。实现android库项目 - 在项目属性中设置为库的项目 - 实际上已完全添加到使用它们的主项目中(源和资源)。这是使用外部jar文件和将项目设置为库的区别。 –