`
chroya
  • 浏览: 661602 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多

      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的意思是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。


      下面给个小例子,执行另外一个包里面的某个类的方法。
      另外一个包的包名是chroya.demo,类名Main,方法名print,代码如下:

package chroya.demo;

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方法的代码块如下:

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

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

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

6
0
分享到:
评论
11 楼 yangmaolinpl 2013-08-06  
路过,学习了。
10 楼 wx7788250 2013-06-20  
    
9 楼 alexyu_yxj 2012-09-22  
yuanfentiank789 写道
请问楼主怎么知道其它包的类名的

反编译,一般act是不会被混淆的,因此可以通过反编译拿到这个类的源码,然后就可以做足够多的事情了
8 楼 anbrul 2012-05-16  
JavaJ2me 写道
//获取print方法,传入参数并执行 
Object obj = clazz.getMethod("print", String.class).invoke(owner, "Hello"
为什么把obj 打印出来,为什么是null值呢??但是log中已经打印出来Hello了。

因为print函数返回值是void
7 楼 yuanfentiank789 2012-03-31  
请问楼主怎么知道其它包的类名的
6 楼 _9527 2012-03-21  
么么哒
5 楼 JavaJ2me 2012-03-09  
//获取print方法,传入参数并执行 
Object obj = clazz.getMethod("print", String.class).invoke(owner, "Hello"
为什么把obj 打印出来,为什么是null值呢??但是log中已经打印出来Hello了。
4 楼 chroya 2011-01-07  
ableouou 写道
这个需要设置 android:sharedUserId 属性吧?

不需要的
3 楼 ableouou 2011-01-07  
这个需要设置 android:sharedUserId 属性吧?
2 楼 chroya 2010-11-29  
marine8888 写道
非常感谢,正要用到这个方法。。随便问下,在杭州做android 薪水怎样啊?

在杭州做android薪水不高,所以准备跳了,呵呵。
1 楼 marine8888 2010-11-29  
非常感谢,正要用到这个方法。。随便问下,在杭州做android 薪水怎样啊?

相关推荐

    反射获取Context的实例

    本文将深入探讨如何通过反射获取`Context`的实例,并展示如何利用反射实现一个集成`Toast`的工具类。这在某些场景下非常有用,比如当我们需要在没有直接访问`Context`的情况下显示`Toast`消息。 首先,让我们了解`...

    通过反射获取Context实例的Demo

    本示例"通过反射获取Context实例的Demo"将展示如何在没有直接Context引用的情况下,通过反射来获取Context。 首先,我们需要了解反射的基本概念。反射是Java提供的一种能够在运行时检查类、接口、字段和方法的能力...

    Android获取其他包的Context实例代码

    本文将详细介绍如何在Android中获取其他包的Context实例,并探讨其可能的应用场景以及安全问题。 首先,Android提供了`Context.createPackageContext()`方法来创建一个特定包的Context实例。这个方法接收两个参数:...

    Android全局获取Context实例详解

    Android全局获取Context实例详解 Android全局获取Context实例是Android开发中一个常见的问题。Context是Android中一个非常重要的概念,它提供了访问应用程序级别的资源和服务的能力。获取Context实例是非常必要的,...

    谈谈Android里的Context的使用

    大家好,今天给大家分享一下Android里的Context的一些用法. 这里大致可以分为两种:一是传递Context参数,二是调用全局的Context. 其实我们应用启动的时候会启动Application这个类,这个类是在AndroidManifest.xml...

    Android Studio动态加载Fragment和获取实例的方法

    Android Studio 动态加载 Fragment 和获取实例的方法 Android Studio 是一个功能强大的集成开发环境(IDE),它提供了许多实用的功能和工具来帮助开发者快速构建高质量的 Android 应用程序。在 Android 开发中,...

    Android编程获取全局Context的方法

    本篇文章将详细介绍如何在Android中通过自定义Application类来实现全局Context的获取。 首先,我们需要创建一个自定义的Application类。在Java包`com.example.testapplication`下,创建名为`MyApplication`的类,...

    Android获取应用程序的包大小\缓存大小\数据大小

    在Android开发中,有时我们需要获取应用程序的包大小、缓存大小以及数据大小,这有助于我们进行性能优化、存储管理或者用户信息展示。本教程将详细讲解如何利用反射和AIDL技术来实现这一功能。 首先,我们需要理解...

    Android获取GPS完整实例

    通过`getSystemService(Context.LOCATION_SERVICE)`获取该服务实例,然后可以注册监听器来接收GPS更新。 3. **LocationListener接口**: 实现`LocationListener`接口,重写`onLocationChanged(Location location)`...

    Android的context使用

    本文将详细介绍Android中Context的使用,并通过一个简单的Demo展示如何在工具类和View中灵活地获取和使用Context。 首先,我们要明白Context的三种主要类型:Application、Activity和Service。它们都是Context的...

    获取Android应用包名

    如果你需要在代码中获取应用包名,可以使用`Context`对象提供的方法`getPackageName()`。以下是一个示例: ```java String packageName = getApplicationContext().getPackageName(); ``` 在运行时,你也可以通过`...

    Android部分源码——content包

    在这个压缩包中,包含了与`content`包相关的源代码,特别是`Context`类和其他与其密切相关的类。下面我们将深入探讨这些关键知识点。 首先,`Context`是Android中的一个基础类,它提供了与应用程序运行环境交互的...

    Android中获取电池电量实例代码

    /** * 广播接受者 */ class BatteryReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub //判断它是否是为电量变化的...

    Android Context使用例子.

    通过`Context`,我们可以获取系统资源、启动其他组件、访问硬件特性等。 二、`Context`的类型 1. **Application Context**:全局应用程序上下文,代表整个应用程序,一般通过`getApplicationContext()`获取。它是...

    android获取GPS经纬度,并根据经纬度获取准确地址( 纯原生)

    总结来说,获取Android设备的GPS经纬度并转换为地址,需要利用Location服务获取定位信息,然后通过Geocoding API或`Geocoder`将坐标解析为可读的地址。在实际应用中,还需要考虑位置权限的获取、GPS状态的检查以及...

    在项目的任何地方轻松获取Context的demo

    在Android开发中,Context是应用程序的核心组件之一,它提供了与Android系统交互的接口,使得开发者可以在应用程序的不同组件之间共享状态信息。"在项目的任何地方轻松获取Context的demo"旨在展示如何高效、安全地在...

    Android获取Wifi列表

    在Android系统中,获取Wi-Fi列表是开发移动应用时常见的需求,这主要涉及到与网络连接相关的API交互。本文将详细讲解如何在Android中获取Wi-Fi列表,并根据信号强度来显示不同的网络图标。 首先,要获取Wi-Fi列表,...

    Android 获取当前位置,地区名称完整实

    通过`getSystemService(Context.LOCATION_SERVICE)`获取`LocationManager`实例,然后注册监听器,如`LocationListener`,来接收位置更新。 3. **GPS与网络定位**: `LocationManager`提供了多种定位提供者,如GPS...

    Android下获取开机时间

    ### Android下获取开机时间 在Android开发中,有时我们需要获取设备的开机时间,这不仅可以用于统计设备的运行状态,还可以帮助我们实现某些特定的功能需求,比如应用启动时长监测、系统稳定性评估等。 #### 实现...

Global site tag (gtag.js) - Google Analytics