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 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 预制第三方app到系统中 -> 正文阅读

[移动开发]Android 预制第三方app到系统中

1. 前言

????????在做项目的过程中,有时候有定制需求,要把第三方apk预制到手机系统中,这样app就不能被卸载掉。比如客户需要把 酷狗音乐 搜狗输入法预制到手机中,作为默认的音乐播放器,默认输入法等需求,首先我们需要自己写Android.mk 文件把app编译进系统中。如果不清楚Android.mk的语法规则,可以先看看之前写的文章:编写Android.mk把Android studio项目编译到AOSP源码中_broadview_java的博客-CSDN博客_android.mk studio

2. 具体实现

我们可以把第三方app预制到 system/app system/priv-app product/priv-app/ product/app

等不同路径,mk文件编写如下:

? 如下是把??MyTestApp.apk? 编译到系统 system/priv-app 路径下

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := MyTestApp

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_CLASS := APPS

#直接用app的签名
LOCAL_CERTIFICATE := PRESIGNED

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)


#加上此配置,默认编译到system/priv-app/ 路径下   如果想修改为product/priv-app路径,见下面说明
LOCAL_PRIVILEGED_MODULE := true

include $(BUILD_PREBUILT)

? 如果想编译到product/priv-app 路径下,则只需要修改为

LOCAL_MODULE_PATH := $(TARGET_OUT_PRODUCT)/priv-app

3. 其他需求

3.1 编译第三方的aar包到apk中

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional


#######  引入androidasync-3.1.0  aar包  编译到apk中 ##############
LOCAL_STATIC_JAVA_AAR_LIBRARIES := androidasync-3.1.0
LOCAL_USE_AAPT2 := true
LOCAL_AAPT_FLAGS := \
    --auto-add-overlay \
    --extra-packages com.koushikdutta.async


LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := MyTestApp

include $(BUILD_PACKAGE)
 

########  引入androidasync-3.1.0 aar包  预编译 #############

#第三方aar包预编译
include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
   androidasync-3.1.0:libs/androidasync-3.1.0.aar

include $(BUILD_MULTI_PREBUILT)



# Use the following include to make our testapk.
include $(callall-makefiles-under,$(LOCAL_PATH))

说明:

1.? LOCAL_STATIC_JAVA_AAR_LIBRARIES := androidasync-3.1.0? ? 编译依赖的aar包到apk中

2.? LOCAL_AAPT_FLAGS := \
? ? --auto-add-overlay \
? ? --extra-packages com.koushikdutta.async

? ?使用aar包中的资源文件时,需要配置此参数, com.koushikdutta.async 可以在此aar包中的AndroidManifest.xml 文件中查找到。

3.? 第三方aar包预编译代码
include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
? ?androidasync-3.1.0:libs/androidasync-3.1.0.aar

include $(BUILD_MULTI_PREBUILT)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES :=?aar包别名?: aar包路径


aar包别名: 一定要与LOCAL_STATIC_JAVA_AAR_LIBRARIES里所取的别名一致,且不含.aar;
aar包路径:? ??一定要是真实的存放第三方aar包的路径, 我把aar放置到libs 文件夹下面

所以为libs/androidasync-3.1.0.aar

4.?使用BUILD_MULTI_PREBUILT 预编译

3.2?编译依赖第三方jar包的代码片段

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional

#编译依赖第三方的jar包到此apk中
LOCAL_STATIC_JAVA_LIBRARIES := 第三方Jar包1别名(任意取名)  第三方Jar包2别名(任意取名)

LOCAL_SRC_FILES := $(call all-subdir-java-files)

LOCAL_PACKAGE_NAME := MyTestApp

include $(BUILD_PACKAGE)
 


#第三方jar包预编译
include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
    contextualcards:libs/contextualcards.jar

include $(BUILD_MULTI_PREBUILT)
 
# Use the following include to make our testapk.
include $(callall-makefiles-under,$(LOCAL_PATH))

注意事项:

LOCAL_STATIC_JAVA_LIBRARIES 后面应是你的APK程序所需要的JAVA库的JAR文件名

LOCAL_STATIC_JAVA_LIBRARIES取jar库的别名,可以任意取值;


LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := jar库的别名?: jar文件路径
jar库的别名: 一定要与LOCAL_STATIC_JAVA_LIBRARIES里所取的别名一致,且不含.jar;
jar文件路径:? ??一定要是真实的存放第三方jar包的路径。

使用BUILD_MULTI_PREBUILT编译

3.3 编译一个静态java库代码片段

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Any libraries that this library depends on

LOCAL_JAVA_LIBRARIES := \
        dialer-auto-value-target \
        org.apache.http.legacy \
        ims-common \
        telephony-common \
        radio_interactor_common \
        unisoc_ims_common \
        radio_interactor_common \

# Build a static jar file.
include $(BUILD_STATIC_JAVA_LIBRARY)

LOCAL_JAVA_LIBRARIES表示:共享库是由加载器加载到内存,在运行时使用的。

用?include $(BUILD_STATIC_JAVA_LIBRARY) 表示编译静态java库

3.4?编译可执行文件代码片段

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE := CppKernelVariables

LOCAL_SRC_FILES := \
	KernelVariables.cpp \
	simple.rs

include frameworks/rs/tests/lldb/cpp/common.mk
include $(BUILD_EXECUTABLE)

用?include $(BUILD_EXECUTABLE) 来编译

3.5?编译第三方so库到APK代码片段

include $(CLEAR_VARS)  

#编译so文件
LOCAL_PREBUILT_LIBS :=libBMaptest:libs/armeabi/libBMaptest.so  

LOCAL_MODULE_TAGS := optional  

include $(BUILD_MULTI_PREBUILT)  

集成.so动态库

LOCAL_PREBUILT_LIBS指定prebuilt so的规则,格式:别名:so文件路径。注意:别名一般不可改变,特别是第三方jar包使用.so库的情况,且不含.so;so文件路径一定要是真实的存放第三方so文件的路径。 根据定义描述:所以?libBMaptest. so放在libs/armeabi 路径下。

编译用BUILD_MULTI_PREBUILT。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-06-25 18:16:18  更:2022-06-25 18:17:21 
 
开发: 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/25 3:07:14-

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