将 class 注入 android jni 中的 JNIEnv

Injecting class into the JNIEnv in android jni

C++代码:

extern "C" JNIEXPORT void JNICALL
Java_com_example_afl_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    
    // env->DefineClass(...)
}

我正在从 Java 端代码调用上述函数:

public class MainActivity extends AppCompatActivity {

    static {
        System.loadLibrary("native-lib");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        stringFromJNI();  // call cpp function


    }

    public native String stringFromJNI();
}

我的问题是关于cpp代码中的env->DefineClass(...)
如您所见,android VM 将 JNIEnv *env 传递给我的本机函数,因此通过使用 env 指针,我可以访问我所有的 java classes 和我可以使用它们(我可以访问我的所有 java 端 classes 并且我可以创建实例对象并执行所有操作)。
但是如何访问另一个 apk 中的 class 并且它在另一个包名称中?
我想反编译目标 apk 并复制 class 并使用 env->DefineClass 函数将 class 注入我的 env 但我不知道如何完成此任务。
感谢您的回复:)

不可能。 Android does not implement DefineClass:

All JNI 1.6 features are supported, with the following exception:
DefineClass is not implemented. Android does not use Java bytecodes or class files, so passing in binary class data doesn't work.

即使 有效,您应用的用户很可能没有访问其他应用程序 .apk 的权限。