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 ...
随机推荐
- [Functional Programming] Introduction to State, thinking in State
Recently, I am learning Working with ADT. Got some extra thought about State Monad. Basiclly how to ...
- 优化MySQL开启skip-name-resolve参数时显示“ignored in --skip-name-resolve mode.”Warning解决方法
转自:http://blog.csdn.net/yiluoak_47/article/details/53381282 参数用途: skip-name-resolve #禁止MySQL对外部连接进行D ...
- Google想出了一个决定人员晋升的算法,然后就没有然后了......
Google 有点跑偏了,逗死我了~实践一下也好~ Prasad Setty 是 Google People Analytics 团队的副总裁.7 年前 Google 成立的这支团队的职责是收集和利用 ...
- js undefined易错分析
undefined 以下是错误写法: data = undefined; alert(undefined==false);//这样判断会输出false; if(data!=undefined || d ...
- 百科知识 英特尔处理器I5 4460和4590有哪些区别
4460是855元 4590是880元 i5 4460与4590CPU主要区别在:1.主频差0.3GHz;;2.最大睿频相差0.5GHz;:3.核显(HD4600)最大动态频率相差0.1GHz ...
- C# 动态解析表达式
需求 我们很难捉摸用户的思维,即使使用非常正式的文档规范某些数据的定义.结果的标准等,也不能抵挡住用户不断变化的需求,但他们有个万变不离的东西——你做这个东西要是万能的,即输入参数类型.个数等发生改变 ...
- Apache和Nginx对比
面试过程中被问到Apache和Nginx服务器的对比,因为之前没有关注过这个问题,所以也没能回答上来. 今天在网上搜索资料,发现中文资料极少,还是英文资料多一下. 原文链接:https://www.w ...
- 【树莓派】树莓派与XBMC及Kodi、LibreELEC插件(二)
之前的相关文章参考: [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(一) [树莓派]树莓派与XBMC及Kodi.LibreELEC插件(二) [树莓派]树莓派与XBMC及Kodi.Li ...
- 命令行能运行,但是在crontab不能正常运行的问题
今天配置了一个crontab,但是怎么也不能执行,原因是环境变量的问题,记录一下. 解决问题的办法,在shell脚本添加: ################## . /etc/profile . ~/ ...
- Communication API
Stingray WIKI Stingray javascript Communication 主要的三个方法: Communication.LinkRequest - 页面跳转,调用比较简单,直接参 ...