gpt4 book ai didi

android - 在 AOSP App 中添加一个 android 项目作为库

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:37 25 4
gpt4 key购买 nike

我想通过从另一个 Android 应用程序启动 Activity 来将一些功能添加到浏览器应用程序中。当我制作主项目时,它给我 package does not exist。请注意,我看到 AndroidLib 已成功构建到 out/target/product/generic/data/app/AndroidLib.apk

这里有两个android.mk文件:AndroidLib(一个普通的Android App)

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_STATIC_JAVA_LIBRARIES := \
google-ps \
android-support-v4 \

LOCAL_SRC_FILES := \
$(call all-java-files-under, src) \
LOCAL_MODULE := AndroidLib
LOCAL_PACKAGE_NAME := AndroidLib

LOCAL_MODULE_TAGS := tests

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := google-ps:libs/google-play-services.jar

include $(BUILD_PACKAGE)

# additionally, build tests in sub-folders in a separate .apk
include $(call all-makefiles-under,$(LOCAL_PATH))

浏览器应用

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_STATIC_JAVA_LIBRARIES := \
android-common \
guava \
android-support-v13 \
android-support-v4 \

LOCAL_SRC_FILES := \
$(call all-java-files-under, src) \
src/com/android/browser/EventLogTags.logtags

LOCAL_PACKAGE_NAME := Browser

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

LOCAL_EMMA_COVERAGE_FILTER := *,-com.android.common.*


# We need the sound recorder for the Media Capture API.
LOCAL_REQUIRED_MODULES := SoundRecorder, AndroidLib

include $(BUILD_PACKAGE)
# additionally, build tests in sub-folders in a separate .apk
include $(call all-makefiles-under,$(LOCAL_PATH))

然后我做:

make -j Browser

它给了我:

packages/apps/Browser/src/com/android/browser/BrowserActivity.java:36: package com.om.AndroidLib does not exist
import com.om.AndroidLib.MainActivity;

最佳答案

更新

本质上你的问题是这条线:

LOCAL_REQUIRED_MODULES := SoundRecorder, AndroidLib

告诉 Android 构建您的浏览器依赖于首先构建的 AndroidLib,但是它不会以任何方式链接到 AndroidLib。为此,您需要:

LOCAL_JAVA_LIBRARIES := AndroidLib

除非要求 AndroidLib 是一个 java 库项目,使用构建类型:

include $(BUILD_JAVA_LIBRARY)

不幸的是,Java 库不能包含资源。并且无法在 Android 构建系统中将一个应用链接到另一个应用。

我们经常解决这个问题,坦率地说,这样做有点麻烦。但我们发现的唯一解决方法是将所有资源直接包含在使用这些资源的应用程序中。对不起。


如何使您的 AndroidLib 成为 java 库并链接到它

您的 android 库可能应该构建为 java 库,而不是应用程序包。所以不是:

include $(BUILD_PACKAGE)

你可能应该这样做:

include $(BUILD_JAVA_LIBRARY)

然后您的库将与其他系统库一起放置在 out/target/product/generic/system/framework/AndroidLib.jar 中。

此外,对于库,您不需要 LOCAL_MODULE_NAME,它仅适用于应用程序。所以去掉那个。

您可能应该考虑将 LOCAL_MODULE_TAGS 更改为:

LOCAL_MODULE_TAGS := user

tests 表示你的 lib 应该只为测试而构建,user 表示为所有用户构建构建你的 lib(并且隐含地也用于工程构建)


在你的应用 Android.mk 中,你应该添加一行:

LOCAL_JAVA_LIBRARIES := AndroidLib

这样您的应用将在类路径中使用 AndroidLib 构建。


在你的应用程序 AndroidManifest.xml 中,你还需要在 application 标签中放置一个 uses 库:

<uses-library android:name="AndroidLib" />

最后您需要创建一个权限 xml 文件,其内容如下:

<?xml version="1.0" encoding="utf-8"?>
<permissions>
<library name="AndroidLib"
file="/system/framework/AndroidLib.jar"/>
</permissions>

并更新您的产品配置文件,以便将 xml 文件部署到目标:

PRODUCT_COPY_FILES += device/XXX/libs/AndroidLib.xml:system/etc/permissions/AndroidLib.xml

device/XXX/libs/替换为权限xml文件的路径。


这就是我们在 Android 构建中添加和使用 Android 库的方式。我希望它有所帮助。 :)

关于android - 在 AOSP App 中添加一个 android 项目作为库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18371626/

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