1.环境如下:
Ubuntu 16.04
android 虚拟机 5.1.0
genymotion 2.11.0
xposed_installer 82 版本
android-sdk 22 (针对 android5.1 的)
2.情况如下:
android 虚拟机已 root,刷好了相关的包,包括 http://blog.csdn.net/CrystalIFDE/article/details/53888203 其中提到的所有软件包,xposed_installer 已经激活,但是在写完 xposed 的测试代码的时候总是报错,且经过我测试,其报错原因大致是由于读取不到 android 模拟器中的部分文件系统
E/libprocessgroup: failed to make and chown /acct/uid_10062: Read-only file system
导致我后续要操作的对象,都是一个 null 的对象,后续的 xposed 报错则为:
E/Xposed: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String)' on a null object reference
3.xposed 代码如下:
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class xposed implements IXposedHookLoadPackage{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpParam) throws Throwable {
XposedBridge.log("laozi is running");
XposedBridge.log("beging xposed test .....");
Class clazz = lpParam.classLoader.loadClass("com.tingyun.root.xposed_activity.MainActivity");
XposedHelpers.findAndHookMethod(clazz,"toastMessage", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("before xposed ...");
super.beforeHookedMethod(param);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable{
param.setResult("你已被劫持");
XposedBridge.log("after xposed !!!");
}
}
);
}
}
MainActivity.java:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
private Button btChange;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fuck);
btChange = (Button) findViewById(R.id.button1);
btChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, toastMessage(), Toast.LENGTH_SHORT).show();
}
});
}
public String toastMessage() {
return "我未被劫持";
}
}
4.问题如下: 想请教下大家如何解决这个问题,是使用另外一种 android 虚拟机(linux 下还有什么类似的,求推荐~)?还是 genymotion 有什么能修改这个文件权限的方法?
其他配置文件如果有什么需要注意的,希望各位大哥指出来一下,谢谢了,我会尽快回复您的!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.