android开发隐藏图生成,Android开发中怎样使用隐藏的API

Android应用中有时为了实现某些特殊的功能或效果,往往需要使用一些谷歌隐藏的API(加有@hide标记的public类、方法或常量),例如PolicyManager。

使用Android隐藏的API主要有两种办法:1.利用Java反射机制,使用反射的方法得到隐藏API;2.使用源码编译时生成的全编译过的classes.jar包。

举例说明,下面的代码如果直接使用会报错。

mWindowManager = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);

mWindow = PolicyManager.makeNewWindow(mContext);

mWindow.setWindowManager(mWindowManager,null,null);

1,使用Java反射机制,改为以下代码,就可以正常使用了。

mWindowManager = (WindowManager) mContext

.getSystemService(Context.WINDOW_SERVICE);

// using reflect mechanism to invoke hide api

String POLICYMANAGER_CLASS_NAME ="com.android.internal.policy.PolicyManager";

try{

Class policyClass;

policyClass = Class.forName(POLICYMANAGER_CLASS_NAME);

Log.i(TAG, policyClass.toString());

Method meths[] = policyClass.getMethods();

Method makenewwindow =null;

// Method makenewwindow = policyClass.getMethod("makeNewWindow");

for(inti =0; i 

if(meths[i].getName().endsWith("makeNewWindow"))

makenewwindow = meths[i];

}

Log.i(TAG, makenewwindow.toString());

mWindow = (Window) makenewwindow.invoke(null, mContext);

}catch(Exception e) {

e.printStackTrace();

}

mWindow.setWindowManager(mWindowManager,null,null);

2,如果不想修改代码,就需要使用第二种方法:导入全编译的classes.jar包。编译Android框架源码后,将生成全编译的classes.jar导入到工程中。使用Eclipse,Android工程添加library(BuildPath -> Add Libraries->User Library->New User Library),将.jar文件加入添加到library,同时勾选“SystemLibrary”选项,www.linuxidc.com 以避免产生“java.lang.OutOfMemoryError:Java Heap Space”错误。如果已经正确导入了jar库,却仍然找不到隐藏的API。原因可能是Buildclass path order不正确,即android.jar和classes.jar的导入顺序不对,具体调节Buildclass path order,选择Build Path-> Config Build Path->Order and Export,调整自定义的library与android.jar的顺序。

此时,本文最开始的那段代码不需要再做改动就可以生效了。

利用反射机制使用隐藏API的方法优点是灵活,能够在不兼容的系统捕获异常,而使程序不至于崩溃;缺点是过程太繁杂,而且对于隐藏类的继承等很难实现。如果需要大量使用隐藏API,使用反射无疑会让人厌烦。

通过导入全编译的classes.jar包来实现对隐藏API的使用方法简单,容易编程,就像是那些隐藏的API在SDK中变得可见了一样,其缺点就是兼容性问题,希望使用者引起重视。

两种方法各有利弊,请大家斟酌使用。一般来说,谷歌设置隐藏API的主要原因在于Android系统本身还在不断的进化发展中,这些API可能还不够成熟、稳定。因此除非特殊情况,应尽量减少对隐藏API的使用。0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值