从源构建Android - 使用共享库添加预构建应用程序

时间:2014-01-21 22:01:15

标签: android rom

我从源代码构建自己的androidrom并修改了一些东西。 但现在我不想在项目中添加预先构建的.apk, 读到我应该在/ packages / apps /中创建一个文件夹 并使用以下代码

将.apk和Android.mk添加到其中
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := <folder name>
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_CERTIFICATE := PRESIGNED
include $(BUILD_PREBUILT)

并将模块添加到我的案例中/device/sony/honami/full_honami.mk 当我现在运行早午餐时,我在一段时间后得到错误,没有针对目标 * 的规则 所以我尝试了一些改变但是对我来说没有任何作用,我找不到写有别的东西......

所以我将.apk添加到/ vendor / cm / prebuilts文件夹和* .mk,在那里我找到了其他.apks,其中复制到设备我添加了我的应用程序并运行早午餐而没有错误。

但是,当我现在启动设备上的应用程序时,它会崩溃。 通过Logcat我发现这个apk里面有一些.so文件,但它找不到它们。 这是因为我只复制了app而不是lib目录中的.so文件。但我无法找到解决问题的方法。 我现在应该提取.so文件并将其像.apk一样复制到应用程序看起来的路径吗?或者有更好的解决方案吗?

干杯 Moritz的

1 个答案:

答案 0 :(得分:2)

AOSP构建系统处理共享库的方式与Eclipse-ADT不同。

您需要从apk中提取.so并创建一个Android.mk。

要提取.so,只需解压缩apk并从libs文件夹中获取。

以下是Android.mk到libfoo.so共享库的示例:

LOCAL_PATH:= $(call my-dir)

# prebuilt shared library
include $(CLEAR_VARS)
LOCAL_MODULE := libfoo
LOCAL_SRC_FILES := libfoo.so
LOCAL_MODULE_SUFFIX := .so
LOCAL_MODULE_CLASS := SHARED_LIBRARIES
LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
LOCAL_MODULE_TAGS := optional

include $(BUILD_PREBUILT)