当前位置:   article > 正文

Android JNI调试总结

Android JNI调试总结

1、确保NDK和CMake已经安装

   

   新建能编译APK的工程,工程中添加相关ndk目录

  

2、添加C++模块

添加完成后,工程目录自动更新,build.gradle导入了so编译器

修改build.gradle中添加相关gcc编译器如下

externalNativeBuild {
    cmake {

        abiFilters 'arm64-v8a', 'armeabi-v7a'
        cppFlags ''
    }
}

3、添加Jni java部分代码

新建JniTest.java文件,相关代码如下

package com.example.test;
import android.util.Log;
public class JniTest {
    private static final String TAG="JniTest";
    static {
        try {
            System.loadLibrary("test");
        } catch (Exception e){
            Log.e(TAG,"load jni failed " + e);
        }
    }
    public native int add(int x, int y);
    public void soCallBackTest(String from) {
        Log.d(TAG,"soCallBackTest " + from);
    }
}

注意一点 这个地方名字一样

4、添加Jni C++部分代码

执行通过javah -jni com.example.test.JniTest生成com_example_test_JniTest.h

将其剪切到 E:\Code\Test\app\src\main\cpp\

编写test.cpp如下

#include "com_example_test_JniTest.h"
#include <android/log.h>

#define TAG "Jni"

JNIEXPORT jint JNICALL Java_com_example_test_JniTest_add
        (JNIEnv *env, jobject obj, jint num1, jint num2){
    __android_log_print(ANDROID_LOG_DEBUG, TAG,"%s jin1 = %d, jin2 =%d", __FUNCTION__ ,num1, num2);
    int result = num1 + num2;
    /*from c to java*/
    jclass jclazz = env ->FindClass("com/example/test/JniTest");
    jmethodID jmethodIds = env ->GetMethodID(jclazz, "soCallBackTest", "(Ljava/lang/String;)V");
    jobject jobject1 = env->AllocObject(jclazz);
    jstring jst = env->NewStringUTF("I am Android!");
    env ->CallVoidMethod(jobject1, jmethodIds, jst);
    return result;
}

5、添加调用代码测试

编译APK后进行安装调试

CMake官方网站:https://cmake.org/getting-started/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/365810
推荐阅读
相关标签
  

闽ICP备14008679号