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 有什么能修改这个文件权限的方法?
其他配置文件如果有什么需要注意的,希望各位大哥指出来一下,谢谢了,我会尽快回复您的!
1
bluesky139 2018-03-13 17:24:18 +08:00 1
不清楚楼主遇到的是什么问题,一般情况下:
1. 新建一个 Genymotion 虚拟机,启起来进入系统,不要做多余的操作。 2. 到 https://dl-xda.xposed.info/framework/ 去下一个对应 API level 和 abi 的刷机包(永远下最新的),拖到虚拟机上刷入。 3. 到 https://forum.xda-developers.com/showthread.php?t=3034811 去下 XposedInstaller (只有最新的),用 adb 装上。 4. 关掉虚拟机重新打开,到 XposedInstaller 中查看情况,再写点代码测试,一般情况下都没问题。 |
2
tingyunsay OP @bluesky139 我是按照这样的步骤做的,但是最后总是报错说是文件系统没有权限,就是说 genymotion 起开的虚拟机中的文件夹都是只读的文件系统,没法操作
且 xposed 是都已经生效了的,但只打出了部分的日志,针对 MainActivity.java 中任何变量的操作都是 null (没有这个对象)。我在 adb shell 进去之后,发现在 acct 这个目录是 drwxr-xr-x 的权限,即:没有 write 权限,我手动更改也不影响其报错只读的错误 failed to make and chown /acct/uid_10062: Read-only file system 我打算重新安装 genymotion 再试试看,谢谢你啦! |
3
woyaojizhu8 2018-03-29 15:19:10 +08:00
要不要试试 android x86 或者 openthos
|
4
tingyunsay OP 忘了回来结帖了,sorry,找到问题了,在 app/build.gradle 这个文件中忘了注释掉带有 implementation 的所有行,遗漏了一条:implementation files('libs/api-82-sources.jar') ,注释了 api-82.jar ,但是忘了把 source 注释掉了,导致使用的库文件调用失败。
并且再提一句:使用的 xposedinstaller 和其中的刷的 sdk 包都应该是最新的,我在使用 v89 的包一切正常,但是 v85 的包还是会报 api 错误 |