android studuo 代码在源码里编译mk脚步

本文介绍如何在Android Studio中使用mk脚本进行模块化编译,包括配置源码路径、添加依赖库、设置资源目录等关键步骤。

android studuo 代码在源码里编译mk脚步

LOCAL_PATH:= $(call my-dir)

擦除除LOCAL_PATH之外的所有变量

include $(CLEAR_VARS)

LOCAL_MAIN := .
LOCAL_MODULE_TAGS := optional

编译时引用的support包目录

support_library_root_dir := frameworks/support

#设置工程代码src目录
#LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_SRC_FILES := (callall−java−files−under,(call all-java-files-under,(callalljavafilesunder,(LOCAL_MAIN)/app/src/main/java)

#加入依赖module源文件
LOCAL_SRC_FILES += (callall−java−files−under,(call all-java-files-under,(callalljavafilesunder,(LOCAL_MAIN)/sensedriver/src/main/java)
#添加aidl文件中import的.aidl文件目录
#LOCAL_AIDL_INCLUDES := (LOCALPATH)/(LOCAL_PATH)/(LOCALPATH)/(LOCAL_MAIN)/src/main/aidl
#LOCAL_SRC_FILES += $(call all-Iaidl-files-under, $(LOCAL_MAIN)/src/main/aidl)

#COMPILE_DEVICE_VERSION := ee
COMPILE_DEVICE_VERSION := ff

#指定manifest文件
ifeq (ee,$(strip $(COMPILE_DEVICE_VERSION)))
LOCAL_MANIFEST_FILE := (LOCALMAIN)/app/src/main/AndroidManifest.xmlelseifeq(ff,(LOCAL_MAIN)/app/src/main/AndroidManifest.xml else ifeq (ff,(LOCALMAIN)/app/src/main/AndroidManifest.xmlelseifeq(ff,(strip $(COMPILE_DEVICE_VERSION)))
#LOCAL_MANIFEST_FILE := $(LOCAL_MAIN)/src/main/AndroidManifest.xml
else

endif

#设置资源res目录
LOCAL_RESOURCE_DIR :=
$(support_library_root_dir)/v7/appcompat/res
$(addprefix (LOCALPATH)/,(LOCAL_PATH)/,(LOCALPATH)/,(LOCAL_MAIN)/app/src/main/res)
#设置资源assets目录
LOCAL_ASSET_DIR := $(addprefix (LOCALPATH)/,(LOCAL_PATH)/,(LOCALPATH)/,(LOCAL_MAIN)/app/src/main/assets)

#constraint-layout-solver是constraint-layout需要的jar
LOCAL_STATIC_ANDROID_LIBRARIES :=
android-support-v7-appcompat
android-support-v4
android-support-annotations
constraint-layout-solver-1-1-0

#LOCAL_STATIC_JAVA_LIBRARIES += myframework

#依赖库aar
#LOCAL_STATIC_JAVA_AAR_LIBRARIES := constraint-layout-1-1-0

#LOCAL_STATIC_LIBRARIES := lib
#LOCAL_JNI_SHARED_LIBRARIES := libjni
#LOCAL_SHARED_LIBRARIES := libjni
#LOCAL_PREBUILT_JNI_LIBS := $(LOCAL_MAIN)/libs/arm64-v8a/lib.so \

$(LOCAL_MAIN)/libs/arm64-v8a/libso \

$(LOCAL_MAIN)/libs/armeabi-v7a/lib.so \

$(LOCAL_MAIN)/libs/armeabi-v7a/lib.so \

$(LOCAL_MAIN)/libs/x86_64/libjni.so \

$(LOCAL_MAIN)/libs/x86_64/lib.so

#LOCAL_MODULE_INCLUDE_LIBRARY := true

#重复资源自动覆盖
LOCAL_AAPT_FLAGS := --auto-add-overlay
–extra-packages android.support.v7.appcompat
#–extra-packages android.support.constraint

#注意依赖module拥有自己的package name,因此会生成自己的R文件,不能直接把res路径直接加上,需如下写法
LOCAL_AAPT_FLAGS += --auto-add-overlay -S $(addprefix (LOCALPATH)/,(LOCAL_PATH)/,(LOCALPATH)/,(LOCAL_MAIN)/src/main/res)
–auto-add-overlay -A $(addprefix (LOCALPATH)/,(LOCAL_PATH)/,(LOCALPATH)/,(LOCAL_MAIN)/src/main/assets)
–auto-add-overlay -M $(addprefix (LOCALPATH)/,(LOCAL_PATH)/,(LOCALPATH)/,(LOCAL_MAIN)/src/main/AndroidManifest.xml)
–extra-packages com.sensetime.app

#此字段编译到system/pri-app
LOCAL_PRIVILEGED_MODULE := true
#LOCAL_MODULE_PATH := KaTeX parse error: Expected 'EOF', got '#' at position 107: …REOPT := false #̲LOCAL_USE_AAPT2…(SUPPORT_CURRENT_SDK_VERSION)
#LOCAL_PRIVATE_PLATFORM_APIS := true
#LOCAL_JAVA_LANGUAGE_VERSION := 1.8
include $(BUILD_PACKAGE)

######################################################
include $(CLEAR_VARS)

构建依赖的jar

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := constraint-layout-solver-1-1-0:$(LOCAL_MAIN)/…/…/aslibs/constraint-layout-solver-1.1.0.jar

构建依赖的aar

#LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += constraint-layout-1-1-0:$(LOCAL_MAIN)/…/…/aslibs/constraint-layout-1.1.0.aar

#构建依赖的framework jar
#LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += myframework:$(LOCAL_MAIN)/libs/framework.jar

include $(BUILD_MULTI_PREBUILT)

#####################################################
include $(CLEAR_VARS)
#LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
#LOCAL_MODULE := lib
#LOCAL_SRC_FILES := $(LOCAL_MAIN)/libs/arm64-v8a/lib.so
#include $(PREBUILT_SHARED_LIBRARY)

#include $(CLEAR_VARS)
#LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
#LOCAL_MODULE := lib_sdk_c_api
#LOCAL_MODULE_TARGET_ARCH := arm64-v8a armeabi-v7a x86_64
#LOCAL_SRC_FILES := $(LOCAL_MAIN)//libs/arm64-v8a/lib.so
#include $(PREBUILT_SHARED_LIBRARY)

ifeq (arm64,$(strip (TARGETARCH)))LOCALPREBUILTLIBS:=libjnisdk:(TARGET_ARCH))) LOCAL_PREBUILT_LIBS := libjni_sdk:(TARGETARCH)))LOCALPREBUILTLIBS:=libjnisdk:(LOCAL_MAIN)/libs/arm64-v8a/libjni.so
lib_sdk_c_api:$(LOCAL_MAIN)/libs/arm64-v8a/lib.so
LOCAL_MODULE_PATH := (TARGETOUT)/lib64elseLOCALPREBUILTLIBS:=libjnsdk:(TARGET_OUT)/lib64 else LOCAL_PREBUILT_LIBS := libjn_sdk:(TARGETOUT)/lib64elseLOCALPREBUILTLIBS:=libjnsdk:(LOCAL_MAIN)/libs/armeabi-v7a/libjn.so
libsdk_c_api:$(LOCAL_MAIN)/libs/armeabi-v7a/libd.so
LOCAL_MODULE_PATH := $(TARGET_OUT)/lib
endif

