目录

自诩方向是android方向的移动端开发工程师,却从来没有真正仔细了解过NDK,这里就详细的整理了解一下ndk是什么。
笼统的说,NDK和平时经常打交道的SDK对比:SDK为应用开发提供了一套全面的工具和接口,适用于大多数开发任务和应用程序类型。而NDK则提供了一种方法,允许开发者针对性能关键部分使用更底层的编程语言,以达到优化性能的目的。
NDK主要是为了允许开发者在性能敏感的应用部分使用C或C++进行编程,以此来提高应用的执行效率。这些性能敏感的部分通常包括复杂的数值计算、物理模拟、图形渲染等。NDK通过允许开发者直接访问系统硬件和进行底层操作来实现性能的优化。
大多数Android应用的开发仍然建议使用Java或Kotlin等高级语言,因为它们可以更加高效地利用Android平台提供的丰富API和管理应用的生命周期。这些高级语言运行在Android运行时(ART)之上,通过虚拟机管理内存和执行,简化了开发过程。使用NDK并不排除使用Java或Kotlin;相反,通常建议将它们结合起来使用,即在应用的大部分UI和高级逻辑中使用Java/Kotlin,在需要优化性能的部分使用C/C++。
NDK适用的场景包括但不限于游戏开发、多媒体处理(如视频编解码)、复杂的物理计算等领域。在这些领域,应用的性能直接影响用户体验,因此使用C/C++来优化这些计算密集型任务是非常有意义的。
build.gradle文件中配置NDK路径和CMake。这告诉Android Studio如何找到和使用NDK工具链来编译代码。src/main/cpp目录下。- #include
-
- JNIEXPORT jint JNICALL
- Java_com_example_myapp_MainActivity_addTwoIntegers(JNIEnv *env, jobject thiz, jint first, jint second) {
- return first + second;
- }
native。这些native方法就是调用本地代码的入口点。CMakeLists.txt文件中声明本地库,以便CMake知道如何编译本地代码。- // MainActivity.java
-
- public class MainActivity extends AppCompatActivity {
-
- // 加载包含native方法的库
- static {
- System.loadLibrary("native-lib");
- }
-
- // 声明native方法
- public native int addTwoIntegers(int first, int second);
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- // 调用native方法
- int sum = addTwoIntegers(3, 4);
- Log.d("MainActivity", "The sum is: " + sum);
- }
- }
native的方法时,它会执行C/C++文件中编写的相应本地代码。可以用纯C++开发一个应用吗?
笔者的讯息好像是不能
但是可以利用各种方式,一些额外工作,来用C++构建应用的各种地方、更多功能