java makefile jar包_makefile PRODUCT_BOOT_JARS 处理流程及实例
1. 含义
PRODUCT_BOOT_JARS 最终被编译到system/framework,并被添加到BOOTCLASSPATH路径;
2.1 引用makefile
PRODUCT_BOOT_JARS += xxx.jar
2.2 DEXPREOPT_BOOT_JARS_MODULES
core/dex_preopt.mk
DEXPREOPT_BOOT_JARS := $(subst $(space),:,$(PRODUCT_BOOT_JARS))
DEXPREOPT_BOOT_JARS_MODULES := $(PRODUCT_BOOT_JARS)
2.3 核心
core/dex_preopt.mk
PRODUCT_BOOTCLASSPATH := $(subst $(space),:,$(foreach m,$(DEXPREOPT_BOOT_JARS_MODULES),/system/framework/$(m).jar))
core/dex_preopt.mk
$(foreach b,$(DEXPREOPT_BOOT_JARS_MODULES),$(eval $(call _dexpreopt-boot-jar-remove-classes.dex,$(b))))
2.4 _dexpreopt-boot-jar-remove-classes.dex
core/dex_preopt.mk
# Special rules for building stripped boot jars that override java_library.mk rules
# $(1): boot jar module name
define _dexpreopt-boot-jar-remove-classes.dex
_dbj_jar_no_dex := $(DEXPREOPT_BOOT_JAR_DIR_FULL_PATH)/$(1)_nodex.jar
_dbj_src_jar := $(call intermediates-dir-for,JAVA_LIBRARIES,$(1),,COMMON)/javalib.jar
$$(_dbj_jar_no_dex) : $$(_dbj_src_jar) | $(ACP) $(AAPT)
$$(call copy-file-to-target)
ifneq ($(DEX_PREOPT_DEFAULT),nostripping)
$$(call dexpreopt-remove-classes.dex,$$@)
endif
_dbj_jar_no_dex :=
_dbj_src_jar :=
endef
注释:
先编译$$(_dbj_src_jar), 然后对$$(_dbj_jar_no_dex) 做$(ACP) $(AAPT)
2.5 AAPT
core/config.mk
AAPT := $(HOST_OUT_EXECUTABLES)/aapt$(HOST_EXECUTABLE_SUFFIX)
core/combo/HOST_windows-x86.mk
HOST_EXECUTABLE_SUFFIX := .exe
2.6 ACP
core/config.mk
ACP := $(BUILD_OUT_EXECUTABLES)/acp$(BUILD_EXECUTABLE_SUFFIX)
2.7 DEXPREOPT_BOOT_JAR_DIR_FULL_PATH
DEXPREOPT_BOOT_JAR_DIR_FULL_PATH := $(DEXPREOPT_PRODUCT_DIR_FULL_PATH)/$(DEXPREOPT_BOOT_JAR_DIR)
DEXPREOPT_PRODUCT_DIR_FULL_PATH := $(PRODUCT_OUT)/dex_bootjars
DEXPREOPT_BOOT_JAR_DIR := system/framework
2.8 copy-file-to-target
core/definitions.mk
# The -t option to acp and the -p option to cp is
# required for OSX. OSX has a ridiculous restriction
# where it's an error for a .a file's modification time
# to disagree with an internal timestamp, and this
# macro is used to install .a files (among other things).
# Copy a single file from one place to another,
# preserving permissions and overwriting any existing
# file.
# We disable the "-t" option for acp cannot handle
# high resolution timestamp correctly on file systems like ext4.
# Therefore copy-file-to-target is the same as copy-file-to-new-target.
define copy-file-to-target
@mkdir -p $(dir $@)
$(hide) $(ACP) -fp $< $@
endef
2.9 PRODUCT_BOOTCLASSPATH
core/product.mk
_product_stash_var_list := $(_product_var_list) \
PRODUCT_BOOTCLASSPATH \
...
2.10stash-product-vars
core/product.mk
#
# Stash values of the variables in _product_stash_var_list.
# $(1): Renamed prefix
#
define stash-product-vars
$(foreach v,$(_product_stash_var_list), \
$(eval $(strip $(1))_$(call rot13,$(v)):=$$($$(v))) \
)
endef
system_server jar > framework.jar
总结:
BOOTCLASSPATH中中的jar编译为boot.art和boot.oat
实战
3.1 编写Jar包
结构
fox
├── Android.mk
└── java
└── com
└── android
└── host
└── fox
└── HelloFox.java
3.1.1 Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := host-fox // 默认编译到system/framework
#LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under,java)
include $(BUILD_JAVA_LIBRARY)
3.1.2 HelloFox.java
package com.android.host.fox;
public class HelloFox {
public String say() {
return "Hello, host fox";
}
}
3.1.3 在系统makefile添加模块host-fox
# add jars
PRODUCT_PACKAGES += \
host-fox
// 添加到Android编译系统
PRODUCT_BOOT_JARS += host-fox // 添加到BOOTCLASSPATH路径
结果展示
host-fox.jpg
java makefile jar包_makefile PRODUCT_BOOT_JARS 处理流程及实例相关推荐
- java makefile jar包_java makefile学习实践(编译的javac命令写在makefile中,运行命令java写在shell脚本中)...
学习makefile教程,ubuntu中文网 1.写一个简单的java项目,不需要外部jar,用的简单的 importjava.util.ArrayList;是可以从CLASSPATH环境变量中找到的 ...
- java jar 启动项目,SpringBoot项目运行jar包启动的步骤流程解析
SpringBoot项目在开发中,方便快捷,有一点原因就是SpringBoot项目可以打jar包运行:把jar包直接扔服务器上,然后运行jar包就能访问项目接口了.下面介绍SpringBoot项目打j ...
- java bat 运行 jar文件_运行bat文件启动java的jar且不弹出DOS窗口,后台运行java的jar包...
本文主要是将java的jar包启动的cmd命令添加到bat文件来执行,且不弹出DOS窗口,也就是后台运行java的jar包. 这里以win10为例 1.新建 一个txt文件,在文件添加以下内容.其中E ...
- java执行jar中的main_浅谈java 执行jar包中的main方法
浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 ...
- Java:Java的jar包之POI的简介、安装、使用方法(基于POI将Word、Excel、PPT转换为html)之详细攻略
Java:Java的jar包之POI的简介.安装.使用方法(基于POI的转换-Word.Excel.Ppt等转html)之详细攻略 目录 POI的简介 1.基本功能 POI的安装 POI的使用方法(基 ...
- java -jar 停止_推荐:Linux启动Java程序jar包Shell脚本
每次启动Java程序jar包的时候,难道你还在手敲java -jar xxserver.jar--?边敲边想着都需要追加哪些参数? 今天就推荐给大家一个几乎通用的Shell脚本,它支持Java程序Ja ...
- java jar 源码乱码,java使用jar包时出现乱码的解决方法
java使用jar包时出现乱码的解决方法 发布时间:2020-06-17 17:06:29 来源:亿速云 阅读:105 作者:元一 jar包是什么: jar(Java Archive,Java归档文件 ...
- python调用java的jar包_python调用java的jar包报错127
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近在弄python需要调用到Java的jar包,按照网上的教程走,最后总是报错No matching overloads found for [init ...
- Java常见Jar包的用途
jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrp ...
最新文章
- mysql text index_MySQL 全文索引(fulltext index)
- Windows文件操作的直接函数调用
- RocketMQ 4.5.1 双主双从异步复制环境搭建
- 小程序上传图片到七牛云(支持多张上传,预览,删除)
- Minigui及lgui使用全解释
- ASP.NET MVC Global.cs - 应用程序事件
- python时间格式化代码_Python代码中如何将”日期时间”格式化为自己所需的样式呢?...
- 训练深度学习模型的小技巧
- 用python 类方法写好友管理系统
- Un*、Id分别突变情况下单闭环直流调速系统仿真
- 从论文pdf中复制粘贴文字时,空格变成回车的解决方法
- 大学生利用信息差赚钱的方式
- 单龙芯3A3000-7A1000PMON研究学习-(30)撸起袖子干-再来一杯代码11-内存初始化3-mc_init
- 利用pyboardCN V2播放Bad apple
- iOS音乐播放器实现后台播放锁屏界面控制
- CodeForces Round #554 Div.2
- 2017湖湘杯Writeup
- AI创业有风险,起步需谨慎!创业者从准备到失败~
- 送餐路线规划数学建模
- PhoneAccount流程解析(SIM卡管理器)拨号过程中解析PhoneAccount
热门文章
- 程序员被科大讯飞裁员:试用期三个月被开,公司连应届生都不放过
- 【十三】python面向对象之类和对象
- [域] 大量日志错误,事件ID:1058 事件ID:1030
- 【技术科普】支持H.265视频网页Web播放的EasyPlayer.js设计理念与功能计划
- vue框架中,图片应该保存在哪里?应该如何访问?
- html5微课程制作,翟猛老师《微课开发及制作-基于H5课件制作模式》
- IntelliJ IDEA 解决控制台不能显示日志
- 嵌入式系统课堂总结1
- Android Studio课堂总结05
- 基于ABP的AppUser对象扩展