资源列表-GPRS
2016-04-28 10:10
302 查看
1.GPRS的调用是通过ConnectivityManager.setMobileDataEnabled方法
2.官方把方法定义为private类型来对外禁用,需要java中的反射调用
3.反射机制会不会在smali文件中体现出调用底层方法的痕迹呢?
4.关键代码:
5.反编译出来的smali文件长这样:
6.只有反射的痕迹......如何知道底层的调用?
7.最后附上以后学习可以参考的网址:
http://zwz94.blog.163.com/blog/static/3206039520140259468250/ http://www.blogjava.net/midea0978/archive/2012/01/04/367847.html http://bbs.pediy.com/showthread.php?p=1117963
好吧,经过学长解答,具体的反射函数需要在寄存器中查看...
2.官方把方法定义为private类型来对外禁用,需要java中的反射调用
3.反射机制会不会在smali文件中体现出调用底层方法的痕迹呢?
4.关键代码:
private ConnectivityManager mCM; mCM = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); Class cmClass = mCM.getClass(); Class[] argClasses = new Class[1]; argClasses[0] = boolean.class; try { Method method = cmClass.getMethod(methodName, argClasses); method.invoke(mCM, isEnable); } catch (Exception e) { e.printStackTrace(); }
5.反编译出来的smali文件长这样:
.method private setGprsEnabled(Ljava/lang/String;Z)V .locals 8 .param p1, "methodName" # Ljava/lang/String; .param p2, "isEnable" # Z .prologue const/4 v6, 0x1 const/4 v5, 0x0 .line 78 iget-object v4, p0, Lcom/example/gprstest/MainActivity;->mCM:Landroid/net/ConnectivityManager; invoke-virtual {v4}, Ljava/lang/Object;->getClass()Ljava/lang/Class; move-result-object v1 .line 79 .local v1, "cmClass":Ljava/lang/Class; new-array v0, v6, [Ljava/lang/Class; .line 80 .local v0, "argClasses":[Ljava/lang/Class; sget-object v4, Ljava/lang/Boolean;->TYPE:Ljava/lang/Class; aput-object v4, v0, v5 .line 84 :try_start_0 invoke-virtual {v1, p1, v0}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method; move-result-object v3 .line 85 .local v3, "method":Ljava/lang/reflect/Method; iget-object v4, p0, Lcom/example/gprstest/MainActivity;->mCM:Landroid/net/ConnectivityManager; const/4 v5, 0x1 new-array v5, v5, [Ljava/lang/Object; const/4 v6, 0x0 invoke-static {p2}, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean; move-result-object v7 aput-object v7, v5, v6 invoke-virtual {v3, v4, v5}, Ljava/lang/reflect/Method;->invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; :try_end_0 .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 .line 90 .end local v3 # "method":Ljava/lang/reflect/Method; :goto_0 return-void .line 86 :catch_0 move-exception v2 .line 88 .local v2, "e":Ljava/lang/Exception; invoke-virtual {v2}, Ljava/lang/Exception;->printStackTrace()V goto :goto_0 .end method
6.只有反射的痕迹......如何知道底层的调用?
7.最后附上以后学习可以参考的网址:
http://zwz94.blog.163.com/blog/static/3206039520140259468250/ http://www.blogjava.net/midea0978/archive/2012/01/04/367847.html http://bbs.pediy.com/showthread.php?p=1117963
好吧,经过学长解答,具体的反射函数需要在寄存器中查看...
相关文章推荐
- C/C++ 各种计时函数总结
- 农产品电子商务运营应该怎么做?
- 通过运行时来修改我们的UITextField的Placeholder的文字颜色
- 通过测试和代码告诉你Maven是如何使用mirror和repository的---学习笔记
- CloseableHttpClient类与HttpClients类解析
- miss @end
- Android硬件访问服务框架分析
- 【通用技术】实时网络响应要求的移动端App的网络超时设定
- Android:使用webview上传文件(支持相册和拍照) .
- Vim/Vi总结
- Activity生命周期和任务栈
- 磁盘阵列各方式的区别
- mysql数据库管理工具(navicat for mysql) 10.1.7 绿色中文版
- 从assets中读取xml文件再动态的创建界面
- 浅谈iOS中的蓝牙技术(二) -- CoreBluetooth
- js正则函数match、exec、test、search、replace、split使用介绍集合
- abstract 类也可以继承 实体类
- Stack的三种含义 ----超级经典 明白了 栈 的三种含义
- PHP 二维数组排序
- NSURLSession官方编程指南学习