美文网首页
Android NDK开发小技巧

Android NDK开发小技巧

作者: itfitness | 来源:发表于2019-07-18 17:49 被阅读0次

    目录

    目录

    快速生成JNI头文件

    打开Android Studio:File->Settings->External Tools,点击右侧绿色加号。



    填写上如下信息:


    Name: jni create
    Program: javah
    Parameters: -classpath . -jni -encoding $FileEncoding$ -d $ModuleFileDir$/src/main/cpp $FileClass$
    Working directory: $ModuleFileDir$\src\main\java
    

    然后找到带有声明Native方法的类,右键->External Tools->jni create:



    执行成功后会在cpp文件夹下生成头文件,这样就避免了我们自己写方法容易产生错误的缺陷。


    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_hehuidai_ndkdemo01_MainActivity */
    
    #ifndef _Included_com_hehuidai_ndkdemo01_MainActivity
    #define _Included_com_hehuidai_ndkdemo01_MainActivity
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_hehuidai_ndkdemo01_MainActivity
     * Method:    stringFromJNI
     * Signature: ()Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_hehuidai_ndkdemo01_MainActivity_stringFromJNI
      (JNIEnv *, jobject);
    
    /*
     * Class:     com_hehuidai_ndkdemo01_MainActivity
     * Method:    add
     * Signature: (II)I
     */
    JNIEXPORT jint JNICALL Java_com_hehuidai_ndkdemo01_MainActivity_add
      (JNIEnv *, jobject, jint, jint);
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    

    利用VS2015进行代码提示

    在Android Studio中进行NDK开发最蛋疼的就是C语言代码不提示,但是后来在学习C语言的时候无意中发现了可以通过Visual Studio2015进行代码提示,具体操作如下:
    1.新建一个Android静态库项目



    2.在项目中新建Test.c文件(当然这里的文件名可以随意起)



    3.在Test.c文件中引入jni.h头文件,然后将上面生成的头文件里声明的方法进行实现,当然这是有代码提示的
    #include<jni.h>
    JNIEXPORT jstring JNICALL Java_com_hehuidai_ndkdemo01_MainActivity_stringFromJNI
    (JNIEnv * env, jobject obj) {
        return (*env)->NewStringUTF(env, "我是C哈哈哈");
    }
    
    /*
    * Class:     com_hehuidai_ndkdemo01_MainActivity
    * Method:    add
    * Signature: (II)I
    */
    JNIEXPORT jint JNICALL Java_com_hehuidai_ndkdemo01_MainActivity_add
    (JNIEnv * env, jobject jobj, jint a, jint b) {
        return a + b;
    }
    

    4.将编辑好的方法复制到native-lib.c文件中


    #include <jni.h>
    #include "com_hehuidai_ndkdemo01_MainActivity.h"
    
    JNIEXPORT jstring JNICALL Java_com_hehuidai_ndkdemo01_MainActivity_stringFromJNI
    (JNIEnv * env, jobject obj) {
        return (*env)->NewStringUTF(env, "我是C哈哈哈");
    }
    
    /*
    * Class:     com_hehuidai_ndkdemo01_MainActivity
    * Method:    add
    * Signature: (II)I
    */
    JNIEXPORT jint JNICALL Java_com_hehuidai_ndkdemo01_MainActivity_add
    (JNIEnv * env, jobject jobj, jint a, jint b) {
        return a + b;
    }
    

    5.在MainActivity中对方法进行调用

    public class MainActivity extends AppCompatActivity {
        static {
            System.loadLibrary("native-lib");
        }
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            TextView textView = findViewById(R.id.sample_text);
            textView.setText(stringFromJNI()+add(5,8));
        }
        public native String stringFromJNI();
    
        /**
         * 加法
         */
        public native int add(int a,int b);
    }
    

    运行效果如下:


    VS引入第三方依赖

    虽然我们可以通过创建Android项目来解决NDK开发不提示的问题,但是如果我们的项目中使用了第三方的库该怎么办呢?这里以OpenCV为例我来演示一下如何使OpenCV的函数也有提示。
    1.选中项目按Alt+Enter键,然后选择VC++目录



    2.对包含目录进行编辑



    3.点击文件夹小图标,然后进行文件夹路径的选择,选择库的include文件夹

    相关文章

      网友评论

          本文标题:Android NDK开发小技巧

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