IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 预置APK到android系统中(带源码/不带源码) -> 正文阅读

[移动开发]预置APK到android系统中(带源码/不带源码)

一、如何将带源码的APK预置进系统?

1.首先将app代码放在源码中
1.1 可以放在vendor 目录下自己项目的package/app/下面
1.2 可以放在vendor/google/partner_gms/apps 或者 vendor/mtk/qcom 等
1.3 也可以直接放在 packages/apps/ 下面

2.以android studio中app工程源码为例,把工程目录下文件拷贝1.1中放置在源码的位置

?3.在目录下添加 Android.mk 文件

LOCAL_PATH := $(call my-dir)
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 := XXXX
 #apk 签名
LOCAL_CERTIFICATE := platform
#LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_SDK_VERSION =current

include $(BUILD_PACKAGE)
include $(CLEAR_VERS)
include $(call all-makefiles-under,$(LOCAL_PATH))

?

?4.添加到系统中进行编译

  • 打开文件 device/下的.mk , 将ApkTest添加到 PRODUCT_PACKAGES 里面。

    PRODUCT_PACKAGES += ApkTest

  • 重新 build 整个工程

二.将无源码的 APK 预置进系统

1.首先将apk放在源码中,参考上面 源码的apk预置系统的第一步

? ? LOCAL_PATH := $(call my-dir)
? ? include $(CLEAR_VARS)
?
? ? # Module name should match apk name to be installed
? ? LOCAL_MODULE := ApkTest
? ? LOCAL_MODULE_TAGS := optional
? ? LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
? ? LOCAL_MODULE_CLASS := APPS
? ? LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)
?
? ? LOCAL_CERTIFICATE := PRESIGNED
? ? include $(BUILD_PREBUILT)

2.添加到系统中进行编译

  • 打开文件 device/下的.mk , 将ApkTest添加到 PRODUCT_PACKAGES 里面。

    PRODUCT_PACKAGES += ApkTest

  • 重新 build 整个工程

3.需要注意的是,如果这个apk带有so文件。需要将lib/arm下的so文件按照LOCAL_PREBUILT_JNI_LIBS:= \
@lib/armeabi/libcom_iflytek_inputmethod_mmp.so
这样的格式来写。

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Module name should match apk name to be installed
LOCAL_MODULE := ApkTest
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)

三 .附加:Android.mk中的相关配置项

内置Apk的关键点在于配置编译文件,即Android.mk文件,下面介绍一部分Android.mk中的相关配置项,更多的可以去网上寻找:

  • LOCAL_PRIVILEGED_MODULE
  1. 决定编译后apk的位置,如果设置为true,则生成在/system/priv-app,如果不设置或false,则生成在/system/app。

  2. 复制代码

  • LOCAL_CERTIFICATE
  1. LOCAL_CERTIFICATE可设置的值如下:

  2. testkey 默认使用,普通的apk

  3. platform APK所在进程的UID为system,完成一些系统的核心功能

  4. shared

  5. media

  6. 复制代码

  • $(call my-dir)
  1. 获取当前文件夹的路径

  2. 复制代码

  • $(call all-java-files-under, src)
  1. 获取src目录下所有java文件

  2. 复制代码

  • $(call all-makefiles-under,local_path)
  1. 获取local_path目录下所有Make文件

  2. 复制代码

  • LOCAL_PATH
  1. LOCAL_PATH := $(call my-dir)

  2. 此变量指示源文件在开发树中所处的位置。 在这里,构建系统提供的宏函数 my-dir 将返回当前目录(Android.mk 文件本身所在的目录)的路径。

  3. 复制代码

  • CLEAR_VARS
  1. include $(CLEAR_VARS)

  2. 由构建系统提供, CLEAR_VARS 变量指向一个特殊的 GNU Makefile,后者会清除许多 LOCAL_XXX 变量,GNU Makefile 不会清除 LOCAL_PATH

  3. 复制代码

  • LOCAL_MODULE
  1. LOCAL_MODULE := ApkTest

  2. 存储您要构建的模块的名称,每个模块名称必须唯一,且不含任何空格.如果未设置,则默认使用LOCAL_PACKAGE_NAME

  3. 复制代码

  • LOCAL_PACKAGE_NAME
  1. LOCAL_PACKAGE_NAME:= ApkTest

  2. yuanma编译出来的apk名称

  3. 复制代码

  • LOCAL_MODULE_TAGS
  1. LOCAL_MODULE_TAGS := optional

  2. 指定在什么版本下才会编译该模块,可能是eng、user、debug、development、optional。

  3. 其中,optional是默认标签,指该模块在所有版本下都编译。

  4. 复制代码

  • LOCAL_MODULE_CLASS
  1. LOCAL_MODULE_CLASS := APPS

  2. 标识所编译模块放置的位置, APPS表示放置在/system/app目录下。

  3. 复制代码

  • LOCAL_SRC_FILES
  1. LOCAL_SRC_FILES := $(call all-java-files-under, src)或者

  2. LOCAL_SRC_FILES := $(LOCAL_MODULE)_$(my_src_arch).apk

  3. 源文件列表

  4. 复制代码

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-03 13:09:04  更:2021-12-03 13:10:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:41:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码