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架构师成长路线 -> 正文阅读

[移动开发]Android-系统预设-App,有什么难的,Android架构师成长路线

LOCAL_MODULE := < your app folder name >

签名

LOCAL_CERTIFICATE := < desired key >

指定 src 目录

LOCAL_SRC_FILES := < app apk filename >

LOCAL_MODULE_CLASS := APPS

该模块的后缀,不用定义

#LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

include $(BUILD_PREBUILT)


**解释:**

**1、`LOCAL_PATH := $(call my-dir)`**

每个 Android.mk 文件必须以定义 LOCAL_PATH 为开始,它用于在开发 tree 中查找源文件。

**2、`include $(CLEAR_VARS)`**

CLEAR_VARS 变量由 Build System 提供,并指向一个指定的 GNU Makefile,由它负责清理很多?`LOCAL_xxx`。

例如:`LOCAL_MODULE`,?`LOCAL_SRC_FILES`,?`LOCAL_STATIC_LIBRARIES`?等等,但不清理`LOCAL_PATH`。

**3、`LOCAL_MODULE_TAGS := user eng tests optional`**

可选定义,表示在什么版本情况下编译该版本,默认 optional。

*   user: 指该模块只在 user 版本下才编译
*   eng: 指该模块只在 eng 版本下才编译
*   tests: 指该模块只在 tests 版本下才编译
*   optional:指该模块在所有版本下都编译

**4、`LOCAL_MODULE`**

模块名,可不用定义,默认 =?`$(LOCAL_PACKAGE_NAME)`,不能和既有模块相同,如果该变量未设置,则使用?`LOCAL_PACKAGE_NAME`,如果再没有,就会编译失败。

**5、`LOCAL_CERTIFICATE`**

在什么情况下签名。

*   **testkey**:普通 APK,默认情况下使用。
*   **platform**:该 APK 完成一些系统的核心功能。经过对系统中存在的文件夹的访问测试,
    这种方式编译出来的 APK 所在进程的 UID 为 system,可以参见 Settings。
*   **shared**:该 APK 需要和?`home/contacts`?进程共享数据,可以参见 Launcher。
*   **media**:该 APK 是?`media/download`?系统中的一环,可以参见 Gallery。

**6、`LOCAL_MODULE_CLASS`**

指定模块的类型,可不用定义。

编译 apk 文件

LOCAL_MODULE_CLASS := APPS

编译 jar 包

LOCAL_MODULE_CLASS := JAVA_LIBRAYIES

定义动态库文件

LOCAL_MODULE_CLASS := SHARED_LIBRAYIES

编译可执行文件

LOCAL_MODULE_CLASS := EXECUTABLES


**7、include $(BUILD_PACKAGE)**

表示生成一个 apk,它可以是多种类型

*   **BUILD_PACKAGE**(既可以编apk,也可以编资源包文件,但是需要指定LOCAL_EXPORT_PACKAGE_RESOURCES:=true)
*   **BUILD_JAVA_LIBRARY**(java共享库)
*   **BUILD_STATIC_JAVA_LIBRARY**(java静态库)
*   **BUILD_EXECUTABLE**(执行文件)
*   **BUILD_SHARED_LIBRARY**(native共享库)
*   **BUILD_STATIC_LIBRARY**(native静态库)

## 完整示例

Shadowsocks.apk 对应如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE := Shadowsocks

系统签名

LOCAL_CERTIFICATE := PRESIGNED

LOCAL_SRC_FILES := $(LOCAL_MODULE).apk

LOCAL_MODULE_CLASS := APPS

#LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX)

include $(BUILD_PREBUILT)


### 更改 device.mk 文件

`AOSP/build/target/board/lunch`?的版本?`/device.mk`?文件,我编的是?`aosp_x86-eng`,所以增加或者更新?`AOSP/build/target/board/generic_x86/device.mk`:

PRODUCT_PACKAGES +=
Shadowsocks \


使用 mmm 命令来编译指定的模块:

mmm?packages/apps/Shadowsocks


编译好模块后,还要重新打包一下?`system.img`?文件:

make?snod


完成后就可以烧录了。

问题:**如何将 APK 预置到 system/priv-app 里?**

加入 priv-app 方法:在 Android.mk 中增加?`LOCAL_PRIVILEGED_MODULE := true`

## 预置有源码 APP

预置有源码 APP 比预置 APK 要麻烦很多,可能会涉及 jar 包和 so 库等。现在基本都是基于 Android Studio 的项目 MyTestProject1。

*   我们先在 AOSP/packages/apps 新建名为 MyTestProject2 的文件夹。

