Android JNI调试总结

本文介绍了如何在Android项目中使用NDK和CMake来创建和编译C++模块,并通过JNI接口与Java交互,包括添加C++源代码、配置build.gradle、生成JNI头文件以及测试调用过程。
摘要由CSDN通过智能技术生成

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/

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值