NDK-Ndk-Build环境搭建


2021-7-31 zhuhongxi

一、安装ndk-build

1. 方式1: 单独下载ndk-build,并解压

地址:https://developer.android.google.cn/ndk/downloads/

2. 方式2:使用Android Studio下载

二、配置环境变量

我的ndk路径 C:\Users\zhuhongxi\AppData\Local\Android\Sdk\ndk\21.4.7075529

三、匹配Android Studio工程

1. 在projectlocal.properties 中配置ndk 路径
ndk.dir=C\:\\Users\\zhuhongxi\\AppData\\Local\\Android\\Sdk\\ndk\\你的版本

2. 在projectgradle.properties添加
android.useDeprecatedNdk=true

3. 在main 同级目录下创建jnijniLibs 文件夹

4. 编写含native方法的java文件

这个native方法将会调用c/c++ 代码生成的so库中的方法实现。

package com.zhu.ndkbuilddemo;public class NdkTest {static {System.loadLibrary("native-jni");}public native String getStringFromJni();
}

MainActivity.java中就用一个TextView测试它

package com.zhu.ndkbuilddemo;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.widget.TextView;public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TextView textView = findViewById(R.id.tv_info);textView.setText(new NdkTest().getStringFromJni());}
}
5. 用Jni的静态加载来测试,在Android Studio terminal执行
(1) 在NdkTest.java 目录下执行, 生成NdkTest.class
javac NdkTest.java
(2) 在main/ 目录下执行:
javah -d jni -classpath java -jni com.zhu.ndkbuilddemo.NdkTest

生成com_zhu_ndkbuilddemo_NdkClass.h,可以在jni目录下看到

javah命令中

-d 指定创建头文件的目标路径,.h的生成路径

-classpath 指定类的路径,由于当前路径是main,所以指定其中的java即可。

-jni 需要转化的类路径,包名+类名

(3) 然后在jni 目录下创建 Android.mk Application.mk test.c 文件。

  • Application.mk
APP_MODULES := native-jni
APP_ABI := all
  • Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := native-jni
LOCAL_SRC_FILES =: test.c
include $(BUILD_SHARED_LIBRARY)
  • test.c
#include "com_zhu_ndkbuilddemo_NdkClass.h"//这个函数名字和.h文件中的函数名保持一致
JNIEXPORT jstring JNICALL Java_com_zhu_ndkbuilddemo_NdkClass_getStringFromJni(JNIEnv * env, jobject thiz){return (*env)->NewStringUTF(env, "HELLO JNI");}
  • com_zhu_ndkbuilddemo_NdkClass.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_zhu_ndkbuilddemo_NdkClass */#ifndef _Included_com_zhu_ndkbuilddemo_NdkClass
