Android ndk开发入门集锦一

1、搭建NDK环境

1.1首先配置ndk环境变量如下图输出 如何配置ndk环境变量这里不再赘述 请自行百度

1.2.如果没有ndk环境需要在AndroidStudio中下载如下图

 1.3通过这里下载NDK下载 选择自己对应电脑系统位数下载即可 比如32bit或者64bit 这里不再赘述如下图所示 下载好解压默认一般放在Android sdk根目录

1.4 NDK版本选择
 

2、添加c++支持库

新建一个Project工程 选择c++ 然后选择对应的版本 这里需要注意是你的c++Standard支持库与ndk版本一致 否则会出现编译异常 点击finish就会开始构建项目

3、配置app/build.gradle文件

配置app build.gradle 主要配置ndk的 path ndk版本号 以及abiFilters 芯片支持类型

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

 3.1选择对应cmake版本

  3.2CmakeLists.txt文件

# For more information about using CMake with Android Studio, read the
# documentation: https://d.android.com/studio/projects/add-native-code.html

# Sets the minimum version of CMake required to build the native library.

cmake_minimum_required(VERSION 3.10.2) 对应cmake版本号

# Declares and names the project.

project("myapplication") 项目名称


# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.

add_library( # Sets the name of the library.
             face-lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
        face-lib.cpp Facer.h Facer.cpp)
#这里指添加cpp文件 h头文件你的加载库文件
# Searches for a specified prebuilt library and stores the path as a
# variable. Because CMake includes system libraries in the search path by
# default, you only need to specify the name of the public NDK library
# you want to add. CMake verifies that the library exists before
# completing its build.

find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the NDK library that
              # you want CMake to locate.
              log )
//这里指找到cmake库名字

# Specifies libraries CMake should link to your target library. You
# can link multiple libraries, such as libraries you define in this
# build script, prebuilt third-party libraries, or system libraries.

target_link_libraries( # Specifies the target library.
                       face-lib

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )
//关联ndk动态链接so库


4、编写jni代码 cpp文件

#include <jni.h>  导入jni头文件
#include <string>  导入字符串库
#include "Facer.h"  导入Facer.h头文件

extern "C" JNIEXPORT jstring JNICALL
//这里必须全路径否则就会找不到对应的类 包名+类名+方法名
Java_com_example_myapplication_Facer_getFacer(JNIEnv *env, jclass clazz, jstring top,
                                              jstring bottom, jstring right,jstring brow,jstring eyes,
                                          jstring hand) {
    Facer facer(//使用 env->GetStringUTFChars将jstring转化为string
            env->GetStringUTFChars(top, 0),
            env->GetStringUTFChars(bottom, 0),
            env->GetStringUTFChars(right,0),
            env->GetStringUTFChars(brow, 0),
            env->GetStringUTFChars(eyes, 0),
            env->GetStringUTFChars(hand, 0)
    );

    return env->NewStringUTF(facer.getFace().c_str());//返回对应字符串
}


5、添加头文件

//
// Created by zm-pc on 2022/7/2.
//

#include <iostream> 

using namespace std;

#ifndef MY_APPLICATION_FACE_H
#define MY_APPLICATION_FACE_H


class Facer {
public:
    Facer(const string &top="-",const  string &bottom="-",const  string &right="%",
          const string &brow="~", const string &eyes=".",const string &hand="$");

    ~Facer();

public:
    string top;
    string bottom;
    string right;
    string brow;
    string eyes;
    string hand;
public:
    void printFace();
    string getFace();


};


#endif //MY_APPLICATION_FACE_H


6、编译so库

6.1Build->MakeProject(Window快捷键Ctrl+F9) 然后去build->intermediates->cmake->debug->obj对应不同芯片so

6.2配置多平台交叉编译so


7、加载so库 调用native方法

 这里只是简单演示 主要属性ndk开发流程以及配置


8、结束总结

     8.1 NDK版本与c++ standrad库要对应

     8.2 cmake要与android studio ndk也要对应

     8.3 需要配置NDK环境变量 

     8.4 最好不要选最新cmake或者ndk环境

     8.5编译出现问题一定要细心检查 不要慌 仔细检查配置

     转载请注明出处 谢谢!Android ndk开发入门集锦一_KdanMin的博客-CSDN博客

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android NDK开发是指利用NDK(Native Development Kit)将C/C++开发的代码编译成so库,然后通过JNI(Java Native Interface)让Java程序调用。在Android开发中,默认使用的是Android SDK进行Java语言的开发,而对于一些需要使用C/C++的高性能计算、底层操作或跨平台需求的场景,可以使用NDK进行开发。 在Android Studio中进行NDK开发相对于Eclipse来说更加方便,特别是在Android Studio 3.0及以上版本中,配置更加简化,并引入了CMake等工具,使得开发更加便捷。首先要进行NDK开发,需要配置环境,包括导入NDK、LLDB和CMake等工具。可以通过打开Android Studio的SDK Manager,选择SDK Tools,在其中选中相应的工具进行导入。 在项目的build.gradle文件中,可以配置一些NDK相关的参数,例如编译版本、ABI过滤器等。其中,可以通过externalNativeBuild配置CMake的相关设置,包括CMakeLists.txt文件的路径和版本号。此外,在sourceSets.main中还可以设置jniLibs.srcDirs,指定so库的位置。 在进行NDK开发时,可以在jni文件夹中编写C/C++代码,并通过JNI调用相关的函数。通过JNI接口,可以实现Java与C/C++之间的相互调用,从而实现跨语言的开发。 综上所述,Android NDK开发是指利用NDK将C/C++开发的代码编译成so库,并通过JNI实现与Java的相互调用。在Android Studio中进行NDK开发相对方便,可以通过配置环境和相应的参数来进行开发。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值