gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:39:06 28 4
gpt4 key购买 nike

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

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

以下是一个非常相似的问题,但仍未得到解答: Create Android apps in Eclipse sharing common library

我知道这是 Google 不想公开的内容,因此在线查找信息非常困难。

到目前为止,我已经尝试在框架目录下放置一个简单的“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

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

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

最佳答案

终于明白了。事实证明,解决方案非常简单!

将您的库放在 frameworks/base 文件夹中,并确保所有源代码都在 java 目录下,如下所示:

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

编辑位于 build/target/product/ 下的 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!

希望对您有所帮助。

关于android - 动态链接到 Android 中的共享 Java 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10657494/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com