#define _Included_com_zhu_ndkbuilddemo_NdkClass
#ifdef __cplusplus
extern "C" {#endif
/** Class:     com_zhu_ndkbuilddemo_NdkClass* Method:    getStringFromJni* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_com_zhu_ndkbuilddemo_NdkClass_getStringFromJni(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif
(4) 使用ndk-build工具中命令行中编译so
  • 在Android Studio中的命令行中进入jni目录执行:
ndk-build NDK_PROJECTPATH=. NDK_APPLICATION_MK=Application.mk NDK_BUILD_SCRIPT=Android.mk NDK_LIBS_OUT=..\jniLibs\

就会自动在jniLibs 里面生成不同平台的so 库, 这样app构建时也能找到这个so

运行工程到虚拟机验证下

补充: NDK常用编译参数
NDK_PROJECT_PATH
说明:指定工程目录
示例:ndkbuild NDK_PROJECT_PATH=C:\HelloNDK_LIBS_OUT
说明:指定.so文件输出目录,默认值为"$(NDK_PROJECT_PATH)/libs"
示例:ndkbuild NDK_LIBS_OUT=C:\Hello\libsNDK_APPLICATION_MK
说明:指定Application.mk文件路径,默认值为"$(NDK_PROJECT_PATH)/jni/Application.mk"
示例:ndkbuild NDK_APPLICATION_MK=C:\Hello\src\Application.mkNDK_DEBUG
说明:打开或关闭调试模式,debug模式时会生成gdbserver等文件
示例:ndkbuild NDK_DEBUG=1NDK_LOG
说明:显示内部NDK日志消息(用于调试NDK自身)
示例:ndkbuild NDK_LOG=1NDK_HOST_32BIT
说明:Always use toolchain in 32-bit mode (see below).
示例:ndkbuild NDK_HOST_32BIT=1APP_BUILD_SCRIPT
说明:指定Android.mk文件路径,默认值为"$(APP_PROJECT_PATH)/jni/Android.mk"
示例:ndkbuild APP_BUILD_SCRIPT=C:\Hello\src\Android.mkClear
说明:清除所有生成的二进制文件
示例:ndkbuild Clear-B
说明:强制完全重新构建
示例:ndkbuild -B-C <project>
说明:构建位于<工程目录>的工程的本地代码。当你不想在终端上用cd切换到那个目录时有用
示例:ndkbuild -C C:\HelloV
说明:打开或关闭显示编译参数
示例:ndkbuild V=1

[NDK]-搭建ndk-build环境相关推荐

  1. 使用R7版NDK搭建Android开发环境[不使用Cgywin]

    废话不多说,只说几句. 写这个的初衷是因为公司的项目需要,领导要求我搭建一个Android的开发环境(Eclipse + NDK),我算上找资料,下载,安装,配置环境及写文档,正好用了一个工作日.先把 ...

  2. Android NDK开发之旅29 云服务器Ubuntu下搭建NDK环境,并编译FFmpeg

    ###前言 因为在Linux环境下编译FFmpeg生成库和头文件下比较方便,所以接下来主要操作在Linux环境下进行.但是对于Android NDK 开发新手来说,自己电脑配置Ubuntu Linux ...

  3. android中搭建NDK环境及使用JNI技术

    NDK:Native Development Kit 包括Apis +编译和运行的工具 +文档+ Sample JNI:JAVA Native Interface 功能:JAVA语言调用c/C++语言 ...

  4. 一篇博客带你熟悉Eclipse、AndroidStudio下搭建NDK环境(内有Demo)

    文章目录 一.NDK可以干什么 二.NDK开发环境搭建 三.一个简单的NDK小案例的编写 一.NDK可以干什么 NDK:(Native Development Kit),原生开发工具包是一组可以让您在 ...

  5. 【Android NDK 开发】NDK 交叉编译 ( NDK 函数库目录 | Linux 交叉编译环境搭建 | 指定头文件目录 | 指定函数库目录 | 编译 Android 命令行可执行文件 )

    文章目录 I . NDK platforms 目录下的 函数库 II . Ubuntu 配置 NDK 交叉编译环境 III . 同时指定编译的头文件和库文件 IV . 指定编译的头文件 V . 指定编 ...

  6. qt程序 html安装,qt webassembly emscripten build 环境搭建

    环境搭建 本文主要是针对ubuntu/mac编译环境搭建和调试环境 可以直接参考下面的dockerfile 1.运行环境 选择了虚拟机里安装了ubuntu版本和内核号如图 首先下载 # Get the ...

  7. Linux下搭建Android交叉编译环境

    前言 为了能够在Android平台上使用一些Linux中的C/C++库,我们需要使用AndroidNDK来编译那些Linux库的源代码,使用NDK开发时,通常使用Android.mk或者Cmake来构 ...

  8. 在Windows XP3下搭建cocos2d-x-android开发环境

    (三) 搭建cocos2d-x-android环境 Windows XP3 + Eclipse + NDKR7+COCOS2DX(没有用到cygwin和minigw) 原文传送门:http://blo ...

  9. 第二章:搭建Android开发环境(读后感)

    在此章节中只要介绍了Android底层开发环境的搭建,其中包括了Android应用程序开发环境.Android NDK开发环境和交叉编译环境的搭建! 1:JDK的安装 (1)下载JDK的压缩包(tar ...

  10. 【转】在Eclipse下搭建Android开发环境教程

    本文将全程演示Android开发环境的搭建过程,无需配置环境变量.所有软件都是写该文章时最新版本,希望大家喜欢. 一 相关下载 三 Eclipse配置 (1)Java JDK下载 1 安装androi ...

最新文章

  1. 记忆的天空:智能进化三部曲
  2. HTML5 Canvas API 变换(translate函数)
  3. matlab中reshape和repmat函数的用法
  4. ./ . 和#!/bin/bash 辨析Linux如何选择当前执行脚本的shell
  5. (转) Hibernate检索方式概述
  6. java 类和对象的理解
  7. 布丰投针java实现,MATLAB模拟布丰投针实验
  8. CAD迷你看图 for Mac
  9. MiniTable 16 网络版安装部署
  10. blob类型视频测试(blob加密视频源地址)
  11. 21世纪八大新兴技术领域对美国战略威慑的影响
  12. 祝贺软件工程成了国家一级学科
  13. 分享一个数据库在线文档系统
  14. python编程控制安捷伦电源_安捷伦怎么设置电流电压输出 Agilent/HP 6674A DC电源 程控电源租赁 仪器仪表租赁 硬件测试服务...
  15. 儿子考上清华大学计算机系视频,儿子考上清华大学,家长忙发朋友圈,但收到的却不是祝福是心寒...
  16. 会计中运用计算机知识点,电算化会计知识点..doc
  17. aardio 安装 Python 模块,快速开发界面,生成独立 EXE 一把梭
  18. PDM转换成Word文档或者XML文档
  19. Android中的优化问题
  20. C语言中access函数

热门文章

  1. macOS中使用Delete键
  2. 设置华为路由器的端口映射
  3. NL2SQL领域:RAT-SQL论文笔记
  4. 公司禁用U盘的方法总结
  5. WINDOWS SERVER 2003禁用U盘
  6. 数控车床 刀尖补偿用法 G41 G42 G40
  7. ubuntu中文论坛
  8. ubuntu18.04前置面板声音输出方法
  9. 读什么,让你的生活既有诗又有远方
  10. ModSecurity的规则