vgo*_*anz 5 c++ java-native-interface android
在Android中,在我的Java应用程序中使用JNI,我需要ANativeActivity来管理资源.我的问题是我没有:
void android_main(struct android_app* state)
Run Code Online (Sandbox Code Playgroud)
因为我只是使用JNI调用一些函数.通常人们使用_
void android_main(struct android_app* app)
{
struct engine engine;
ANativeActivity* activity = app->activity;
std::string mApkWorkspacePath = activity->internalDataPath;
AAssetManager* mApkAssetManager = activity->assetManager;
}
Run Code Online (Sandbox Code Playgroud)
从结构中获取值.如何手动获取ANativeActivity?
这个线程有点旧,但我最近一直在尝试解决同样的问题,我正在刷新一些较旧的 NDK 代码,并发现所有 NDK 示例由于它们的使用而对我没有多大用处这些新结构。我想我应该在这里传递我的发现,因为从文档来看,对于从这个角度解决问题的人来说,这并不是那么清楚。
NDK 现在提供了一系列帮助程序类(名为“NativeActivity”),使 NDK 开发变得更容易 - 我怀疑我们都在自己的旧代码中做与这些帮助程序相同的事情。
“ANativeActivity”C++ 结构是指 SDK 这部分的新结构。它在 Java 对象“NativeActivity”中定义并引用它,该对象是您的活动通过使用新的(无论如何,截至 2015 年)辅助函数和类派生的类。
因此,无法使用“原始”NDK 调用获取此对象:对于不使用 NDK 的该部分的应用程序来说,它不存在。不过,您可以查看源代码(请参阅“ NativeActivity.java ”和“ android_app_NativeActivity.cpp ”)并使用原始 NDK 调用复制其功能,或者您也可以改用辅助应用程序模型。