在Android源码中为APK编译系统权限

系统权限获取

打包为APK进行系统签名

对于 部分功能的访问需要使用到系统权限,需要 添加 android:sharedUserId="android.uid.system" 权限

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 package="com.example.RBTest"
 coreApp="true"
 android:sharedUserId="android.uid.system">
  • app编译成 可 安装的 APP
  • 编译成功之后,将app 的后缀名 修改为 rar 根据如下操作 删除对应签名文件 (不删除也可,此处 重新 签名进行覆盖)
  • 删除完成之后 将文件后缀名改为 app

创建app文件夹 并开始书写 Android.mk 文件

  • 修改LOCAL_MODULE 名称为自己的名称
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := Factorytest
LOCAL_MODULE_CLASS := APPS
LOCAL_MODULE_TAGS := optional
LOCAL_BUILT_MODULE_STEM := package.apk
LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
LOCAL_DEX_PREOPT := false
LOCAL_CERTIFICATE := platform
LOCAL_PRODUCT_MODULE := true
#LOCAL_PRIVILEGED_MODULE := true
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
#LOCAL_REQUIRED_MODULES :=
#LOCAL_PREBUILT_JNI_LIBS :=
include $(BUILD_PREBUILT)

  • 放入文件夹 vendor/rockchip/common/apps/Factorytest
  • 使用mm 执行 编译
build/envsetup.sh # 加载环境
lunch # 配置版本
cd vendor/rockchip/common/apps/Factorytest # 进入 文件放入的目录
mm -j$(nproc) # 进行编译
  • 编译结果如下

  • 使用 ADB 向主板中 进行安装即可 (如果有相同包名程序已经安装了,记得对原有包名的程序进行删除)。

Android.mk 详解


# mk文件必须由Local_PATH开始,用,用于在开发系统源码tree中查找源文件,宏my-dir由Build Systemt提供,包括Android.mk的目录路径
LOCAL_PATH := $(call my-dir)
# CLEAR_VARS 变量是编译系统
include $(CLEAR_VARS)
 #这个主要用于是 eng、user还是 userdebug 版本参与编译; optional 值所有版本都参与编译
LOCAL_MODULE_TAGS := optional
 #编译的java文件文件路径
LOCAL_SRC_FILES := $(call all-java-files-under, app/src/main/java)
 #需要编译的 AndroidManifest.xml 文件
LOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml
 #编译的资源文件文件路径
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/app/src/main/res
 #编译出的apk的名称
LOCAL_PACKAGE_NAME := LinuxTest
 # 使用SDK中隐藏的API参与编译 LOCAL_SDK_VERSION 和 LOCAL_PRIVATE_PLATFORM_APIS 两者仅仅定义一个即可
ifneq ($(PLATFORM_VERSION),8.1.0)
LOCAL_PRIVATE_PLATFORM_APIS := true
endif
# 使用原签名
#LOCAL_CERTIFICATE := PRESIGNED
 #apk 签名使用系统签名
LOCAL_CERTIFICATE := platform
 # 设置参与编译SDK版本,(若是在Android.mk钟添加该选项,则编译时会忽略源码隐藏的API,故在使用源码hide api后会导致编译失败)
# LOCAL_SDK_VERSION := current
# 添加依赖的库,并将依赖库加入到 当前目录下 
LOCAL_JAVA_LIBRARIES := javax.obex
LOCAL_STATIC_JAVA_LIBRARIES += user_mode
LOCAL_STATIC_JAVA_LIBRARIES += apache
LOCAL_DEX_PREOPT := false
LOCAL_STATIC_ANDROID_LIBRARIES := \
 android-support-v4 \
 android-support-v7-recyclerview \
 android-support-v7-preference \
 android-support-v7-appcompat \
 android-support-v14-preference \
 android-support-v17-preference-leanback \
 android-support-v17-leanback \
 android-arch-lifecycle-extensions
 
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := user_mode:user_mode.jar \
	apache:org.apache.http.legacy.jar
 
include $(BUILD_PACKAGE)
include $(CLEAR_VERS)
include $(call all-makefiles-under,$(LOCAL_PATH))
作者:瓶子的跋涉原文地址:https://www.cnblogs.com/foryouos/p/18734799

%s 个评论

要回复文章请先登录注册