• Android Studio NDK编程初探


    继上一篇学习了如何使用NDK编译FFMPEG后,接下来就是要学习如何在Android Studio中使用了。

    经过参考和一系列的摸索,记录下具体步骤。

    创建C++ Support的Android Studio工程

    1. 创建C++ Support的Android Studio工程,记得勾选,其他默认下一步就好

      chuangjiantu

    2. 默认创建的项目会自动创建一个native-lib.cpp的文件,这个文件后面会编译成对应的so文件。在MainActivity中,系统默认添加了如下native代码:

      1
      public native String ();
    3. 打开native-lib.cpp文件,可以看到里面含有一个native方法。方法的命名格式Java_包名_类名_方法名中间的点分号改为下划线。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      #include <string>
      extern "C"
      JNIEXPORT jstring
      JNICALL
      Java_com_example_simonzheng_ndktest_MainActivity_stringFromJNI(
      JNIEnv *env,
      jobject ) {
      std::string hello = "Hello from C++";
      return env->NewStringUTF(hello.c_str());
      }
    4. 编译运行默认的项目程序,这里假如之前没有按照NDK环境的话,Gradle会报错。只需要按照上一篇的步骤在sdk中下载好NDK所需的依赖环境即可。运行成功后可以在模拟器中看到默认的App,显示”Hello from C++”。

    书写自己的c++文件并调用

    1. 回到Android项目,在MainActivity中添加自己的native方法。最后在activity_main.xml文件中添加一个TextView,在MainActivity中设置这个TextView的显示文本

      大专栏  Android Studio NDK编程初探t java">
      1
      public native String myTest2();
      1
      2
      TextView tv1 = findViewById(R.id.myTest_test);
      tv1.setText(myTest());
    2. Android Studio会自动提示

      tishi

      可以选择直接在默认的native-lib.cpp文件中创建,或者自己创建新的cpp文件。这里选择了自己创建新文件。

    3. 创建一个叫mytest-lib.cpp的文件,并实现方法,这里注意方法的命名规则:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      #include <string>
      extern "C"
      JNIEXPORT jstring JNICALL
      Java_com_example_simonzheng_ndktest_MainActivity_myTest2(JNIEnv *env, jobject instance) {
      // TODO
      std::string myTest = "Hello My Test Library!";
      return env->NewStringUTF(myTest.c_str());
      }
    4. 然后编译项目会发现,对应的会生成mytest-lib.cpp.o文件

      cppo

    5. 别忘记回到MainActivity中加载这个库

      1
      2
      3
      static {
      System.loadLibrary("mytest-lib");
      }
    6. 编译运行项目,可以在模拟器中看到对应的效果

      screenshot

  • 相关阅读:
    linux学习之路7 linux下获取帮助
    51nod 1002 数塔取数问题
    51nod 1002 数塔取数问题
    51nod 1001 数组中和等于K的数对
    51nod 1001 数组中和等于K的数对
    linux学习之路6 Vi文本编辑器
    linux学习之路6 Vi文本编辑器
    计算误差——ACM计算几何中的精度问题
    计算误差——ACM计算几何中的精度问题
    daily_journal_3 the game of thrones
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12326764.html
Copyright © 2020-2023  润新知