带有源码的apk预置到系统

本文介绍如何将带有源码的APK预置到Android系统中,包括创建新文件夹、拷贝必要文件、编写Android.mk文件等内容,并提供无源码APK的预置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

带有源码的apk预置到系统

如何将android stuido 下的android代码内置到 android源码中去呢?

  • 在package/apps/下需要预置的APK的名字创建爱你一个新文件夹。 例如创建的应用名称是TopActivity
  • 将在android studio下的TopActivity的\app\src\main目录下的 java res AndroidMainfest.xml文件拷贝到 创建的目录下
  • 在TopActivity下创建 android 下创建Android.mk 文件
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS:=optional
LOCAL_STATIC_JAVA_LIBRARIES:=android-support-v4
LOCAL_SRC_FILES := \
$(call all-java-files-under, java) 
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_PACKAGE_NAME := TopActivity
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
include $(BUILD_PACKAGE) 
  • TopActivity 应用需要android-support-v4的jar包,因此需要使用LOCAL_STATIC_JAVA_LIBRARIES 指定一些
    • LOCAL_CERTIFICATE := platform 是系统的平台签名
    • LOCAL_PRIVILEGED_MODULE := true 表示应用需要系统的权限
    • 在package/apps/TopActivity/下 mmm .
    • 在android源码的目录下 make snod 打包

带有jni文件的app

  • 需要在 java res 下建立jni的文件目录
  • 在目录下新建Android.mk
LOCAL_PATH:$(call my-dir) 
#include $(CLEAR_VARS)
LOCAL_SHARED_LIBRARIES :=liblog libc
LOCAL_PRELINK_MODULE:=false
LOCAL_C_INCLUDES:=$(JNI_H_INCLUDE)
LOCAL_SRC_FILES: = \
         hardcontrol.cpp
LOCAL_MODULE:=libhardcontrol
include $(BUILD_SHARED_LIBRARY)
  • 在源码的目录下新建的Android.mk
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS:=optional
LOCAL_SRC_FILES := \
        $(call all-java-files-under, java) 
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_PACKAGE_NAME := LEDdemo
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
LOCAL_JNI_SHARED_LIBRARIES :=libhardcontrol
LOCAL_REQUIRED-MODULED:= libhardcontrol
include $(BUILD_PACKAGE) 

此时需要指出JNI动态库

编译记录

Install: out/target/product/tiny4412/system/priv-app/LEDdemo/LEDdemo.apk
mkdir -p out/target/product/tiny4412/system/priv-app/LEDdemo/lib/arm  ;ln -sf /system/lib/libhardcontrol.so out/target/product/tiny4412/system/priv-app/LEDdemo/lib/arm/libhardcontrol.so

无源码的apk内置android系统

  • 内置讯飞输入法
  • 将官网下载的讯飞输入法的apk明明为 FlyIME.apk
  • 在package/apps/下创建FlyIME文件夹,在创建apps

目录:/packages/apps/FlyIME/apps

├── Android.mk
└── FlyIME.apk

创建的Android.mk的内容为

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := FlyIME
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_PREBUILT_JNI_LIBS:=                   \
@lib/armeabi/libcom_iflytek_inputmethod_mmp.so \
@lib/armeabi/libdexopt.so  \
@lib/armeabi/libmsc-v8.so  \
@lib/armeabi/libNativeCrashCollect.so \
@lib/armeabi/libsmartaiwrite-jni-v22.so \
@lib/armeabi/libvadLib-v5.so \
@lib/armeabi/libwatchdog.so 
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_PRIVILEGED_MODULE := true
include $(BUILD_PREBUILT)
  • 需要注意的是,如果这个apk带有so文件。需要将lib/arm下的so文件按照LOCAL_PREBUILT_JNI_LIBS:= \
    @lib/armeabi/libcom_iflytek_inputmethod_mmp.so
    这样的格式来写。

    参考链接

    android内置第三方apk android 内置APK

