[ROM]预制三方apk 自动提取so

    科技2026-02-15  20

    android 集成三方带so的apk到system/app或者system/priv-app目录时,要把so提取出来才能正常运行。

    网上找的mk脚本都是要手动把apk的so解压出来。

    这样会导致预制三方apk的时候特别麻烦,常常忘记解压新版本的so,可能导致隐藏的坑。因此自己写了一个自动提取so的mk模板。

    集成时,只需要把apk和mk放入同一目录即可。

    这里有个副作用,就是会在当前目录产生一个lib目录。 新增一个.gitignore文件,防止git跟踪自动提取出来的lib目录。

    mk文件内容:

    LOCAL_PATH := $(call my-dir) APK_NAME_FULL :=$(shell cd $(LOCAL_PATH); ls -A | grep apk) APK_NAME :=$(shell echo $(APK_NAME_FULL) | sed 's/.apk//g') $(warning --------------fullName=$(APK_NAME_FULL)---------------------name=$(APK_NAME)) define get-all-libraries-module-name-in-subdirs $(sort $(shell cd $(LOCAL_PATH) ; rm -rf lib >/dev/null ; unzip $(APK_NAME_FULL) 'lib/*.so' -d . >/dev/null ; find -L $(1) -name "*.so")) endef ALL_LIBRARIES_MODULE_NAME := $(call get-all-libraries-module-name-in-subdirs, lib/armeabi-v7a) $(warning ALL_LIBRARIES_MODULE_NAME:--- $(ALL_LIBRARIES_MODULE_NAME) ) #integrate the apk include $(CLEAR_VARS) LOCAL_MODULE := XXXX LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := APPS LOCAL_CERTIFICATE := PRESIGNED LOCAL_MODULE_SUFFIX := .apk LOCAL_SRC_FILES := $(APK_NAME_FULL) #LOCAL_MULTILIB := 64 LOCAL_MODULE_PATH := $(TARGET_OUT_SYSTEM_APPS) LOCAL_PREBUILT_JNI_LIBS := $(ALL_LIBRARIES_MODULE_NAME) include $(BUILD_PREBUILT)

    .gitignore文件内容:

    lib/
    Processed: 0.024, SQL: 9