xposed 框架在 genymotion 虚拟机上的运行报错

2018-03-11 19:08:11 +08:00
 tingyunsay

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 有什么能修改这个文件权限的方法?

其他配置文件如果有什么需要注意的,希望各位大哥指出来一下,谢谢了,我会尽快回复您的!

1973 次点击
所在节点    问与答
4 条回复
bluesky139
2018-03-13 17:24:18 +08:00
不清楚楼主遇到的是什么问题,一般情况下:

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 中查看情况,再写点代码测试,一般情况下都没问题。
tingyunsay
2018-03-14 10:38:35 +08:00
@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 再试试看,谢谢你啦!
woyaojizhu8
2018-03-29 15:19:10 +08:00
要不要试试 android x86 或者 openthos
tingyunsay
2018-04-08 16:24:33 +08:00
忘了回来结帖了,sorry,找到问题了,在 app/build.gradle 这个文件中忘了注释掉带有 implementation 的所有行,遗漏了一条:implementation files('libs/api-82-sources.jar') ,注释了 api-82.jar ,但是忘了把 source 注释掉了,导致使用的库文件调用失败。
并且再提一句:使用的 xposedinstaller 和其中的刷的 sdk 包都应该是最新的,我在使用 v89 的包一切正常,但是 v85 的包还是会报 api 错误

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/437028

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX