【发布时间】:2022-01-21 23:52:52
【问题描述】:
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 类并且我可以使用它们(我可以访问我所有的java 端类并且我可以创建实例对象并做所有事情)。
但是如何访问另一个 apk 中的类并且它位于另一个包名中?
我想反编译目标 apk 并复制该类并使用 env->DefineClass 函数将该类注入我的 env 但我不知道如何完成此任务。
感谢您的任何回复:)
【问题讨论】:
标签: java android c++ c apktool