*   在新建 MyTestProject2/libs、MyTestProject2/res、MyTestProject2/src,分别将 MyTestProject1 下 jar 包和 so 库拷到 MyTestProject2/libs 和 MyTestProject2/libs/armeabi。

*   将 MyTestProject1/app/src/main/res 拷到 MyTestProject2/res。

*   将 MyTestProject1/app/src/main/java 下文件拷到 MyTestProject2/src 下。

### 引用第三方 jar 包

假设,我们当前目录下的 libs 有 AndroidUtil.jar包,我们想引用它,需要做两个步骤:

第一步、 声明我们 jar 包所在的目录

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES?:=?AndroidUtil:libs/AndroidUtil.jar


这行代码的意思大概可以理解成这样,声明一个变量 AndroidUtil,它的 value 是 libs/AndroidUtil.jar。

include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := AndroidUtil:libs/AndroidUtil.jar
include $(BUILD_MULTI_PREBUILT)


第二步、 引用我们声明 jar 包的变量。

include $(CLEAR_VARS)

省略其他

LOCAL_STATIC_JAVA_LIBRARIES :=
AndroidUtil

省略其他

include $(BUILD_PACKAGE)


### 引用 so 库

假设,我们当前目录下的 libs/armeabi 有 libBaiduMapSDK1.so、libBaiduMapSDK1.so,我们想引用它,有两种方法,可以在根目录 Android.mk 引用 so 库,也可以在 libs 下再建个 Android.mk 配置好 so 库,然后 include,推荐第二种方式。

libs/Android.mk

#====================================================
include ( C L E A R V A R S ) L O C A L M O D U L E T A G S : = o p t i o n a l L O C A L M O D U L E S U F F I X : = . s o L O C A L M O D U L E : = l i b B a i d u M a p S D K 1 L O C A L M O D U L E C L A S S : = S H A R E D L I B R A R I E S L O C A L S R C F I L E S : = l i b s / a r m e a b i / (CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE_SUFFIX := .so LOCAL_MODULE := libBaiduMapSDK1 LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_SRC_FILES :=libs/armeabi/ (CLEARV?ARS)LOCALM?ODULET?AGS:=optionalLOCALM?ODULES?UFFIX:=.soLOCALM?ODULE:=libBaiduMapSDK1LOCALM?ODULEC?LASS:=SHAREDL?IBRARIESLOCALS?RCF?ILES:=libs/armeabi/(LOCAL_MODULE).so
LOCAL_MULTILIB := both
include $(BUILD_PREBUILT)
#====================================================

#====================================================
include ( C L E A R V A R S ) L O C A L M O D U L E T A G S : = o p t i o n a l L O C A L M O D U L E S U F F I X : = . s o L O C A L M O D U L E : = l i b B a i d u M a p S D K 2 L O C A L M O D U L E C L A S S : = S H A R E D L I B R A R I E S L O C A L S R C F I L E S : = l i b s / a r m e a b i / (CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_MODULE_SUFFIX := .so LOCAL_MODULE := libBaiduMapSDK2 LOCAL_MODULE_CLASS := SHARED_LIBRARIES LOCAL_SRC_FILES :=libs/armeabi/ (CLEARV?ARS)LOCALM?ODULET?AGS:=optionalLOCALM?ODULES?UFFIX:=.soLOCALM?ODULE:=libBaiduMapSDK2LOCALM?ODULEC?LASS:=SHAREDL?IBRARIESLOCALS?RCF?ILES:=libs/armeabi/(LOCAL_MODULE).so
LOCAL_MULTILIB := both
include $(BUILD_PREBUILT)


引用 so 库

include $(CLEAR_VARS)

省略其他

LOCAL_JNI_SHARED_LIBRARIES :=
libBaiduMapSDK1
libBaiduMapSDK2

省略其他

include $(BUILD_PACKAGE)

##########引用第三方 so 库##########
include $(LOCAL_PATH)/libs/Android.mk


### 完整示例

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := optional

LOCAL_PACKAGE_NAME := TestName

LOCAL_CERTIFICATE := platform

引入系统资源文件

LOCAL_USE_AAPT2 := true

Java文件

LOCAL_SRC_FILES := $(call all-java-files-under, src)

资源文件,可选定义,推荐不定义

#LOCAL_RESOURCE_DIR = \

$(LOCAL_PATH)/res \

frameworks/support/v7/appcompat/res \

frameworks/support/design/res

可以使用系统 hide api

LOCAL_PRIVATE_PLATFORM_APIS := true

导入系统依赖

LOCAL_STATIC_ANDROID_LIBRARIES :=
android-support-design
android-support-v4
android-support-v7-appcompat
android-support-v7-recyclerview

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

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 6:07:13-

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