增加一个Android项目在AOSP应用程序库 [英] Add one android project as a library in AOSP App

查看:988
本文介绍了增加一个Android项目在AOSP应用程序库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想通过添加一些功能集成到浏览器应用程序从其他Android应用程序启动的活动。它给了我包不存在,而我提出的主要项目。请注意,我看到AndroidLib成功建设成为输出/目标/产品/通用/数据/应用/ AndroidLib.apk

下面是两个android.mk文件: AndroidLib(一个正常的Andr​​oid应用程序)

  LOCAL_PATH:= $(叫我-DIR)
包括$(CLEAR_VARS)

LOCAL_STATIC_JAVA_LIBRARIES:= \
        谷歌-PS \
        Android的支持-V4 \

LOCAL_SRC_FILES:= \
        $(呼叫全Java档案-下,SRC)\
LOCAL_MODULE:= AndroidLib
LOCAL_PACKAGE_NAME:= AndroidLib

LOCAL_MODULE_TAGS:=测试

LOCAL_ preBUILT_STATIC_JAVA_LIBRARIES:=谷歌-PS:库/谷歌播放services.jar

包括$(BUILD_PACKAGE)

#附加地,在一个单独的apk建立测试在子文件夹
包括$(呼叫全的makefile-下,$(LOCAL_PATH))
 

浏览器应用程序

  LOCAL_PATH:= $(叫我-DIR)
包括$(CLEAR_VARS)

LOCAL_MODULE_TAGS:=可选

LOCAL_STATIC_JAVA_LIBRARIES:= \
        Android的共同\
        番石榴\
        Android的支持,V13 \
        Android的支持-V4 \

LOCAL_SRC_FILES:= \
        $(呼叫全Java档案-下,SRC)\
        SRC / COM /安卓/浏览器/ E​​ventLogTags.logtags

LOCAL_PACKAGE_NAME:=浏览器

LOCAL_PROGUARD_FLAG_FILES:= proguard.flags

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


#我们需要录音机的媒体捕获API。
LOCAL_REQUIRED_MODULES:= SoundRecorder,AndroidLib

包括$(BUILD_PACKAGE)
#附加地,在一个单独的apk建立测试在子文件夹
包括$(呼叫全的makefile-下,$(LOCAL_PATH))
 

然后我做的:

 使-j浏览器
 

这给了我:

 包/应用程序/浏览器/ src目录/ COM /安卓/浏览器/ BrowserActivity.java:36:包com.om.AndroidLib不存在
进口com.om.AndroidLib.MainActivity;
 

解决方案

更新

从本质上讲你的问题是,该行:

  LOCAL_REQUIRED_MODULES:= SoundRecorder,AndroidLib
 

讲述了Android版本,你的浏览器依赖于 AndroidLib 正在兴建第一,但它不会被链接到 AndroidLib 以任何方式。要做到这一点,你需要:

  LOCAL_JAVA_LIBRARIES:= AndroidLib
 

除要求 AndroidLib 是一个Java库项目,用构件类型:

 包括$(BUILD_JAVA_LIBRARY)
 

和Java库不能包含资源,很遗憾。而且也没有办法在Android构建系统一个应用程序链接到另一个应用程序。

我们正在努力解决这个问题频发,这是坦率地说有点乱来这样做。但是,我们已经找到了唯一的解决方法是直接包含的所有资源在使用这些资源的应用程序。对不起。


如何让你的 AndroidLib 的Java库,并链接到它

您的Andr​​oid LIB可能应该建成一个Java库,而不是作为一个应用程序包。 因此,而不是:

 包括$(BUILD_PACKAGE)
 

您也许应该做的:

 包括$(BUILD_JAVA_LIBRARY)
 

然后,你的lib将被放置在输出/目标/产品/通用/系统/框架/ AndroidLib.jar 连同其他系统库。

另外,你并不需要一个 LOCAL_MODULE_NAME 为一个lib,它仅适用于一个应用程序。因此剥离这一点。

和你或许应该考虑改变你的 LOCAL_MODULE_TAGS 来:

  LOCAL_MODULE_TAGS:=用户
 

测试表示lib目录应该只用于测试建,用户说要建立你的LIB所有用户构建(及隐含也为工程建立)


在你的应用程序 Android.mk 你应该再添加一行:

  LOCAL_JAVA_LIBRARIES:= AndroidLib
 

这样您的应用程序将与 AndroidLib 在类路径来构建。


在你的应用程序的Andr​​oidManifest.xml 你也需要把使用在应用程序标签库:

 <使用库机器人:名称=AndroidLib/>
 


和最后你需要创建一个权限的XML文件,包含以下内容:

 < XML版本=1.0编码=UTF-8&GT?;
<权限>
    <库名=AndroidLib
            文件=/系统/框架/ AndroidLib.jar/>
< /权限>
 

和更新你的产品配置文件,XML文件将被部署到目标:

  PRODUCT_C​​OPY_FILES + =设备/ XXX /库/ AndroidLib.xml:系统的/ etc /许可/ AndroidLib.xml
 

替换设备/ XXX /库/ 的路径权限xml文件。


这是我们如何添加和使用一个Android库在我们的Andr​​oid版本。我希望它能帮助。 :)

I want to add some features into Browser app by start an activity from another android application. It gives me package does not exist while I make the Main Project. Notice that I see the AndroidLib is built successfully into an out/target/product/generic/data/app/AndroidLib.apk

Here are two android.mk files: AndroidLib(a normal 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))

Browser App

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))

Then I do:

make -j Browser

It gives me:

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

解决方案

Update

Essentially your problem is that the line:

LOCAL_REQUIRED_MODULES := SoundRecorder, AndroidLib

Tells the Android build that your Browser depends on AndroidLib being built first, however it will not be linked to AndroidLib in any way. To do that you need:

LOCAL_JAVA_LIBRARIES := AndroidLib

Except that requires the AndroidLib to be a java library project, using the build type:

include $(BUILD_JAVA_LIBRARY)

And java libraries cannot include resources, unfortunately. And there is no way to link one app to another app in the Android build system.

We are working around that issue frequently, and it is frankly a bit of a mess to do so. But the only workaround we have found is to include all the resources directly in the apps that use those resources. Sorry.


How to make your AndroidLib a java library and link to it

Your android lib should probably be built as a java library, and not as a app package. So instead of:

include $(BUILD_PACKAGE)

You should probably do:

include $(BUILD_JAVA_LIBRARY)

Then you lib will be placed in out/target/product/generic/system/framework/AndroidLib.jar along with the other system libs.

Also you do not need a LOCAL_MODULE_NAME for a lib, it is only applicable for an app. So strip that.

And you should probably consider changing your LOCAL_MODULE_TAGS to:

LOCAL_MODULE_TAGS := user

tests indicates that you lib should only be built for testing, user says to build you lib for all user builds (and implicitly also for engineering builds)


In you app Android.mk you should then add a line:

LOCAL_JAVA_LIBRARIES := AndroidLib

Such that your app will be built with AndroidLib in the classpath.


In you apps AndroidManifest.xml you also need to put a uses library in the application tag:

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


And last you need to create a permissions xml file, with the following content:

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

And update your product configuration file such that the xml file will be deployed to target:

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

Replace device/XXX/libs/ with the path to the permissions xml file.


This is how we add and use an Android library in our Android builds. I hope it helps. :)

这篇关于增加一个Android项目在AOSP应用程序库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