1.配置环境

  1.在项目SDKLocation里面下载NDK

  2. gradle.properties的文件末尾加上android.useDeprecatedNdk=true 

2.java代码和C代码的编写步骤及过程

  1.创建一个java类JNIUtils:

    public class JNIUtils {

      static {

        system.loadLibrary("so库的名字")

      }

      //java调C中的方法都需要用native声明且方法名必须和c的方法名一样

      public native String getString();

    }


  2.build 里面makeProject一下 就会看到在项目intermediates里面生成的class文件JNIUtils


  接下来我们打开Terminal,进到项目的main目录下

运行 javah -d jni -classpath 加上上文中JNIUtils的绝对路径 :如图


   3.如果你看到在main文件加下看到新创建的jni目录和名称命名的.h文件,就表示成功了

android studio 编译器版本 android studio编译so_so库

  注:这个文件不用做任何修改 是自动生成的 我们需要写一个c的文件在这个生成的jni目录下

  3.创建一个.c的文件 如上图 huazict.c:

    #include "coffee08_com_test_jni_JNIUtils.h"

    /**

     *上边的引用标签一定是.h的文件名加后缀,方法名一定要和.h文件中的名称一样

     */

Java_coffee08_com_test_jni_JNIUtils_getString //必须是Java+包名+类名+方法

      (JNIEnv *env,jobject obj){

      return (env)->NewStringUTF("这是我测试的jni");

    }

   

android studio 编译器版本 android studio编译so_java_02

  到了这里我们打开项目中的build.gradle 把项目对NDK的依赖加上


   到这里配置工作已经基本完成我们做下测试:

  public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      TextView textView = (TextView) findViewById(R.id.text);
      textView.setText(new JNIUtils().getString());
    }

  }

    ok,看下效果

        

android studio 编译器版本 android studio编译so_方法名_03

   4.到这里基本的工作都已经完成了,但是我们要的so库呢?so库直接拿来用就好了,而且不需要管理这些零碎的.c/.h文件

    我们打开app/build/intermediates/ndk/debug/lib .so文件就在这里

    

android studio 编译器版本 android studio编译so_so库_04

    ok,到此为止so库的环境搭建和基本配置都总结完了,关于so库的应用和具体功能实现敬请期待