<think>嗯,用户想知道如何在Android 13中预置没有源码APK系统里。我之前看过一些资料,记得Android系统有不同的预置目录,比如system/app、system/priv-app这些地方。不过不同版本的Android可能有些变化,特别是权限方面,可能需要特别注意。 首先,用户提到的是Android 13,所以需要确认这个版本的预置方法是否有变化。根据之前的引用,比如引用[1]里提到testkey、platform等不同的签名,可能APK需要对应的签名才能被系统正确识别。而引用[2]和[3]则提到了具体的目录结构和步骤,比如在packages/apps下创建目录,放置APK和必要的.mk文件。 然后,用户的情况是没有源码,所以可能需要直接将APK和可能的.so文件放到指定位置。引用[3]里提到so文件的情况,这时候可能需要将lib目录下的对应架构的so文件放到apk的同级目录下,比如lib/arm64-v8a。这可能涉及到在Android.mk中使用LOCAL_PREBUILT_JNI_LIBS来指定这些so文件。 另外,权限方面,Android 13可能对系统应用的权限有更严格的要求,特别是从Android 10开始的动态分区,可能需要调整编译脚本,确保APK被打包到正确的分区,比如system分区。同时,预置系统应用可能需要特定的签名,比如platform签名,而不仅仅是testkey。 还要考虑APK的安装位置,比如是预置为不可卸载还是可卸载。system/app下的应用通常是不可卸载的,而product/app或vendor/app可能允许卸载。用户可能希望应用成为系统核心部分,所以会选择system/priv-app目录,这需要更高的权限和对应的签名。 最后,编译整个系统镜像并刷机测试是必要的步骤,可能需要使用make命令来编译,并确保APK被正确包含进去。同时,处理兼容性问题,比如64位库的要求,Android 13可能强制要求所有应用支持64位架构,所以需要确认APK的so文件是否符合要求。 总结步骤应该是:准备APK和so文件,创建目录结构,编写Android.mk或Android.bp文件,处理签名,配置编译脚本,然后编译并测试。可能还需要处理权限和兼容性问题,确保APK系统中有正确的UID和权限。</think>### 如何在 Android 13 中预置源码APK 文件 #### **步骤 1:选择预置目录** Android 系统预置 APK 的常用目录包括: - **`system/app/`**:普通系统应用(不可卸载) - **`system/priv-app/`**:高权限系统应用(需 `platform` 签名) - **`product/app/`** 或 **`vendor/app/`**:厂商定制应用(可卸载) 根据需求选择目录。例如,若需不可卸载且无需高权限,可将 APK 放入 `system/app/CarNavi/`(需新建同名文件夹)[^3]。 --- #### **步骤 2:配置编译文件** 在 APK 同级目录下创建 **`Android.mk`** 或 **`Android.bp`**(推荐使用 `Soong` 构建系统): ```makefile # Android.mk 示例 LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := CarNavi LOCAL_MODULE_CLASS := APPS LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(LOCAL_MODULE).apk LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) LOCAL_CERTIFICATE := platform # 使用 platform 签名 LOCAL_PRIVILEGED_MODULE := true # 若需高权限 LOCAL_MODULE_PATH := $(TARGET_OUT_SYSTEM_APPS) # 输出到 system/app/ LOCAL_PREBUILT_JNI_LIBS := \ # 若含 so 文件 lib/arm64-v8a/libexample.so include $(BUILD_PREBUILT) ``` --- #### **步骤 3:处理签名** - **普通应用**:默认使用 `testkey` 签名(无需额外配置)。 - **系统核心功能**:需 `platform` 签名(通过 `LOCAL_CERTIFICATE := platform` 指定)[^1]。 - **共享数据或高权限**:可能需要 `shared` 或 `media` 签名。 --- #### **步骤 4:集成到系统编译** 1. 在源码的 **`device/<厂商>/<产品>/<版本>.mk`** 文件中添加模块: ```makefile PRODUCT_PACKAGES += CarNavi ``` 2. 执行全量编译: ```bash make clean && make -j8 ``` --- #### **步骤 5:验证与调试** 1. **刷机后检查**: ```bash adb shell pm list packages | grep "CarNavi" ``` 2. **权限问题**:若应用无法运行,检查 `AndroidManifest.xml` 是否声明系统权限(如 `android:sharedUserId="android.uid.system"`)[^1]。 --- #### **注意事项** 1. **Android 13 适配**: - 需支持 **`Treble`** 架构,优先使用 `Android.bp` 替代 `Android.mk`。 - 若 APK 依赖 `so` 文件,需按架构分离(如 `lib/arm64-v8a/`)[^3]。 2. **安全限制**:从 Android 10 开始,非特权应用无法直接访问 `/system` 分区,建议使用动态分区或 `overlay` 机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值