Android Studio Jni开发

Android Studio Jni开发

Android studio配置

确保Android Studio安装下图中 sdk tools

1、自动配置ndk

新建工程时勾选 Include C++ support ,ndk开发环境会自动配置好

2、手动配置ndk开发环境
  • 在工程main文件夹下创建cpp文件夹

  • 在cpp文件下创建 CMakeLists.txt

CMakeLists.txt中的内容如下:

#设置最小的CMake编译版本,确保你能够顺利编译
cmake_minimum_required(VERSION 3.4.1)

#指定库名称,指定库是静态还是共享,并提供源代码的相对路径。
#您可以通过添加多个add.library()命令定义多个库,CMake为您构建它们。
#当您构建应用程序时,Gradle会自动使用您的APK打包共享库。

add_library( #指定库的名称
             helloJNI

             #将该库设置为一个共享库
             SHARED

             #提供源文件的相对路径
             com_yangc_jnicmarkapplication_JniUtils.cpp)

# 将预构建库链接到你的本地库中,这里的意思是将log库链接到helloJNI库中
target_link_libraries(helloJNI
                      android
                      log)
  • build.gradle中添加如下代码:

    android {
        compileSdkVersion 25
        buildToolsVersion "25.0.3"
        defaultConfig {
            ...
            externalNativeBuild {
                cmake {
                    abiFilters 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'arm64-v8a'
                }
            }
    
        }
        externalNativeBuild {
            cmake {
                path "src/main/cpp/CMakeLists.txt"
            }
        }
    }
    

至此,jni的开发环境已经配置好了,接下来定义native函数如下:

public class JniUtils {
    /**
     cd app/build/intermediates/classes/debug/
     javah com.yangc.jnicmarkapplication.JniUtils
     */
    static {
        System.loadLibrary("helloJNI");
    }
    public static native String getStringFromJni();
}

接着编译工程,在确保build中生成JniUtils.class 如下图中1:

接下来使用javah在Terminal中生成头文件,命令如下:

生成头文件命令

cd app/build/intermediates/classes/debug/
javah com.yangc.jnicmarkapplication.JniUtils

生成结果如上图中2

头文件拷贝的cpp文件夹下,同时创建cpp文件,就可以愉快的进行jni开发了。

生成的头文件代码:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_yangc_jnicmarkapplication_JniUtils */

#ifndef _Included_com_yangc_jnicmarkapplication_JniUtils
#define _Included_com_yangc_jnicmarkapplication_JniUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_yangc_jnicmarkapplication_JniUtils
 * Method:    getStringFromJni
 * Signature: ()Ljava/lang/String;// 签名
 */
JNIEXPORT jstring JNICALL Java_com_yangc_jnicmarkapplication_JniUtils_getStringFromJni
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

cpp文件代码:

#include "time.h"
#include <unistd.h>
#include "com_yangc_jnicmarkapplication_JniUtils.h"
#include <android/log.h>
#include <stdio.h>
#include <sys/system_properties.h>
#include <string>

#define LOG_TAG "System.out"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)

JNIEXPORT jstring JNICALL Java_com_yangc_jnicmarkapplication_JniUtils_getStringFromJni
        (JNIEnv *env, jclass clazz) {
    return env->NewStringUTF("Hello JNI with Android Studio and CMake!");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值