LOCAL_MODULE_TAGS := optional
#LOCAL_ARM_MODE := arm
#LOCAL_MULTILIB := both
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE_TARGET_ARCH := arm64
#LOCAL_MODULE_CLASS := SHARED_LIBRARIES
#include $(PREBUILT_SHARED_LIBRARY)
#include $(BUILD_PREBUILT)
include $(BUILD_MULTI_PREBUILT)

#######################################################

Use the following include to make our test apk.

include (callall−makefiles−under,(call all-makefiles-under,(callallmakefilesunder,(LOCAL_PATH))

<think>好的,我需要帮助用户将Android Studio项目迁移到AOSP编译环境。首先,用户的问题是关于如何转换项目结构以适应AOSP的编译系统。根据之前的引用内容,用户可能遇到了依赖库的问题,比如zxing-core-1.7.jar和setupcompat相关的包找不到的情况。同时,用户提到的LOCAL_STATIC_JAVA_LIBRARIES的使用,说明需要调整构建配置文件。 首先,我需要回忆AOSP的编译系统是基于Make的,使用Android.mkAndroid.bp文件。而Android Studio项目通常使用Gradle,两者的配置方式不同。所以迁移的关键点是将Gradle的依赖和配置转换为AOSP的模块定义。 接下来,用户可能需要处理第三方库的引入。在引用中,用户尝试使用compileOnly引入zxing-core,但在AOSP中可能需要将jar包放入特定目录,并在Android.mk中通过LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES声明。此外,关于SetupCompat包缺失的问题,可能需要检查AOSP源码中是否有对应的模块,并添加依赖。 另外,资源文件和代码结构也需要调整,比如AOSP中的资源路径可能与Android Studio不同,需要确保资源文件放在正确的目录下,并在Android.mk中指定LOCAL_RESOURCE_DIR。 可能还需要处理权限和清单文件的差异,确保AndroidManifest.xml中的设置符合AOSP的要求,比如使用正确的包名和权限。 最后,用户可能需要了解如何将模块添加到AOSP的整个编译系统中,比如通过mm命令进行编译,并解决可能出现的依赖冲突或版本不一致的问题。 总结来说,迁移步骤大致包括:调整项目结构、转换构建配置、处理依赖库、整合资源和清单文件,以及解决编译时的具体错误。需要一步步引导用户完成这些步骤,并提供示例配置和常见问题的解决方法。</think>### 分步迁移指南 #### 一、项目结构调整 1. **源码目录规范** AOSP要求模块代码必须放在特定路径(如`packages/apps/YourApp`) - 将Android Studio项目的`app/src/main/java`移动至`AOSP/packages/apps/YourApp/src` - 资源文件移动到`AOSP/packages/apps/YourApp/res` 2. **删除Gradle配置** 移除所有`build.gradle`文件及`.idea`、`gradle`目录 #### 二、创建AOSP编译配置文件 1. **Android.mk示例** 在模块根目录创建`Android.mk`: ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_PACKAGE_NAME := YourApp LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res LOCAL_STATIC_JAVA_LIBRARIES := \ android-support-v7-appcompat \ zxing-core-1.7 # 对应引用[1]的jar包依赖 LOCAL_USE_AAPT2 := true LOCAL_PRIVILEGED_MODULE := true LOCAL_CERTIFICATE := platform include $(BUILD_PACKAGE) ``` [^1][^2] 2. **处理第三方依赖** 对于`zxing-core-1.7.jar`等预编译库: ```makefile # 在prebuilts/misc目录下创建对应模块 include $(CLEAR_VARS) LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := zxing-core-1.7:libs/zxing-core-1.7.jar include $(BUILD_MULTI_PREBUILT) ``` #### 三、解决依赖冲突 1. **系统级依赖声明** 若出现`com.google.android.setupcompat`包缺失错误(如引用[1]): ```makefile LOCAL_STATIC_JAVA_LIBRARIES += \ setupcompat \ setupdesign ``` 在AOSP源码中确认存在以下模块: ``` frameworks/base/packages/SetupCompatLibrary frameworks/base/packages/SetupDesignLibrary ``` 2. **资源覆盖处理** 当系统资源与应用资源冲突时,在`AndroidManifest.xml`中添加: ```xml <application android:usesNonSdkApi="true" android:appComponentFactory="androidx.core.app.CoreComponentFactory"> ``` #### 四、整合到AOSP编译系统 1. **添加模块入口** 在`AOSP/build/target/product/core.mk`中添加: ```makefile PRODUCT_PACKAGES += \ YourApp ``` 2. **编译验证** ```bash source build/envsetup.sh lunch <target> mmma packages/apps/YourApp ``` #### 五、常见问题解决 1. **R类生成失败** 检查`LOCAL_RESOURCE_DIR`是否包含所有资源目录 2. **API不兼容** 使用`@hide`API时需添加: ```makefile LOCAL_PRIVATE_PLATFORM_APIS := true ``` 3. **动态库加载失败** 将SO库放入`libs/armeabi-v7a`并在`Android.mk`声明: ```makefile LOCAL_PREBUILT_JNI_LIBS := \ @lib/armeabi-v7a/libfoo.so ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值