android sdk 编译--如何将源代码加入android.jar,以及make原理
首先是这个问题如何修改。
在/frameworks/base/Android.mk中,找到如下行:
packages_to_document :=
在该变量的赋值语句最后添加
xxxxx (这里是你的包的名称,比如com/sina/ui,其实这里就是你的源代码在/frameworks/base/<你的模块>/java/下面的一部分路径,只要能够唯一的匹配到你的代码即可)
即可。
该添加的含义是使MAKE系统在制作OFF-LINE DOCUMENT时包含我们的package.
以此类推,添加其他新的package也可以这样做。
下面简单把android make sdk的过程写一下来说明为什么做这样的修改。调查时是反过来调查的。说明还是按照MAKEFILE的生成的顺序来说明吧。
首先在/frameworks/base/Android.mk中定义了进行sdk building的基本目标对象。
包括对哪些.java文件需要生成API文档,以及这些文档的路径。
然后在/build/core/droiddoc.mk中定义了最终进行build的规则和语句。
Android使用javadoc这个工具来生成所有API文档。
Javadoc这个工具可以带一个参数指定一个文件,该文件包含了所有要生成文档的源文件的名字(全路径)。
该文件的内容就是通过在/framework/base/android.mk里的变量生成的。当然在droiddoc.mk中还添加了build过程中生成的intermediates目录下的文件。
另外javadoc还可以指定定制的doclet(doclet是基于javadoc特定的API开发的小程序,该程序负责实际的文档输出).android的编译系统就包含了这样一个doclet叫DroidDoc。可以在/build/tools/DroidDoc目录下找到该工具的全部源代码。
正是该工具在生成HTML的同时在/out/target/common/obj/JAVA_LIBRARIES/android_stubs_current_intermediates下面copy(或者说重新生成了)所有将生成到android.jar中的所有源代码(.java文件).
该工具把所有生成document的源文件重新按Package组织生成在以上目录下。
然后进行编译和打包成android.jar。
根据以上分析,其实android.jar文件是各个公布出来的 API 的源文件经过javadoc重新组织以后再次编译产生的。 故,android.jar的内容实际上受到javadoc的notation控制和makefile的控制。 对于android中已存在的代码比如wifi native,可以通过修改源代码中javadoc的notation的方法重新build得到新的包含wifi native接口的android.jar(将源文件中的@hide这个notation换成别的,然后make update-api;make sdk)。而对于新加入的代码,则需要如上方法来修改makefile了。
下面总结一下调查过程中涉及到的知识:
1) javadoc和doclet,简单的看了一下工具的使用和参数,另外看了一下DriodDoc这个doclet的源代码,找出哪里生成的.java源文件。
2.makefile分析,android的make showcommands命令可以和任何其他目标一起使用来察看make过程中实际做了一些什么事情。(这点还需要调查这个showcommands如何实现的,因为make -d这个命令给出的信息对于找到问题帮助不大)
3.在跟踪makefile build过程时,使用$(warning xxxxx)和$(error xxxx)可以在除规则以外的地方打印出变量的值通过这个方法找出了实际建立要编译的文件列表的地方。
android sdk 编译--如何将源代码加入android.jar,以及make原理的更多相关文章
- Error: Could not find gradle wrapper within Android SDK. Might need to update your Android SDK - Android
在Windows7上运行 “cordova build android” 报错,如下: C:\test\hello> cordova build android ANDROID_HOME=C:\ ...
- 【转】在Android Studio中下载Android SDK的两种方式(Android Studio3.0、windows)
在Android Studio中下载Android SDK的两种方式(Android Studio3.0.windows) 方式一.设置HTTP Proxy1. 打开Settings2. 点击HTTP ...
- Failed to load C:\ProgramFilesTwo\Android\sdk\build-tools\27.0.3\lib\dx.jar
Eclipse遇到如下错误: Failed to load C:\ProgramFilesTwo\Android\sdk\build-tools\27.0.3\lib\dx.jar 原因: eclip ...
- eclipse运行错误提示 Failed to load D:\Android\sdk\build-tools\26.0.0-preview\lib\dx.jar
前几天在ecplise上运行项目还好好,今天一运行就提示这个错误:Your project contains error(s), please fix them before running your ...
- 全志Android SDK编译详解(二)
注意要确定安装了jdk) 第一步: cd lichee; ./build.sh -p sun5i_elite -k 3.0 (apt-get install uboot-mkimage需要安装m ...
- 全志Android SDK编译详解(一)
1.编译环境说明 Linux 服务器(任意电脑都可以,建议选择配置高的)安装ubuntu 10.04 作为编译的主机,其他开发者在xp 下,通过SSH/Telent 等协议登录linux 主机进行编. ...
- android------eclipse运行错误提示 Failed to load D:\Android\sdk\build-tools\26.0.0-preview\lib\dx.jar
更新了SDK后,在ecplise上运行项目时出现了一个问题. 一运行就提示这个错误:Your project contains error(s), please fix them before run ...
- Error: Could not find gradle wrapper within Android SDK. Might need to update your Android SDK. Looked here: C:\Users\Administrator\AppData\Local\Android\sdk\tools\templates\gradle\wrapper
在Windows7上运行 “cordova build Android” 报错,如下: C:\test\hello> cordova build androidANDROID_HOME=C:\U ...
- 加快android studio 编译速度(已更新至Android Studio 3.3.1)
1.加快AS启动速度 “Help”-"Edit Custom Properties...",在文件中输入 # custom Android Studio properties di ...
随机推荐
- 数据结构 - 2-路插入排序 具体解释 及 代码(C++)
2-路插入排序 具体解释 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/24267679 2-路插入排序的思想非常有意思 ...
- wdcp升级php5.3无法安装PDO_MySQL的解决
重新下载php5.3的升级脚本 wget http://down.wdlinux.cn/in/php_up53.sh 不忙运行,先修改php_up53.sh,查找./configure字段,在这行的末 ...
- MyBatis - (一) 基本数据操作命令和简单映射
1. 简单的select映射 <mapper namespace="com.mybatis3.mappers.StudentMapper"> <select id ...
- PageObject&PageFactory
几篇介绍PageObject&PageFactory文章: PageFactory: http://code.google.com/p/selenium/wiki/PageFactory Pa ...
- NetCore中使用DynamicExpresso、Z.Expressions、LambdaParser进行安字符串求值
例子如下: Z.Expressions从2.0开始支持了NetCore,但是收费的.其它两者免费.建议使用DynamicExpresso,免费而且速度快.LambdaParser目前支持太少. sta ...
- MySql 常见错误代码大全
B.. 服务器错误代码和消息 服务器错误信息来自下述源文件: · 错误消息信息列在share/errmsg.txt文件中.“%d”和“%s”分别代表编号和字符串,显示时,它们将被消息值取代. · 错误 ...
- Java本地运行中文正常,部署到Weblogic中文乱码
在使用一个加密解密工具类的时候,在本地Main方法中运行正常,不会出现中文乱码,将其部署到Weblogic之后,控制台,Servlet中中出现中文乱码. 在Main方法运行时获取本地编码方式为UTF8 ...
- zip 文件下载函数封装
代码: export default { /** * 下载文件 */ exportFile: (fileUrl) => { if (fileUrl) { let exportFrame = do ...
- 【Bugly安卓开发干货】Android APP 高速 Pad 化实现
Bugly 技术干货系列内容主要涉及移动开发方向.是由 Bugly 邀请腾讯内部各位技术大咖,通过日常工作经验的总结以及感悟撰写而成,内容均属原创.转载请标明出处. 怎样能在最快的时间内,实现一个最新 ...
- Struts 2相关配置与基本操作演示(案例Demo)
基本介绍 Struts 2 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2 ...