`
marine8888
  • 浏览: 544515 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ndroid sdk 编译--如何将源代码加入android.jar,以及make原理

阅读更多

转自:http://raindays619.bokee.com/viewdiary.220437410.html

 

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

分享到:
评论

相关推荐

    platforms/android-28/android.jar

    替换sdk路径下/platforms/android-28/android.jar,能够解决在android studio 看源码部分类报红及能够正常编译项目。解决替换as后报错:Failed to transform file 'android.jar' to match attributes {artifactType=...

    platforms/android-29/android.jar

    替换sdk路径下/platforms/android-29/android.jar,能够解决在android studio 看源码部分类报红及能够正常编译项目。解决替换后报错:Failed to transform file 'android.jar' to match attributes {artifactType=...

    android-all-9-robolectric-4913185-2.jar

    单元测试使用robolectric框架时需要下载的依赖,但是使用Android Studio下载太慢了,下载该资源直接放在C盘用户根目录下的相对路径.m2\repository\org\robolectric\android-all\9-robolectric-4913185-2下, 那么在...

    android-support-v7-appcompat.jar android-support-v4.jar

    在Android开发中,`android-support-v7-appcompat.jar` 和 `android-support-v4.jar` 是两个非常重要的库文件,它们提供了对旧版本Android系统的重要支持和功能扩展。 首先,`android-support-v7-appcompat.jar` 是...

    android-studio-bundle-135.1740770-windows.exe

    android-studio-bundle-135.1740770-windows.exe官网最新版

    sdk platform android-api-29(android 10).zip

    将"android-sdk\platforms\android-29"解压后,开发者可以在Android Studio中选择这个平台,进行兼容Android 10的应用开发。开发过程中,可以利用Android模拟器测试应用在Android 10设备上的行为,或者在真实设备上...

    android-x86_64-9.0-r2.iso

    android-x86_64-9.0-r2.iso it can be install in the Windows Virtual Machine directly!

    Android Studio Koala(android-studio-2024.1.1.11-mac.zip.002)

    Android Studio Koala 2024.1.1(android-studio-2024.1.1.11-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: ...

    android-ndk-r17c-windows-x86_64.zip

    1. **原生库编译**:开发者可以使用NDK将C和C++代码编译为本地库,这些库可以在Android设备上运行,提高了应用程序的执行速度,特别是对于计算密集型或图形密集型应用。 2. **JNI支持**:NDK提供Java Native ...

    android.bp动态编译文档

    动态编译是一种优化构建过程的方法,它只编译必要的源代码,从而节省时间和资源。在`Android.bp`中,我们可以利用条件语句和变量来实现这一目标。下面我们将分步骤解析如何进行动态编译。 1. **理解Android.bp文件...

    haxm-windows_v7_5_2.zip

    最新版本的haxm,haxm-windows_v7_5_2,ndroid SDK中package intel x86 Emulator Accelerator,下载解压后,需安装intelhaxm-android.exe

    android-ndk-r18b-windows-x86_64.zip

    Android NDK(Native Development Kit)是Google为Android平台开发的一款重要的工具集,它允许开发者使用C和C++语言编写应用程序的底层代码。标题中的“android-ndk-r18b-windows-x86_64.zip”表明这是一个适用于...

    android-maven-gradle-plugin:弃。 现在由android build插件支持

    一旦添加了这个插件,Gradle会自动应用Android相关的构建逻辑,包括处理AndroidManifest.xml、编译Java和Kotlin代码、处理资源文件、打包APK或AAB(Android App Bundle)等。 Groovy是Gradle脚本语言,它是一种动态...

    android-29.zip

    本文将深入探讨Android SDK的核心组成部分以及其在Android系统包中的意义。 首先,Android SDK包含了多种关键组件: 1. **平台工具**:这是SDK中的基础工具集,包括adb(Android Debug Bridge)用于设备通信,...

    基于android-pdf-viewer增加翻书效果查看pdf

    基于android-pdf-viewer增加翻书效果查看pdf,在网上搜索很多关于翻书效果的例子,但是多数是针对于纯文字或者图片view相关,但是在线的PDF文档没有确切的翻书效果,结合自己之前的翻书效果,和现有的PDF阅读器,...

    安卓对讲机录音机相关-ndroid-录制aac文件完整版.rar

    本资源"安卓对讲机录音机相关-ndroid-录制aac文件完整版.rar"包含了一个完整的AAC录音解决方案,适用于那些希望在Android设备上实现高质量音频记录的开发者。AAC(Advanced Audio Coding)是一种高效且音质优良的...

    ndroid系统所需要的Linux内核源代码包

    本文将深入探讨“android-kernel-2.6.36-20110517.tar.gz”这个压缩包所包含的Android系统所需Linux内核源代码,以及它对Android系统运行的重要性。 Linux内核是开源软件项目,它是整个操作系统的基础,负责管理...

    新版Android开发教程.rar

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

    android-sdk-windows24.1.2

    android-sdk-windows24.1.2

Global site tag (gtag.js) - Google Analytics