如何在不使用 android_app* 的情况下获取 Cpp 的 ANativeActivity 指针

How to get ANativeActivity pointer un Cpp without using android_app*

在Android中,在我的Java应用程序中使用JNI,我需要ANativeActivity来管理资源。我的问题是我没有:

void android_main(struct android_app* state)

因为我只是使用 JNI 调用了一些函数。通常人们使用_

void android_main(struct android_app* app) 
{
    struct engine engine;
    ANativeActivity* activity = app->activity;
    std::string mApkWorkspacePath = activity->internalDataPath;
    AAssetManager* mApkAssetManager = activity->assetManager;
}

从结构中获取值。如何手动设置 ANativeActivity?

这个线程有点旧,但我最近一直在尝试解决同样的问题,我正在刷新一些旧的 NDK 代码,并且发现所有 NDK 示例都没有多大用处我是因为他们使用了这些新结构。我想我会在这里传递我的发现,因为文档和从这个角度处理问题的人都不是很清楚。

NDK 现在具有一系列帮助程序 classes(名为 'NativeActivity'),使 NDK 开发更容易 - 我怀疑我们都在做与这些帮助程序相同的事情,在我们自己的旧代码中。

'ANativeActivity' C++ 结构指的是 SDK 的这一部分新增的一种结构。它定义于 Java 对象 'NativeActivity' 中,它是 class 您的活动源自使用新的(至少从 2015 年开始)辅助函数和 classes。

因此,无法使用 'raw' NDK 调用获取此对象:不使用 NDK 的那部分的应用程序不存在此对象。 但是,您可以查看源代码(参见“NativeActivity.java' and 'android_app_NativeActivity.cpp”)并使用原始 NDK 调用复制它的功能,或者您可以改用辅助应用程序模型。