首页 > 其他分享 >Android获取其他包的Context实例然后做坏事

Android获取其他包的Context实例然后做坏事

时间:2023-02-06 19:37:26浏览次数:40  
标签:Context iaiai 实例 CONTEXT print Android Main com


Android中有Context的概念,想必大家都知道。Context可以做很多事情,打开activity、发送广播、打开本包下文件夹和数 据库、获取classLoader、获取资源等等。如果我们得到了一个包的Context对象,那我们基本上可以做这个包自己能做的大部分事情。
那我们能得到吗?很高兴的告诉你,能!
Context有个createPackageContext方法,可以创建另外一个包的上下文,这个实例不同于它本身的Context实例,但是功能是一样的。
这个方法有两个参数:
1。packageName 包名,要得到Context的包名
2。flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。 CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思 是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。
下面给个小例子,执行另外一个包里面的某个类的方法。
另外一个包的包名是com.iaiai,类名Main,方法名print,代码如下:

package com.iaiai;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

class Main extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}

public void print(String msg) {
Log.d("Main", "msg:" + msg);
}

}



本包的调用Main的print方法的代码块如下:


try {
Context c = createPackageContext("com.iaiai",
Context.CONTEXT_INCLUDE_CODE
| Context.CONTEXT_IGNORE_SECURITY);
// 载入这个类
Class clazz = c.getClassLoader().loadClass("com.iaiai.Main");
// 新建一个实例
Object owner = clazz.newInstance();
// 获取print方法,传入参数并执行
Object obj = clazz.getMethod("print", String.class).invoke(owner,
"Hello");
} catch (Exception e) {
}



ok,这样,我们就调用了com.iaiai包的Main类的print方法,执行结果,打印出了Hello。


怎么样,这只是一个调用其他包的代码的例子,我们获取到Context,还可以做很多事情,当然,题目所说的坏事,还是不要做为好。


标签:Context,iaiai,实例,CONTEXT,print,Android,Main,com
From: https://blog.51cto.com/u_15955464/6040286

相关文章

  • Android浏览器显示大分辨率图片的问题 分享
    很多人都发现android的浏览器显示大分辨图片会出现显示模糊的问题,我测试是超过100万像素(1024x1024)的图片就会出现模糊。在android的讨论网站上也有对......
  • android下的读写权限
    建立两个项目,一个是写数据_相关,一个是读数据_相关数据,写数据_相关            读数据_相关数据作用:对上面的项目的文件进行读写操作,看看是否能成......
  • 单元测试1(Androidf)
    步骤:incrment)。 --incrmentMathUtils类中的main方法直接测试,会有异常,如下:Ifyouwouldliketosubmitabugreport,pleasevisit:​​​  http://java.sun.co......
  • adb的常用命令(android debud bridge)
    android调试桥:adb命令使用需要在系统环境遍历中path中追加adb.exe的完整路径D:\IDE\adt-bundle-windows-x86-20130729\sdk\platform-toolsadbdevices列出所有的设备 ......
  • Android中的显示单位
     px(pixels)像素    一般HVGA代表320x480像素,这个用的比较多。 dip或dp(deviceindependentpixels)设备独立像素  这个和设备硬......
  • 单元测试2(android)
    在另一个Junit中测试工程的某一个方法。在Junit中的测试(JunitTest)MathUtils类中的incrment方法这时候,清单文件已经帮你配置好了<?xmlversion="1.0"encoding="utf-8"?><......
  • Android 测试
    黑盒测试:是以用户的角度,从输入数据与输出数据的对应关系出发进行测试的。白盒测试:又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。......
  • error:This Android SDK requires Andr...ate ADT to the latest version.
    这样的问题很好解决,一个升级ADT到指定版本或以上,另一个简单的办法是调低SDK版本找到android-sdk-windows\tools\lib下的plugin.prop文件修改其中的版本号,改为与所安装的AT......
  • Android 电话拨号
    以下案例模拟android电话拨号器的实现AndroidManifest.xml清单列表:<?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://sche......
  • Android Activity之间跳转相互传值
    Intent用法实例:1.无参数Activity跳转Intentit=newIntent(Activity.Main.this,Activity2.class);startActivity(it);2.向下一个Activity传递数......