android使用隐藏api的方法(使用被@hide的api)
2016-05-21 18:00
513 查看
http://blog.sina.com.cn/s/blog_5da93c8f0101e1yj.html
这篇文章主要要介绍的就是通过导入全编译的classes.jar包,来实现对隐藏API的使用。这种方法实现简单,程序员编程也简单,就像是那些隐藏的API在SDK中变得可见了一样。它的缺点就是兼容性问题,希望使用者引起重视,在使用时考虑清楚。
方法二:添加framework 编译出来的classes.jar文件到eclipse的build path
其实在编译android的时候,我们将framework 编译到一个临时的jar包中了,这个jar包的路径一般为:
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
我们只需要在linux上android源代码目录下使用make 命令即可生成此文件。 由于这个jar文件中的api 还没有重新打包,里面被@hide掉的api并没有被去掉。所以我们依然能够引用里面被@hide的api。而sdk 中的android.jar文件时重新打包生成的,其里标记有@hide的api已经被去掉了。所以我们把 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,使用右面的“UP”键,把所建立的User Libraries移到Android SDK的上面。这样做的意思就是优先使用classes.jar中的API,其次使用android.jar中的API。为什么不直接使用classes.Jar?因为我在使用时发现,android.jar中有的东西classes.jar中没有。 【实践】
1. 第一种方式将项目代码放置到系统源代码当中,其能够访问所有的API,我一般在windows的eclisp当中创建项目,基本OK之后,将代码 系统当中进行编译,流程 放置路径:pizza/package/apps/目录,添加一个Android.mk文件,Android.mk里面的文件内容
这篇文章主要要介绍的就是通过导入全编译的classes.jar包,来实现对隐藏API的使用。这种方法实现简单,程序员编程也简单,就像是那些隐藏的API在SDK中变得可见了一样。它的缺点就是兼容性问题,希望使用者引起重视,在使用时考虑清楚。
方法二:添加framework 编译出来的classes.jar文件到eclipse的build path
其实在编译android的时候,我们将framework 编译到一个临时的jar包中了,这个jar包的路径一般为:
out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar
我们只需要在linux上android源代码目录下使用make 命令即可生成此文件。 由于这个jar文件中的api 还没有重新打包,里面被@hide掉的api并没有被去掉。所以我们依然能够引用里面被@hide的api。而sdk 中的android.jar文件时重新打包生成的,其里标记有@hide的api已经被去掉了。所以我们把 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,使用右面的“UP”键,把所建立的User Libraries移到Android SDK的上面。这样做的意思就是优先使用classes.jar中的API,其次使用android.jar中的API。为什么不直接使用classes.Jar?因为我在使用时发现,android.jar中有的东西classes.jar中没有。 【实践】
1. 第一种方式将项目代码放置到系统源代码当中,其能够访问所有的API,我一般在windows的eclisp当中创建项目,基本OK之后,将代码 系统当中进行编译,流程 放置路径:pizza/package/apps/目录,添加一个Android.mk文件,Android.mk里面的文件内容
LOCAL_PATH:=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS:=optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# 根据自己项目需要apk的名称,其他均不需要修改
LOCAL_PACKAGE_NAME:=TestRemoteSubmix
LOCAL_CERTIFICATE:=platform
include $(BUILD_PACKAGE)
2.第二种方式,也不需要去掉@hide, 也就是不需要修改android系统源代码,直接将out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar文件COPY出来,然后按上面的方式加入到windows的eclisp当中。include $(CLEAR_VARS)
LOCAL_MODULE_TAGS:=optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# 根据自己项目需要apk的名称,其他均不需要修改
LOCAL_PACKAGE_NAME:=TestRemoteSubmix
LOCAL_CERTIFICATE:=platform
include $(BUILD_PACKAGE)
注意:它classes.jar其里面包含了具体方法的实现,在标准的sdk是没有具体方法的实现
相关文章推荐
- 关于android activity启动模式
- android测试有多重要!
- 我的Android进阶之旅------>RxJava学习资料汇总
- android设置控件背景透明、半透明的方法
- android之子线程中的Toast
- Android Studio使用lambda
- Android概述
- Android开发艺术探索—— 第十一章Android的线程和线程池
- Android listview子控件的的点击事件
- android图片加载与缓存
- android中的AIDL
- Mac、Windows下Android Studio快捷键的使用
- 给 Android 开发者的 RxJava 详解
- ViewHolder重用机制 RecyclerView+CardView 优化
- android反编译工具Apktool安装与使用
- 给 Android 开发者的 RxJava 详解
- android模拟器无法使用camera拍照
- Android SDK 在线更新镜像服务器资源
- Android使用 DrawerLayout实现侧滑
- Android自定义ViewPager指示器