原文网址:http://www.bangchui.org/read.php?tid=274


我们导入一个android自带应用的工程时,往往有很多错误。以自带的 AlarmClock 为例,导入eclipse后,往往出现很多错误,如下图所示:


(见原文)

例如,上图中的Intent.ACTION_ALARM_CHANGED 无法访问,下面我们就找到源代码看看原因何在?

(见原文)

根据java 编程规范,我们知道这个api (静态变量)被隐藏掉了,所以在sdk中无法使用。在知道了原因之后,我们有几种解决方案:
1. 自己将源代码中的@hide去掉,然后编译一个sdk来替换默认的sdk。


在linux上使用make PRODUCT-sdk-sdk 命令,编译一个新的sdk出来,注意编译后其实我们不需要整个sdk,只需要android.jar这个文件替换掉sdk里的android.jar,例如:笔者的sdk里的jar对应的目录为:
F:\Program Files\Android\android-sdk-windows\platforms\android-8\android.jar
具体编译sdk的方法是,在linux编译环境下用命令 make PRODUCT-sdk-sdk ,成功后,会有如下提示:
Package SDK: out/host/linux-x86/sdk/android-sdk_eng.stevewang_linux-x86.zip
我们进入到 linux编译环境的 out/host/linux-x86/sdk/android-sdk_eng.stevewang_linux-x86/platforms/android-2.2/目录下可以看到 android.jar 文件。使用此文件替换 F:\Program Files\Android\android-sdk-windows\platforms\android-8\android.jar 即可。替换前记得备份


此方法较为麻烦,建议使用方法二


2. 添加framework 编译出来的class.jar文件到 eclipse的build path
其实在编译android的时候,我们将framework 编译到一个临时的jar包中了,这个jar包的路径一般为:
out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar

[font='dejavu] 我们只需要在linux上android源代码目录下使用make 命令即可生成此文件。
[font='dejavu]
[font='dejavu] 由于这个jar文件中的api 还没有重新打包,里面被@hide掉的api并没有被去掉。所以我们依然能够引用里面
[font='dejavu] 被@hide的api 。而sdk 中的 android.jar文件时重新打包生成的,其里标记有@hide的api已经被去掉了。

[font='dejavu] 所以我们把 out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar 拷贝到本地pc上。
然后在工程中添加此jar包。
具体方法:
1 . 拷贝linux编译生成的out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.jar到本机PC。
2,在eclipse的Android项目中,选择项目属性->Java Build Path->Libraries->Add Library->User Library->Next-> UserLibraries进入到User Libraries管理界面,点击New新建一个User Library,比如android_framework,点击Add Jars把Jar包加入到建立的User Library中,最后点击OK。
3.选择项目属性->Java Build Path->Order and Export,把所建立的User Libraries移到Android SDK的上面。

如下图:

(见原文)


之后我们的工程错误消失了:
(见原文)


到此问题基本解决


相关阅读http://www.bangchui.org/read.php?tid=7311


更多相关文章

  1. Android(安卓)Repo的manifest XML文件格式
  2. 动态加载Dex的原理
  3. (Android)为什么我们不需要导入android support v4包?
  4. React Native文件读写操作(更新)
  5. 【Android】Could not find XXX.apk!的解决方法
  6. Android(安卓)Dex文件格式(一)
  7. Android(安卓)NDK: Your APP_BUILD_SCRIPT points to an unknown
  8. Android(安卓)4.4 webview 架构
  9. Android(安卓)的启动流程

随机推荐

  1. Android(安卓)中文 API (29) ―― Compound
  2. 【Android(安卓)界面效果47】RecyclerVie
  3. 在activity中调用Application 出现androi
  4. android手机屏幕适配方法
  5. Android(安卓)中文 API (25) ―― ZoomCont
  6. Android(安卓)中文 SDK (47) ―― Filter
  7. jdk及android studio环境变量配置
  8. 开发环境搭建
  9. Android(安卓)EditText 属性汇总
  10. android中translate动画