- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
Android NDK刚刚得到显着扩展,包括支持完全使用 native C/C++ 代码编写 Android 应用程序。现在可以使用 native 代码捕获键盘和触摸屏上的输入事件,还可以使用新的 NativeActivity 类在 C/C++ 中实现应用程序生命周期。
鉴于所有扩展的原生功能,是否值得完全绕过 Java 并使用原生代码编写 Android 应用程序?
最佳答案
NDK 本身并不是原生的。它在很大程度上是 Android SDK 的 JNI 包装器。使用 NativeActivity 为您提供了一种处理某些应用程序生命周期事件的便捷方式,并在顶部添加您自己的 native 代码。 ALooper、AInputQueue 等都是 Java SDK 对应物的 JNI 包装器,其中一些带有额外的代码,这些代码是私有(private)的,真实应用程序无法访问。
当谈到 Android 开发时,没有完全用原生 C++ 编写应用程序这样的事情 - 您将(在我能想到的每个实际应用程序案例中)总是需要使用 Android API:s,它们是很大程度上是纯 Java。无论您是通过 NDK 提供的包装器还是您自己创建的包装器来使用这些,都不会真正改变这一点。
因此,回答您的问题:不,这是不值得的,因为您最终会为 SDK 调用编写 JNI 包装器,而不是将 JNI 包装器编写到您自己的 Java 方法中,这些方法用更少的代码做同样的事情,更简单的代码和更快的代码。例如,使用“纯 C++”显示一个对话框,涉及相当多的 JNI 调用。只需通过 JNI 调用执行相同操作的 Java 方法,您的代码就会更快(一次 JNI 调用),而且可以说,代码更易于维护。
要完全了解您可以做什么,您确实必须检查 Android 源代码。从 NDK 中提供的 native_app_glue.c 开始,然后继续 AActivity、ALooper、AInputQueue 等的操作系统实现。谷歌代码搜索在这方面有很大帮助。 :-)
如果在 Java 中很容易做到,并且包含许多调用,那么通过 JNI 调用一个方法来完成这一切,而不是编写所有额外的代码来通过多个 JNI 调用来完成它。在合理的情况下尽可能多地保留现有的 C++ 代码。
关于Android NativeActivity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4372899/
我有一个单独运行的 NativeActivity,我尝试添加一些 SDK(更准确地说是 Admob/Chartboost/Facebook)。 另一方面,只有当我们在参数中传递一个 Activity
Android NDK刚刚得到显着扩展,包括支持完全使用 native C/C++ 代码编写 Android 应用程序。现在可以使用 native 代码捕获键盘和触摸屏上的输入事件,还可以使用新的 N
在我的 Android 设备(使用 JellyBean 4.1.2)上有一个错误: 当我启动特定的 NativeActivity(从我的应用程序加载游戏的 libretroarch-activity)
有什么方法可以从 Execute 中看到 NativeActivity 的父事件的类型?方法 ? 最佳答案 是的,您可以执行以下代码块,它会返回内部的值 Parent属性(property)——这将是
我从 JavaActivity 调用 NativeActivity。我的 NativeActivity 的入口点是 android_main(struct android_app* state) 最
要使用 gdb 在 android 应用程序中调试 native 代码,首先我需要启动基于 sdk 的应用程序并在使用 native 代码加载库之前将其停止在断点处,之后我需要启动 gdb,依此类推.
我有一个原生android应用,那么入口main就是android_main。我的问题:是否可以使用 NativeActivity 生成另一个 Activity ?我必须只插入代码 java con
我正在将纯 C++ 游戏移植到 Android,由于我的目标是 Android 3.0+ 平板电脑,因此我选择使用 NativeActivity 以完全避免使用 Java。但是,我看不到任何允许我写入
环境…… 我有一个全新的 Visual Studio 2015 Android NDK 解决方案。这包含 2 个项目(由 visual studio 生成的默认模板代码): 原生 Activity 。
我正在 NativeActivity 上开发应用程序(仅限 C/C++)。 我想禁用屏幕超时。 你知道怎么做吗? 最佳答案 如果 OP 仍在寻找答案,或者像我这样的人在搜索时发现了这个主题,请按以下步
我有一个使用 NativeActivity 的应用程序。我想调用 Java 来做一些需要上下文的事情(例如,访问 TelephonyManager 以查询 IMEI)。 如何为我的 Activity
我在我的应用程序中使用键盘时遇到问题,该应用程序是一个纯 native 应用程序(基于 Android NDK 中提供的native-activity 示例)。 我有这段 Java 代码来显示键盘:
我尝试仅使用 C++ 将我的所有应用程序从 IOS 和 ANDROID 与 JAVA EGL 移植到 Android 设备上。 我刚刚遇到的一件事是“ fatal error :android_nat
我想要一个使用 NativeActivity 的真正的全屏 android 应用程序。我在 AndroidManifest.xml 中设置主题“Theme.Black.NoTitleBar.Fulls
有什么方法可以将我的源代码(包括所有 .h .cpp 和 .mk 文件)移出项目文件夹?换句话说,我想将 jni 文件夹的内容移出 android 项目文件夹。现在,我的项目的物理结构如下所示: ..
NativeActivity 是否可以访问 GestureDetector 并将事件绑定(bind)到它? 我认为这可能必须通过 JNI,很痛苦。 最佳答案 是的,您必须使用 JNIEnv 来访问 G
我正在使用带有 native_app_glue 的 NativeActivty 为 Android 编写一个 OpenGL 游戏。很难确定何时是删除堆分配对象和 OpenGL 分配对象的最佳时机。 在
有谁知道我在哪里可以找到用于 android NativeActivity 的所有 native c/c++ 方法和函数的列表。我似乎无法在 google/android 网站上的任何地方找到列表,过
我正在尝试在 NativeActivity 中使用自定义 C# 表达式 它可以很好地处理像 Condition = new CSharpValue("1 == 1") 这样的简单表达式 它不适用于这样
我有一个事件将操作安排到外部 API,然后只有在此外部 API 完成时才必须继续,这由事件指示。我目前使用 NativActitivy。 我的想法是设置一个书签,然后注册一个触发书签的事件处理程序。可
我是一名优秀的程序员,十分优秀!