Cuo*_*hai 7 android android-ndk android-build android-source android-framework
我想通过从另一个Android应用程序启动一个活动,在浏览器应用程序中添加一些功能.package does not exist在我制作主项目时它给了我.请注意,我看到AndroidLib已成功构建到out/target/product/generic/data/app/AndroidLib.apk
这里有两个android.mk文件:AndroidLib(一个普通的Android应用程序)
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))
Run Code Online (Sandbox Code Playgroud)
浏览器应用
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))
Run Code Online (Sandbox Code Playgroud)
然后我做:
make -j Browser
Run Code Online (Sandbox Code Playgroud)
它给了我:
packages/apps/Browser/src/com/android/browser/BrowserActivity.java:36: package com.om.AndroidLib does not exist
import com.om.AndroidLib.MainActivity;
Run Code Online (Sandbox Code Playgroud)
Bja*_*sen 13
更新
基本上你的问题是这条线:
LOCAL_REQUIRED_MODULES := SoundRecorder, AndroidLib
Run Code Online (Sandbox Code Playgroud)
告诉Android版本您的浏览器首先依赖于AndroidLib构建,但它不会以AndroidLib任何方式链接.要做到这一点,你需要:
LOCAL_JAVA_LIBRARIES := AndroidLib
Run Code Online (Sandbox Code Playgroud)
除了需要AndroidLib成为java库项目,使用构建类型:
include $(BUILD_JAVA_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
遗憾的是,java库不能包含资源.并且无法将一个应用程序链接到Android构建系统中的另一个应用程序.
我们经常解决这个问题,坦率地说这样做有点乱.但我们发现的唯一解决方法是将所有资源直接包含在使用这些资源的应用程序中.抱歉.
如何制作AndroidLib一个java库并链接到它
你的android lib应该可以构建为java库,而不是app包.所以代替:
include $(BUILD_PACKAGE)
Run Code Online (Sandbox Code Playgroud)
你应该这样做:
include $(BUILD_JAVA_LIBRARY)
Run Code Online (Sandbox Code Playgroud)
然后你将lib out/target/product/generic/system/framework/AndroidLib.jar与其他系统库一起放入.
此外,您不需要LOCAL_MODULE_NAMElib,它只适用于应用程序.剥掉那个.
您应该考虑将您LOCAL_MODULE_TAGS改为:
LOCAL_MODULE_TAGS := user
Run Code Online (Sandbox Code Playgroud)
tests表示你的lib应该仅用于测试,user表示为所有用户构建构建lib(并且隐式地也用于工程构建)
在你的应用程序中,Android.mk你应该添加一行:
LOCAL_JAVA_LIBRARIES := AndroidLib
Run Code Online (Sandbox Code Playgroud)
这样您的应用程序将AndroidLib在类路径中构建.
在您的应用程序中,AndroidManifest.xml您还需要在application标记中放置一个使用库:
<uses-library android:name="AndroidLib" />
Run Code Online (Sandbox Code Playgroud)
最后,您需要创建权限xml文件,其中包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<library name="AndroidLib"
file="/system/framework/AndroidLib.jar"/>
</permissions>
Run Code Online (Sandbox Code Playgroud)
并更新您的产品配置文件,以便将xml文件部署到目标:
PRODUCT_COPY_FILES += device/XXX/libs/AndroidLib.xml:system/etc/permissions/AndroidLib.xml
Run Code Online (Sandbox Code Playgroud)
替换device/XXX/libs/为权限xml文件的路径.
这就是我们在Android版本中添加和使用Android库的方式.我希望它有所帮助.:)
| 归档时间: |
|
| 查看次数: |
9907 次 |
| 最近记录: |