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/

相关推荐

  1. 安陆FPGA调试中遇到的问题总结

    2024-04-03 06:24:06       70 阅读
  2. 调试工具gdb的常用命令总结

    2024-04-03 06:24:06       71 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-03 06:24:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-03 06:24:06       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-03 06:24:06       82 阅读
  4. Python语言-面向对象

    2024-04-03 06:24:06       91 阅读

热门阅读

  1. 深入理解Spring Boot Controller层的作用与搭建过程

    2024-04-03 06:24:06       38 阅读
  2. el-table的复选框勾选整行变色

    2024-04-03 06:24:06       35 阅读
  3. SQL原理之Join算法详解(含伪代码算法示例)

    2024-04-03 06:24:06       36 阅读
  4. P2404 自然数的拆分问题

    2024-04-03 06:24:06       34 阅读
  5. 四、Mybatis-查询与删除

    2024-04-03 06:24:06       38 阅读
  6. Rust 的 termion 库控制终端光标的位置

    2024-04-03 06:24:06       42 阅读
  7. 亚远景科技-ASPICE评估目的

    2024-04-03 06:24:06       38 阅读
  8. LeetCode热题Hot100 - 正则表达式匹配

    2024-04-03 06:24:06       32 阅读
  9. 关于Mac配置逆向工程

    2024-04-03 06:24:06       35 阅读
  10. 力扣爆刷第110天之CodeTop100五连刷36-40

    2024-04-03 06:24:06       38 阅读
  11. uni-app选择多张图片上传并压缩——2024.04.02

    2024-04-03 06:24:06       35 阅读