2014-01-07 194 views
0

如何从jar文件中使用drawables?在jar中使用资源

我试过了,我的理解

  1. 我不能使用Library Projecthttp://developer.android.com/tools/projects/index.html#LibraryProjects因为该库将与使用它的应用程序编译。我动态加载该jar库,所以这不应该工作。可以使用Picture Stylehttp://developer.android.com/reference/android/app/Notification.BigPictureStyle.html。但是,我需要从我的库中的res目录创建一个位图。可能吗?
  2. 我知道我可以使用动态加载的资源。我不想再使用动态加载(这个罐子也被动态加载)

更多信息 我有一个动态加载从系统服务的JAR文件,我想的是所有的代码系统服务将在该jar中。

我想在系统服务中显示通知,为此我需要在jar中使用drawable。 我想有一个res目录,就像每个应用程序一样,并且能够使用png进行通知。

每一个帮助将不胜感激!

回答

1

如何从jar文件中使用drawables?

JAR文件中没有可绘制的资源。 JAR中可能有图像文件,您可以尝试使用BitmapFactory加载。任何类型的资源都是,只有编译成APK文件。

我动态加载的jar库

这是从安全角度来看危险,除非你能保证没有人能取代您从任何地方检索该JAR文件。

但后来我需要从我的库中的res目录创建一个位图。可能吗?

你或许可以加载文件从你的JAR和分析它们的使用BitmapFactory位图,然后你可以与采取Bitmap对象,就像那些在Notification.BigPictureStyle通知相关的方法使用。

我有一个动态的从系统服务

除非你正在创建自己的Android构建滚进你自己的ROM MOD,你是不是创建一个“系统服务”加载的jar文件。

我想有一个res目录,就像每个应用程序都有,并且能够使用png进行通知。

然后不要动态加载JAR,而是在您的应用程序项目中包含代码(和资源)。

简而言之,JAR与Android资源没有任何关系。

+0

感谢您的回答! 我有我自己的android版本,我正在创建一个系统服务。我必须动态加载它,因为jar不在android框架中,而是在另一个分区中。 如果我有jar和一个res目录,你碰巧知道如何将它加载为位图? 示例代码或对示例代码的引用会很好 –

+0

@RavitD:“我必须动态加载它,因为jar不在android框架中,但在另一个分区中” - 如果该分区是可写的,则这是一个严重的安全漏洞。 – CommonsWare

+0

@RavitD:“如果我有jar和一个res目录,你是否知道如何将它加载为位图?” - 我假设你[使用'JarFile'](http://developer.android.com/reference/java/util/jar/JarFile.html)在文件中的图像条目上获得一个'InputStream',然后使用“BitmapFactory”将图像解码为“位图”。 – CommonsWare

0

是的。在Android中开发自动GUI生成的蚂蚁任务时遇到了这个问题。 getResourcesAsStream(@CommonsWare)是一个很好的提示,但我认为它不应该应用于其中一个类,而应该应用于系统的类加载器。例如:

ClassLoader loader = ClassLoader.getSystemClassLoader(); String yourPathToFileInJar =“/ the/package/in/jar/fileInjar”; InputStream url = loader.getResourceAsStream(yourPathToFileInJar);

而请(不要@CommonsWare)避免这样的回答:不要在有人在Java-World的常见实践中特别提出问题时这样做。

+0

我很难引用png文件。 我把它放在src/my/package/pen.png中,getResourcesAsStream一直返回null。 我担心pgn文件不在jar中。我正在使用Android.mk文件,你碰巧知道我是否需要明确包含该png文件? 另外,当用eclipse和tar tv打开jar时 - 除了classes.dex和一些清单文件外我什么都看不到 –