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 处理流程及实例相关推荐

  1. java makefile jar包_java makefile学习实践(编译的javac命令写在makefile中,运行命令java写在shell脚本中)...

    学习makefile教程,ubuntu中文网 1.写一个简单的java项目,不需要外部jar,用的简单的 importjava.util.ArrayList;是可以从CLASSPATH环境变量中找到的 ...

  2. java jar 启动项目,SpringBoot项目运行jar包启动的步骤流程解析

    SpringBoot项目在开发中,方便快捷,有一点原因就是SpringBoot项目可以打jar包运行:把jar包直接扔服务器上,然后运行jar包就能访问项目接口了.下面介绍SpringBoot项目打j ...

  3. java bat 运行 jar文件_运行bat文件启动java的jar且不弹出DOS窗口,后台运行java的jar包...

    本文主要是将java的jar包启动的cmd命令添加到bat文件来执行,且不弹出DOS窗口,也就是后台运行java的jar包. 这里以win10为例 1.新建 一个txt文件,在文件添加以下内容.其中E ...

  4. java执行jar中的main_浅谈java 执行jar包中的main方法

    浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 ...

  5. Java:Java的jar包之POI的简介、安装、使用方法(基于POI将Word、Excel、PPT转换为html)之详细攻略

    Java:Java的jar包之POI的简介.安装.使用方法(基于POI的转换-Word.Excel.Ppt等转html)之详细攻略 目录 POI的简介 1.基本功能 POI的安装 POI的使用方法(基 ...

  6. java -jar 停止_推荐:Linux启动Java程序jar包Shell脚本

    每次启动Java程序jar包的时候,难道你还在手敲java -jar xxserver.jar--?边敲边想着都需要追加哪些参数? 今天就推荐给大家一个几乎通用的Shell脚本,它支持Java程序Ja ...

  7. java jar 源码乱码,java使用jar包时出现乱码的解决方法

    java使用jar包时出现乱码的解决方法 发布时间:2020-06-17 17:06:29 来源:亿速云 阅读:105 作者:元一 jar包是什么: jar(Java Archive,Java归档文件 ...

  8. python调用java的jar包_python调用java的jar包报错127

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 最近在弄python需要调用到Java的jar包,按照网上的教程走,最后总是报错No matching overloads found for [init ...

  9. Java常见Jar包的用途

    jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrp ...

最新文章

  1. mysql text index_MySQL 全文索引(fulltext index)
  2. Windows文件操作的直接函数调用
  3. RocketMQ 4.5.1 双主双从异步复制环境搭建
  4. 小程序上传图片到七牛云(支持多张上传,预览,删除)
  5. Minigui及lgui使用全解释
  6. ASP.NET MVC Global.cs - 应用程序事件
  7. python时间格式化代码_Python代码中如何将”日期时间”格式化为自己所需的样式呢?...
  8. 训练深度学习模型的小技巧
  9. 用python 类方法写好友管理系统
  10. Un*、Id分别突变情况下单闭环直流调速系统仿真
  11. 从论文pdf中复制粘贴文字时,空格变成回车的解决方法
  12. 大学生利用信息差赚钱的方式
  13. 单龙芯3A3000-7A1000PMON研究学习-(30)撸起袖子干-再来一杯代码11-内存初始化3-mc_init
  14. 利用pyboardCN V2播放Bad apple
  15. iOS音乐播放器实现后台播放锁屏界面控制
  16. CodeForces Round #554 Div.2
  17. 2017湖湘杯Writeup
  18. AI创业有风险,起步需谨慎!创业者从准备到失败~
  19. 送餐路线规划数学建模
  20. PhoneAccount流程解析(SIM卡管理器)拨号过程中解析PhoneAccount

热门文章

  1. 程序员被科大讯飞裁员:试用期三个月被开,公司连应届生都不放过
  2. 【十三】python面向对象之类和对象
  3. [域] 大量日志错误,事件ID:1058 事件ID:1030
  4. 【技术科普】支持H.265视频网页Web播放的EasyPlayer.js设计理念与功能计划
  5. vue框架中,图片应该保存在哪里?应该如何访问?
  6. html5微课程制作,翟猛老师《微课开发及制作-基于H5课件制作模式》
  7. IntelliJ IDEA 解决控制台不能显示日志
  8. 嵌入式系统课堂总结1
  9. Android Studio课堂总结05
  10. 基于ABP的AppUser对象扩展