`
sharp2wing
  • 浏览: 270163 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

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

Andriod源码正确的编译方式
适用范围:针对Linux的环境

针对版本:Android源码Version1.5及以上

前提条件:1、编译源码的各种工具已经安装完毕;
                  2、进入Android源码的根目录,如:/work/android2.1/

编译命令:make update-api; make PRODUCT-sdk-sdk;

命令说明:1、make update-api   #如果你在Android源码中添加了自定义的包、类、方法或者你修改了Android源码中标识为@hide的方法、类,你需要这些内容对 Application可见并且需要编译进SDK的Document中的话,这个命令是必须的(其实还有另外一种手工修改的方式替代这个命令的,呵呵);
                  2、make PRODUCT-sdk-sdk   #编译源码并且声称SDK,这个方法解决了之前使用make sdk命令编译SDK的一个bug,就是R文件不能自动生成,需要手动更新一个jar文件才可以,这个文章本博客中也有涉及。

异常现象:如果在源码中添加了一些style、theme、drawable、package、class、method,编译时会出现有out/目录中的一些异常现象,一般不是特别严重的,主要是针对有些文件找不到,此时你可以在执行以下命令:
make clean
再执行:make update-api;make PRODUCT-sdk-sdk

最近使用源码比较多,修修改改缝缝补补难免有编译的问题出现,这里就做以上总结。
分享到:
评论
1 楼 c30268056 2013-12-28  
您好~有个很大的疑问~我在frameworks/base/core文件夹中加入了我自己的代码,完整的路径是frameworks/base/core/java/a/b/c.java但是我在运行时,系统说找不到a.b.c类,应该是因为没有编译成功的原因?我frameworks/base/Android.mk文件中的packages_to_document := 原本的值是android \然后我在此处又增加了a \但是貌似这样make以后,还是出现同样的错。是不是我的组织方式有问题,求解~

相关推荐

    Android_SDK编译,带自己api的android.jar编译.docx

    在这个目录下,你可以编写你的Java源代码,其中的包名应与你想要在`android.jar`中出现的包名一致。 接下来,你需要修改`makefile`以确保新添加的源代码能够被编译进SDK。这涉及到两个主要的`makefile`文件: 1. `...

    Android_SDK编译,带自己api的android.jar编译.pdf

    这份文档"Android SDK编译,带自己api的android.jar编译.pdf"详细介绍了如何在Android源码的基础上编译带有自己API的android.jar。以下是整个过程的详细步骤: 1. **添加自定义源代码**: - 在Android源码树的`...

    Android_SDK编译,带自己api的android.jar编译[文].pdf

    将你的Java源代码文件放入相应位置,并确保它们正确导入并使用了Android SDK中的其他类和接口。 2. **修改Makefile**: - **修改`build\core\pathmap.mk`**: 在`FRAMEWORKS_BASE_SUBDIRS`变量后面添加新创建的...

    AndroidSDK编译,带自己api的androidjar编译.pdf

    在Android开发过程中,有时我们需要对Android系统框架进行扩展或自定义,这可能涉及到对Android SDK的编译,以便将我们自己的API打包进`android.jar`。以下是一个详细步骤的指导,教你如何在Android源码的基础上编译...

    Ubuntu下make jar包

    在Ubuntu操作系统中构建一个包含第三方jar包的Android工程涉及到多个步骤,主要涵盖了Java开发环境的配置、Android SDK和NDK的安装、项目构建工具的使用以及最终的打包过程。这里我们将详细探讨这些知识点。 首先,...

    新版Android开发教程.rar

    将会支持 Google 可能发布的手机操作系统或者应用软件,共同开发名为 Android 的开放源代码的移动 系 统。 谷歌早在 2002 年就进入了移动领域,可是由于目前的手机操作系统企业和手机企业相对封闭,提高了 行业的...

    ubuntu11.10(64位)虚拟linux系统下 ---修改编译android工程

    首先,你需要下载Android 2.3.5的源代码并将其解压到/home/xxx/android2.3/source目录下。接下来,通过执行`make sdk`命令,可以在/home/xxx/android2.3/source/out/host/linux-x86/sdk目录下生成SDK。 确保你的...

    android添加系统api和系统apk的过程

    添加自己的 APK 至 android 系统需要将编写好的纯源代码(src+res+AndroidManifest.xml)拷到 Android 源代码文件夹下的 packages/apps 目录下自己建的文件夹下,然后添加 Android.mk 文件, obsahLOCAL_PATH、LOCAL...

    基于linux与windows平台下 如何下载android sdk源代码的方法详解

    在本文中,我们将深入探讨如何在Linux和Windows平台上下载Android SDK的源代码,以及如何将这些源代码导入Eclipse开发环境。首先,我们来看下载源代码的步骤。 **下载Android SDK源代码** 1. **环境准备** - 对于...

    intellij idea 中调用kettle9.2.0.0-290样例

    - `src`:源代码目录,通常包含`main`和`test`两个子目录,分别存放主代码和测试代码。 - `.idea`:IntelliJ IDEA的项目元数据,包含工作区设置和模块信息。 - `.gitignore`:Git版本控制系统忽略文件列表,指定哪些...

    Android 4.0 Launcher 可编译代码

    这个"Android 4.0 Launcher 可编译代码"是一个经过修改的源代码版本,允许开发者进行定制和调试,以适应不同的需求或优化系统性能。 首先,我们需要理解Launcher的工作原理。Launcher本质上是一个应用,它是一个...

    openJDK-7.tar.gz

    JDK提供了javac编译器,用于将Java源代码转换为字节码,以及各种工具,如Javadoc(生成API文档)、jar(打包类文件)和junit(单元测试)等。 **安装和使用openJDK-7** 在Linux环境下,解压openJDK-7.tar.gz通常会...

    libopencv-java470.dylib和opencv-470.jar

    编译过程可能涉及下载OpenCV源代码,配置项目,然后运行`make`命令来编译和链接库。 另一方面,`opencv-470.jar`是OpenCV的Java库文件,它包含了Java API的类和方法。这个JAR文件使得Java开发者可以直接在他们的...

    在android上构建Qt5

    总结来说,构建Qt5 for Android涉及到安装和配置Android SDK和NDK,设置正确的环境变量,克隆并配置Qt5源代码,以及编译和部署应用程序。这个过程可能相对复杂,但遵循上述步骤,开发者可以成功地在Android设备上...

    高通编译Android环境操作指南

    对于高通平台,这个环境通常包括高通的SDK、NDK(Native Development Kit)以及Android的源代码。 1. **安装Java Development Kit (JDK)** 在开始之前,确保你的系统已经安装了最新的JDK,因为Java是Android开发的...

    tools and ant jar

    Ant的主要功能是读取名为`build.xml`的配置文件,根据文件中的指令执行构建任务,如编译源代码、运行测试、打包应用、清理工作目录等。开发者可以自定义构建任务,使得项目的构建过程可重复且易于维护。Ant的灵活性...

    可以在eclipse下调试android的源Launcher

    在Android开发过程中,有时我们需要深入理解系统组件的工作原理,或者对特定组件进行定制和优化,这时就需要调试Android的源代码。本教程将详细介绍如何在Eclipse环境下调试Android的源码,特别是Launcher应用,以...

    Android lunch3配置

    2. **获取Android源码**:使用`repo`工具克隆Android源代码仓库。执行`repo init -u https://android.googlesource.com/platform/manifest`,然后`repo sync`来下载源码。 3. **设置环境变量**:在bashrc或zshrc...

Global site tag (gtag.js) - Google Analytics