Android Stduio 3.0进行JNI和NDK开发

标签:Android Studio 3.0 JNI NDK
转载请注明:http://blog.csdn.net/feather_wch/article/details/79548978

Android Stduio 3.0进行JNI和NDK开发

版本:2018/3/14-1(0:41)

本文主要包括两方面的内容:
1. 如何在Android Studio 3.0中在新工程和老工程中进行JNI和NDK相关的支持
2. 如何在新工程和老工程中对JNI进行开发


Android Studio 3.0进行JNI/NDK开发时,如何让项目能支持JNI功能主要有两种方法。第一种是Android Stduio 3.0中新建工程时进行C++的支持。第二种是在老项目中添加C++的支持。

前提

下载NDK、LLDB、CMake-位于settings->Android SDK->SDK Tools

第一种:新建工程中选择C++支持

步骤:
1. 新建工程,New->New Project
2. 选择include C++ Support
3. 一路默认选择,直到选择完finish

支持C++相关的重要文件

  • app\src\main\cpp文件夹

    里面存放的native-lib.cpp就是系统默认的C++文件,用于编写native代码

  • app/src/CMakeLists.txt

    生成so库的配置文件,描述了so库的名称,以及所依赖的具体源文件(如:native-lib.cpp)

# [CMakeLists.txt] 1. 设置构建native库所需要的CMake的最小版本
cmake_minimum_required(VERSION 3.4.1)

add_library(
             # 2. 设置库的名字
             native-lib

             # 3. 将库设置为共享型库(Gradle会自动将共享库打包到APK中)
             SHARED

             # 4. 提供源码文件的相对路径
             src/main/cpp/native-lib.cpp )

find_library(
              log-lib
              log )

target_link_libraries(
                       # 5. 目标库的名称
                       native-lib

                       # 6. 将目标库和NDK中的log库连接起来
                       ${log-lib} )
  • build.gradle文件新增配置内容
android {
    compileSdkVersion 26
    defaultConfig {
        ...
        //===增加如下内容===
        externalNativeBuild {
            cmake {
                cppFlags ""
            }
        }
    }
    buildTypes {
        ...
    }
    //===增加如下内容,指明CMake的配置文件===
    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}

dependencies {
    ...
}

第二种:老项目中添加C++的支持

步骤

  1. AS3.0左上角File->选择Link C++ project with Gradle
  2. 选择CMake
  3. 方法一生成的CMakeLists.txt复制到本工程的app/src目录下和main平级
  4. Project Path中选择复制好的CMakeLists.txt文件
  5. 完成导入

在新老工程中如何进行C++开发

1、新建一个JniUtils2.java文件-编写需要native实现的Java类和方法

public class JniUtils2 {
    static {
        System.loadLibrary("native-lib"); //CMakeLists.txt中指定的仓库名
    }
    public native String getStringFromC();
}

2、生成JniUtils2的native方法对应的头文件

  1. 进入JniUtils2.java所在的src/main/java目录
  2. 执行命令Javah com.hao.jniapp.JniUtils2也就是Javah 包名.类名
  3. 最终在src/main/java目录中生成头文件com_hao_jniapp_JniUtils2.h
  4. 头文件移动到cpp目录中
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_hao_jniapp_JniUtils2 */

#ifndef _Included_com_hao_jniapp_JniUtils2
#define _Included_com_hao_jniapp_JniUtils2
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_hao_jniapp_JniUtils2
 * Method:    getStringFromC
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_hao_jniapp_JniUtils2_getStringFromC
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

3、创建C++源代码xxx.cpp(自定义,例如:abc.cpp或者com_haoe_jniapp_JniUtils2.cpp均可)

  1. 实现native方法
//com_haoe_jniapp_JniUtils2.cpp-拼写一定要正确!!!
#include "com_hao_jniapp_JniUtils2.h"

extern "C" {
JNIEXPORT jstring JNICALL Java_com_hao_jniapp_JniUtils2_getStringFromC
        (JNIEnv *env, jobject jobject1) {
    return env->NewStringUTF("我是来自JniUtils2的Native方法");
}
}

4、CMakeLists.txt将源码引入

cmake_minimum_required(VERSION 3.4.1)

add_library(
            #1. 库名不变
             native-lib
             SHARED

             src/main/cpp/native-lib.cpp
             src/main/cpp/main.cpp

            #2. 新增新功能cpp源码-拼写一定要正确!!!
             src/main/cpp/com_hao_jniapp_JniUtils2.cpp
             )

             //......

5、Clean Project

或者将app/build/intermediates/cmake中的debug和realease中所有so文件删除

6、Make Project

整个项目就都可以编译运行了,如果有CMake的错误,很可能是有用到Java_com_hao_jniapp_JniUtils2_getStringFromC等手写的地方出现拼写错误。请按照顺序仔细排查。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Android Studio中进行JNI(Java Native Interface)开发,可以让我在Java代码中调用C/C++代码,实现跨语言的功能。下面是在Android Studio中进行JNI开发的一般步骤: 1. 创建一个新的Android项目或打开一个已有的项目。 2. 在项目的`app`模块下,创建一个名为`jni`的文件夹(如果没有的话)。 3. 在`jni`文件夹下,创建一个名为`native-lib.cpp`(或其他任意名称)的C/C++源文件,用于编写JNI代码。 4. 在`native-lib.cpp`文件中,编写你需要的C/C++代码。这些代码将会被Java代码调用。 5. 在`app`模块的`build.gradle`文件中,添加以下配置: ``` android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "" } } } ... externalNativeBuild { cmake { path "CMakeLists.txt" } } } ``` 6. 在`app`模块下,创建一个名为`CMakeLists.txt`的文件,并添加以下内容: ``` cmake_minimum_required(VERSION 3.10.2) project("YourProjectName") add_library( native-lib SHARED native-lib.cpp ) find_library( log-lib log ) target_link_libraries( native-lib ${log-lib} ) ``` 7. 在Android Studio的底部工具栏中,点击"Build Variants"按钮,将"Active Build Variant"设置为`native-lib`。 8. 在Android Studio的顶部菜单中,点击"Build" -> "Make Project",编译项目。 9. 在Java代码中,通过`System.loadLibrary("native-lib")`加载C/C++库,并调用其中的函数。 这样,你就可以在Android Studio中进行JNI开发了。记得在编写JNI代码时,遵循JNI的规范和语法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值