Android共享库不基于JNI

4
我正在为Android应用程序开发一个库,它不使用本地代码(JNI)。我已经尝试将库作为外部jar文件提供给我的Android项目,但是这种方法不会将库内容包含在apk中,因此在模拟器或设备中运行时会抛出类未找到的错误。我还尝试将库创建为Android项目本身,这确实可以工作,但仅适用于公共静态属性(而非方法)。由于库和应用程序都位于单独的apk中,我可以看到VM注意到对库的引用并且可以读取一些属性,但是当执行对库中类的实例化尝试时,我会收到类未找到的错误,尽管我可以从中读取公共静态属性(非常令人沮丧!!)。
我意识到Davlik字节码与Java字节码不同,但我甚至难以找到有关如何解决Android中似乎非常简单的问题的好信息。我现在正在研究旧的PlatformLibrary,但我并不确信这也会起作用,因为样本已从Android网站中删除:(
所以如果你能帮助我,请给我提供帮助。如果在此之前我找到了答案,我会分享它。
viva la Android!

这里是 PlatformLibrary 的链接 http://android.git.kernel.org/?p=platform/development.git;a=tree;f=samples/PlatformLibrary;hb=cupcake - Paul Gregoire
1个回答

4
我曾尝试将库作为外部jar包提供给我的Android项目使用,但这种方法不会在apk中包含库内容,因此在模拟器或设备中运行时会抛出类找不到的错误。请将JAR文件放入libs/目录中,它将自动包含在APK中。我书中的一个示例项目展示了如何使用BeanShell JAR。此外,我在GitHub页面上以“cwac-”开头的所有GitHub存储库都是旨在通过libs/目录构建JAR以包含在Android项目中的项目。

我最近才发现这是一种按项目进行的方法,但它不允许像文本到语音库使用的那种共享方式。 - Paul Gregoire
然后尝试通过单独的APK使用远程服务。或者通过单独的APK使用内容提供程序。或者通过单独的APK广播“Intents”。或者修改固件并构建自己的设备,其中包含您自己的库。PlatformLibrary用于通过C/C++和JNI修改操作系统,这正是您问题主题中所说的不想要的。 - CommonsWare
是的,在这种情况下,PlatformLibrary对我们不起作用,我认为Intent可能是我们必须走的路。 - Paul Gregoire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接