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)可以在除规则以外的地方打印出变量的值通过这个方法找出了实际建立要编译的文件列表的地方。

时间: 2024-08-06 20:05:22

android sdk 编译--如何将源代码加入android.jar,以及make原理的相关文章

Cocos2d-x移植到Android平台编译的两个文件Android.mk和Application.mk

背景 首先,说说文章的背景.最近手中的一个项目,由于需求中要求提供Web界面的打印功能,当然如果没有打印机,还可以提供保存到本地.项目组长把这个"小任务"分给了我.本着努力为组长分忧解难的思想,领了任务之后,就马上开始了工作. 问题 刚开始的时候,组长给了一个工具(jatoolsprinter)让我研究,我用了一个多小时的时间,做出了一个简单的Demo,然后就是各种的测试,由于 web 打印需要浏览器安装 ActiveX 组件,在随后的测试中,我用了几款浏览器,甚至把安全级别都调到了最

Android Studio编译运行Fresco Sample。Android缓存新境界。 (a problem occurred start process &#39;command &#39;ndk-build&#39;&#39;)

今天闲逛知乎,偶遇一篇“Android应用开发难点”,作为安卓程序猿,本能点进去,想看看究竟能有什么难点自己不知道的(夜郎自大..面壁中). 插件化,H5容器优化,网络.图片缓存..感觉都还好.直到看到“Fresco出来之前,你是不是觉得图片缓存已经到头了?” Fresco究竟是何方神圣!! 询问度娘得知,2015.3.27日之前就已经发布了(度娘的结果最早是3.27).通过查看GitHub: Version 0.1.0  tyronen released this 16 days ago · 

全志Android SDK编译详解(一)

1.编译环境说明          Linux 服务器(任意电脑都可以,建议选择配置高的)安装ubuntu 10.04 作为编译的主机,其他开发者在xp 下,通过SSH/Telent 等协议登录linux 主机进行编. 2.安装JDK sudo tar –jxvf jdk1.6.0_26.tar.bz2 安装结束后还要设置环境变量让Android 找到这个路径,通过vim 打开/etc/bash.bashrc,增加下面的语句: export JAVA_HOME=/home/yanfa/Andro

全志Android SDK编译详解(二)

注意要确定安装了jdk) 第一步: cd  lichee; ./build.sh  -p sun5i_elite -k 3.0  (apt-get install uboot-mkimage需要安装mkimage工具) 1)打开build.sh脚本发现脚本中只有“buildroot/scripts/common.sh [email protected]”此一句话;其中[email protected]接受所有输入参数 2)继续打开 (vim) buildroot/scripts/common.s

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:\Users\administrator\AppData\Local\Android\sdkJAVA_HOME=C:\Program Files\Java\jdk1.8.0_121Error: Could not find gradle wrapper within Android SDK. Might ne

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 running your application.(你的程序包含错误,请修改后再运行). 控制台是这样输出的: 提示dx.jar文件没加载到,按网上一些方法试了也不行,我就找到D:\Android\sdk\build-tools\这个目录,目录如下图, 我想,既然他找不到26.0.0这个文件夹,那我就把它

Android反编译的一个注意细节----区分jar包

通过使用反编译工具得到apk的源码后,下一步就是复制源码还原工程了.但是我们得到的是jar文件,如何看清楚jar文件然后还原android工程就很重要了.下面就记录一下我如何分析的jar文件的过程. 1.  反编译apk得到源码. 这里我之前的一篇blog中进行了比较详细的说明:android之反编译浅析 2.  得到了源码之后几个关键的文件大家肯定都拿到了. ①  Android的manifest文件 ②  Res下的资源文件 ③  Jar文件 3.  关键的jar文件得到之后,我们分析它 (

Failed to load C:\ProgramFilesTwo\Android\sdk\build-tools\27.0.3\lib\dx.jar

Eclipse遇到如下错误: 原因: eclipse自动使用最高版本的SDK,ADT比SDK版本低导致 解决办法: 1.用SDK Manager.exe下载低版本的build-tools,如27.0.3 2.add this in the project.properties of your project: sdk.buildtools=27.0.3 //设置sdk使用的buildtools版本 转载自:http://blog.csdn.net/lz_1990/article/details/

eclipse运行错误提示 Failed to load D:\Android\sdk\build-tools\26.0.0-preview\lib\dx.jar

http://blog.csdn.net/zhou452840622/article/details/73028681