如何将带有Android Room的应用程序添加为使用makefile编译的系统应用程序?

问题描述

尝试安装一个简单的应用程序作为AOSP中的系统应用程序,该应用程序使用Android Room构建数据库。坚持要在Android.mk生成文件中包含什么。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-java-files-under,src)
LOCAL_RESOURCE_DIR := /home/<username>/WORKING_DIRECTORY/packages/apps/appname/res
LOCAL_PROGUARD_ENABLED := disabled
LOCAL_MODULE_TAGS := optional
LOCAL_USE_AAPT2 := true
LOCAL_STATIC_JAVA_LIBRARIES := \
    android-common 

LOCAL_STATIC_ANDROID_LIBRARIES := \
    androidx.annotation_annotation \
    androidx.legacy_legacy-support-core-ui \
    androidx.appcompat_appcompat \
    androidx.core_core \
    androidx.recyclerview_recyclerview \
    androidx.room_room-common \
    androidx.room_room-migration \
    androidx.room_room-runtime \
    androidx.room_room-testing \
    android-support-annotations \
    androidx.cursoradapter_cursoradapter \
    androidx.sqlite_sqlite \
    androidx.sqlite_sqlite-framework \
    androidx.lifecycle_lifecycle-common \
    androidx.lifecycle_lifecycle-common-java8 \
    androidx.lifecycle_lifecycle-runtime \
    androidx.lifecycle_lifecycle-service 

LOCAL_ANNOTATION_PROCESSOR_CLASSES := \
    androidx.room.RoomProcessor

LOCAL_PACKAGE_NAME := com.app.appname
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true

include $(BUILD_PACKAGE)

但是,在“ make -j4”之后运行仿真器时,会出现错误-

E AndroidRuntime:java.lang.RuntimeException:找不到com.app.appname.RoleManagerDB的实现。 RoleManagerDB_Impl不存在

E AndroidRuntime:位于com.app.appname.RoleManagerDB.getDatabase(RoleManagerDB.java:27) E AndroidRuntime:位于com.app.appname.MainActivity.lambda $ onCreate $ 0 $ MainActivity(MainActivity.java:28)

E AndroidRuntime:位于com.app.appname。-$$ Lambda $ MainActivity $ xxx.run(未知来源:4) W ActivityTaskManager:强制完成活动com.app.appname / .MainActivity

我的应用程序可以在Android Studio上编译并顺利运行,那么makefile中缺少什么?

我的猜测是我似乎无法翻译gradle行:

annotationProcessor“ androidx.room:room-compiler:$room_version”

与其等效的makefile。任何帮助深表感谢!

解决方法

我也很难找到有关这方面的信息。

Android 10 蓝牙应用使用 Room,AnnotationProcessor 在其 makefile (https://cs.android.com/android/platform/superproject/+/android-10.0.0_r30:packages/apps/Bluetooth/Android.mk) 中配置

在我的模块中,我添加了:

Requirement already satisfied: gdal in /home/ec2-user/anaconda3/envs/tutorial_env/lib/python3.8/site-packages (3.2.1)

我还添加了一个新模块:

include $(CLEAR_VARS)

...

LOCAL_ANNOTATION_PROCESSORS := annotation
LOCAL_ANNOTATION_PROCESSORS += room-common
LOCAL_ANNOTATION_PROCESSORS += room-compiler
LOCAL_ANNOTATION_PROCESSORS += room-migration
LOCAL_ANNOTATION_PROCESSORS += s-antlr4         # a later version of antlr4 is already on the classpath,be we want this version
LOCAL_ANNOTATION_PROCESSORS += apache-commons-codec
LOCAL_ANNOTATION_PROCESSORS += auto-common
LOCAL_ANNOTATION_PROCESSORS += s-javapoet       #the name javapoet is already defined - prefix for uniqueness
LOCAL_ANNOTATION_PROCESSORS += kotlin-metadata
LOCAL_ANNOTATION_PROCESSORS += sqlite-jdbc
LOCAL_ANNOTATION_PROCESSORS += jetbrain-annotations
LOCAL_ANNOTATION_PROCESSORS += guava-21.0
LOCAL_ANNOTATION_PROCESSORS += kotlin-stdlib

LOCAL_ANNOTATION_PROCESSOR_CLASSES := androidx.room.RoomProcessor


...

include $(BUILD_PACKAGE)

我一直使用设备上蓝牙使用的库版本 - 一旦我开始升级库,我就遇到了依赖项冲突。