动态链接到 Android 中的共享 Java 库



我正在尝试将多个Android"服务"使用的Java库分离为动态或共享库,该库可以由这些独立服务加载,而无需将库包含在每个服务的APK中。

我知道有不同的方法可以做到这一点,比如创建Android服务或使用DexLoader和Reflection,但我试图避免更改库的来源。相反,我正在尝试构建它并将其安装在我的设备上(本质上是扩展提供的 android API(。

以下是一个非常相似的问题,但仍未得到解答:在 Eclipse 共享公共库中创建 Android 应用程序

我知道这是谷歌不想透露的事情,所以在网上查找信息非常困难。

到目前为止,我已经尝试在框架目录下放置一个简单的"Hello World"程序并构建它,它成功地为我的程序创建了一个 jar。然后我在 product/core.mk 中添加了我的包,此外还在 api/10 下添加了我的包定义.xml之后我运行了"make sdk",这导致了以下错误消息:

******************************
You have tried to change the API from what has been previously released in
an SDK.  Please fix the errors listed above.
******************************
make: *** [out/target/common/obj/PACKAGING/checkapi-last-timestamp] Error 38

作为一种解决方法,我将我的包添加到 out 目录内的"public_api.xml"文件中,该文件是在构建过程中以某种方式动态创建的。使用此解决方法,SDK 的构建没有错误(尽管如果我再次清理,我将不得不再次修改public_api.xml,因为它会因清理而被删除(。但是,当我尝试在任何地方导入和使用我的包时,它仍然说我的包"不存在">

任何帮助将不胜感激!谢谢!

终于想通了。解决方案非常简单!

将库放在框架/基本文件夹中,并确保所有源代码都在java目录下,如下所示:

../frameworks/base/HelloWorld/java/<source files and folders>

编辑位于构建/目标/产品/core.mk 文件,以将您的包包含在列表中。这会将 HelloWorld 库添加到框架中:

PRODUCT_PACKAGES := 
    bouncycastle 
    :
    :
    DefaultContainerService 
    Bugreport 
    HelloWorld

编辑位于 build/core/pathmap.mk 文件,以将您的目录包含在列表中。这会将 HelloWorld 库添加到 android 中.jar

FRAMEWORKS_BASE_SUBDIRS := 
    $(addsuffix /java, 
        core 
        graphics 
        location 
        media 
        opengl 
        sax 
        telephony 
        wifi 
        vpn 
        keystore 
        voip 
        HelloWorld 
     )

重建 android,它不应该抱怨并将您的库添加到 framework.jar

我希望这有所帮助。

相关内容

  • 没有找到相关文章

最新更新