栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Android 预制第三方app到系统中

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 编译依赖第三方jar包的apk代码片段
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional

#java静态库 
LOCAL_STATIC_JAVA_LIBRARIES := 第三方Jar包1别名(任意取名)  第三方Jar包2别名(任意取名)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := MyTestApp
include $(BUILD_PACKAGE)
 

#编译依赖第三方的jar包或aar到此apk中
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := 
    contextualcards:libs/contextualcards.jar 
    lottie-2.8.1:libs/lottie-2.8.1.aar

#如下为格式:
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := 第三方Jar包1别名:第三方Jar包1路径 
				第三方aar包2别名:第三方aar包2路径 

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.2 编译一个静态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.3 编译可执行文件代码片段
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.4 编译第三方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。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/980736.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号