您的位置:首页 > 移动开发 > Android开发

解决android某些应用开发某些类无法解析/找到的问题--使用android隐藏类的方法

2014-06-18 07:04 866 查看

Android SDK是什么

Android SDK下载下来会是一个简单的ZIP文件压缩包。Android SDK的主体是一些文件,连续性的文件,可编程的API,工具,例子和其它。除了包含核心SDK库和API的Java应用程序的android.jar包,Android SDK被分成以下几个主要的文件夹:
l Docs包括所有的Android文档
l Tools包含所有在开发过程中需要的开发和调试工具

Android文档

Android文档被放在Android SDK内的Docs的文件夹内。文档内提供了如何下载和安装SDK的每一个步骤。文档时HTML格式并且有一个documentation.html在SDK的根目录可以进入到整个文档。
注意:当你浏览Android SDK时,你可能想到一些页面是一些错误的链接或者丢失了。因为当你点击某些链接时,屏幕右边可能会显示空白,不过,如果你再往下滚动页面你将会明报页面只是没有被排列好。

Android工具

Android SDK提供给开发者一系列功能强大并且有用的工具。
Ø emulator.exe
Android SDK中的一个最重要的工具,emulator.exe启动Android模拟器。Android模
拟器被用来在一个假的Android环境中运行你的应用程序。在没有Android平台可用的硬件的情况下,emulator.exe将会是唯一的方法作为测试应用程序的平台。
Ø adb.exe
当你使用命令行编辑器时另外一个工具会变得非常的有用,它就是Android调试桥,或者adb.exe。这个工具允许你发出命令到模拟器工具。当你在命令行环境下工作时,这个adb工具允许你做下列工作。
l 开始并且停止服务
l 安装和卸载应用程序
l 移动文件至模拟器
Ø MKSDCARD.exe
MKSDCARD.exe是一个非常有用的工具,当你测试一个应用程序,而这个程序需要
读取或者写入文件到一个插入到移动设备的SD存储卡中。MKSDCARD.exe在你的驱动器中创建一个小的驱动并且会保留测试文件。然后模拟器会把这个小的部分当成一个SD存储卡。
Ø DX.exe
DX.exe是Android SDK的编译器。当你运行你的Java文件,DX.exe将创建一个带有.dex
后缀——Dalvik可执行格式的文件。这些会被Android设备正确的理解和运行。
Ø ddms
这个工具集成了Dalvik,能够让你在模拟器或者设备上管理进程并协助调试。你可
以用它杀死进程,选择某个特定的进程来调试,产生跟踪数据,观察堆反映和线程信息,截取模拟器或设备的屏幕画面,还有更多的功能
Ø aidl
可以让你生成进程间的借口的代码,诸如sevice可能使用的接口。
Ø sqlite3
这个工具能够让你方便地访问SQLite数据文件。这些数据文件是由Android应用程
序创建并使用的。
Ø TraceView
这个工具可以将android应用程序产生的跟踪日志转换为图形化的分析视图。
Ø Monkey
Monkey是在模拟器上或设备上运行的一个小程序,它能够产生为随机的用户事件流,
例如点击,触摸,挥手,还有一系列的系统级事件。你可以使用Monkey来给你正在开发的程序做随机的但可重复的压力测试。

Android APIs

APIs或者叫做应用程序编程接口,是AndroidSDK的核心。一个API是应用程序开发者在特定平台上创建程序的功能,方法,属性和类别和库德集合。AndroidAPI包含所有你创建与Android为基程序交互的特定信息。Android SDK包含两套API:google的API和可选的API。
Ø Google API
Google API包含在Android SDK中并且包含编译参考,允许你绑定你的程序到现有的
google服务中。一些包随着API一起发布包含了图形,移动性,联系人和日历等工具。还有google地图。使用提供的这个包,你可以创建一个应用程序无缝的和熟悉的google地图界面对接。
Ø 可选的API
Android SDK包含了一些可选的API,它包括了一些标准AndroidAPI未包含的内容。
说它们是可选的API意味着这些功能在手持设备上可能出现也可能不出现。也就是说一些为Android平台创建的设备可能包含升级或者一些特性而其他的没有。其中的一个可选特性就叫做电话的位置基础服务API需要接受斌管理用设备上GPS单元的信息。其它可选的API包含有蓝牙,wi-fi,播放mp3,进入并激活3D-opengl硬件等。

SDK的生成

首先/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/commom/obj/J***A_LIBRARIES/android_stubs_current_intermediates下面copy(或者说重新生成了)所有将生成到android.jar中的所有源代码(.java文件)。该工具把所有生成document的源文件重新按Package组织生成在以上目录下,然后进行编译和打包成android.jar。
根据以上分析,其实android.jar文件时各个公布出来的API的源文件经过javadoc重新组织以后再次编译产生的。故android.jar的内容实际上收到javadoc的notation控制和makefile的控制。

把Android源代码加入SDK

在调试Android程序的时候经常会遇到”source not found”错误。Google在发布SDK时没有把源代码包含进去,而framework中所有Java代码加起来打个包也就是20多MB。而且Android Eclipse plugin(ADT)不允许我们在项目中attach源代码到android.jar上。通过分析ADT的源代码我们知道ADT是从SDK目录下的”source”目录来查找class对应的源代码,这样我们只要把源代码放到sources目录中,ADT就可以自动找到对应的源代码了。

使用Android隐藏类和隐藏方法

在android源码中,某些方法、成员、类或包被打上@hide标签,这些类、方法或成员在SDK中没有公开。下面提供一种解决这个问题方法。
首先,下载android源码进行编译。然后在编译后的out目录下寻找包含你所引用隐藏类的模块的jar文件,通常文件名为classes.jar。比如framework的jar文件为out\target\common\obj\J***A_LIBRARIES\frameworkintermediates\classes.jar。最后在eclipse的Android项目中,选择项目属性->Java BuildPath->Librarues->Add Library->User
Library->Next->User Libraries进入到User Libraries管理界面,点击New新建一个User Library,比如android framework,点击Add Jars把Jar包加入到建立的User Library中,最后点击OK就可以了。但是需要更改类搜索顺序,选择项目属性->Java BuildPath->Order and Export,把所建立的User Libraries移到Android SDK的上面。所有java类生成的包文件都在目录out/target/common/obj/J***A_LIBRARIES下,需要什么文件可以到里面找。

添加新的类

Google对于所有的类和API,分为开发和不开放两种。所谓的开发式是指javadoc所包含
的,并不是java中的public和private,而是跟javadoc有关系,和代码没有关系。
在开放式的类中增加一个变量,而又没隐藏,导致和原API的doc不一致造成的就会有错。通过提示,有两个方法可以解决该问题:
ü 将新增加的变量或方法加上”@hide”的注释,注意一点,加”@hide”不是简简单单的/*@hide*/就行了,标准的javadoc要这样/** */,而且对于format变量应该加上{ },也就是/**{@hide}*/。
ü 如果想在生成的doc中增加该变量或方法的话,必须输入:make update-api,这样的话,系统自动将新增加的API添加到current.xml中了。
所以如果要加方法就是按上面的方法添加。
Ø 在原有包下面添加
这个比较简单,直接在已知的包中添加,加完之后直接makeupdate-api就好了。
Ø 添加在framework/base中
如果直接添加在目录framework/base后,接着make update-api是不会在current.xml
里生成你所添加的类。看了android.mk才知道,原来需要修改android源码根目录下的build/core/pathmap.mk把你的目录加进去,然后就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