美文网首页
Android studio 编译NDK Android stu

Android studio 编译NDK Android stu

作者: 禄子_c79b | 来源:发表于2020-02-27 15:51 被阅读0次

    <meta charset="utf-8">

    直接上干货吧
    第1步:新建一个Android Studio 工程 TestJNI。新建一个JNITest.java文件,内容如下:
    public class JNITest {
        static {
            System.loadLibrary("JNITest");
        }
        public static native String getJniTestString();
    }
    
    

    解释一下,先创建一个native的方法,JNITest名字可以随便写,但是最后要和so文件的名字一样。

    第2步:生成jni头文件,咱们这里可以配置一下宏命令,方便以后使用
    1. 配置宏命令 File-->Setting-->Tools-->External Tools
    image

    需要添加的我都放下面了,可以直接复制过去

    Program: javah
    Parameters: -v -jni -d $ModuleFileDir$/src/main/jni $FileClass$
    Working directory: $SourcepathEntry$
    
    

    2.保存之后咱们看下怎么使用刚才配置的命令,在刚才咱们创建好的类上面右键 External Tools --> javah 这个也就是上面咱们配置的名字,如下图:

    image

    完成之后看下有没有生成成功,你会发现已经在main文件下面多了一个jni的文件夹,里面有一个com_umfintech_testjni_JNITest.h 这个名字是通过咱们报名和类名生成的,如下图:

    image
    第3步:在jni目录创建.c.cpp.mk文件

    1.先创建JNITest.c文件,第一行固定写法,第二行复制刚才生成的.h的文件名,方法还是继续复制.h中的,如下:

    #include "jni.h"
    #include "com_umfintech_testjni_JNITest.h"
    JNIEXPORT jstring JNICALL Java_com_umfintech_testjni_JNITest_getJniTestString
      (JNIEnv * env, jclass object){
        return (*env)->NewStringUTF(env,"测试 jni");
      }
    
    

    2.创建Android.mk文件,如下图

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)
    #编译生成的文件的类库叫什么名字,就是刚才我前面提到的名字
    LOCAL_MODULE    := JNITest
    #要编译的c文件,上面咱们刚创建的
    LOCAL_SRC_FILES := JNITest.c
    include $(BUILD_SHARED_LIBRARY)
    
    

    3.创建Application.mk文件,如下图

    APP_ABI := all
    
    
    第4步:配置NDK

    1.在项目的根目录的gradle.properties文件中加上以下代码,表示我们要使用NDK进行开发:

    android.useDeprecatedNdk=true
    
    

    2.在项目local.properties中加入ndk的路径:

    ndk.dir=D\:\\android-ndk-r16b   // NDK路径
    
    

    3.在appbuild.gradledefaultConfig中添加如下配置:

    ndk {
        moduleName "MyJni"
        abiFilters "armeabi", "armeabi-v7a", "x86"//cpu的类型
    }
    sourceSets.main {
        jni.srcDirs = ['libs']
    }
    
    

    注意:moudleName这是我们在gradle文件中一样的,必须保持一致才能找到。

    第5步:配置ndk-build,生成.so文件

    1.配置ndk-build命令

    image
    Program:D:\android-ndk-r16b\ndk-build.cmd
    Working directory: $ModuleFileDir$\src\main\
    
    

    注意:Program设置自己ndk的路径

    2.通过ndk-build命令生成.so文件

    在jni目录右键 External Tools --> ndk-build,会在main下面生成相应的.so文件,如下图:

    image
    第6步:java调用.so文件

    main下面创建jniLibsarmeabi文件复制进去,如下图:

    image

    看下activity中怎么调用

    public class MainActivity extends AppCompatActivity {
        private TextView text;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            text = findViewById(R.id.text);
            text.setText(JNITest.getJniTestString());
        }
    }
    

    作者:越努力越幸运阳
    链接:https://www.jianshu.com/p/4c7d9a10933b
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

          本文标题:Android studio 编译NDK Android stu

          本文链接:https://www.haomeiwen.com/subject/hvfxhhtx.html