Android NDk环境配置

概论

NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简单修改mk文件(指出“哪些文件需要编译”、“编译特性要求”等),就可以创建出so。

JNI的全称是Java Native Interface,它提供了若干的API实现了Java和其他语言的通信(主要是C和C++)。

联系和区别:

为什么使用NDK?

1、代码的保护。由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大。

2、可以方便地使用现存的开源库。大部分现存的开源库都是用C/C++代码编写的。

3、提高程序的执行效率。将要求高性能的应用逻辑使用C开发,从而提高应用程序的执行效率。

4、便于移植。用C/C++写得库可以方便在其他的嵌入式平台上再次使用。

为什么使用JNI?

JNI的目的是使java方法能够调用c实现的一些函数。

所以从这里可以看出,是先有NDK开发,然后才有了JNI的调用。

环境

  • 主机:WIN10
  • 开发环境:Android Studio2.2.2

首先要电脑安装了NDK环境,如果没有可以在studio安装

配置环境变量

  • 增加一项:NDK_ROOT,如:D:\android\sdk\ndk-bundle(这里是sdk的路径)
  • 在path中增加%NDK_ROOT%

新建hello-jni.c

/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
#include <string.h>
#include <jni.h>

/* This is a trivial JNI example where we use a native method
 * to return a new VM String. See the corresponding Java source
 * file located at:
 *
 *   apps/samples/hello-jni/project/src/com/example/hellojni/HelloJni.java
 */
//jstring
//Java_com_bazhangkeji_MainActivity_stringFromJNI( JNIEnv* env,
//                                                  jobject thiz )
//{
//    return (*env)->NewStringUTF(env, "Hello from JNI !");
//}

JNIEXPORT jstring JNICALL
Java_com_xzh_ndkdemo_MainActivity_stringFromJNI(JNIEnv *env, jobject instance) {

//    return (*env)->NewStringUTF(env, returnValue);
    return (*env)->NewStringUTF(env, "Hello from JNI !");
}
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello_jni
LOCAL_SRC_FILES := hello_jni.c

include $(BUILD_SHARED_LIBRARY)

注意,这里的.c的写法必须遵循如下规则:函数需按照规则命名:Java_包名类名方法名

LOCAL_MODULE    := hello_jni
LOCAL_SRC_FILES := hello_jni.c

必须和.c文件对应,然后我们在build.gradle中加入如下语句:

externalNativeBuild {
        ndkBuild {
            path file("src\\main\\jni\\Hello.mk")
        }
    }

然后rebuild 。

测试Activity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        System.out.println("hello ndkdemo"+stringFromJNI());
    }
    public native String stringFromJNI();
    static {
        System.loadLibrary("hello_jni");
    }
}

如果我们.so文件,则需要在local.properties文件中 配置好本地NDK的路径。

ndk.dir=/Users/cinba/Library/android-ndk-r10e
sdk.dir=/Users/cinba/Library/android-sdk

然后重新build,就可以看到.so文件了

时间: 2024-10-13 21:58:25

Android NDk环境配置的相关文章

windows下android NDK 环境配置

0.下载jdk并配置环境变量 下载最新jdk,百度搜索“jdk”就有了.安装完成后,配置环境变量(网上一搜,一堆,我这里仅作简要叙述)  计算机→属性→高级系统设置→高级→环境变量. 系统变量→新建 JAVA_HOME 变量 .变量值填写jdk的安装目录(本人是 D:\Program Files\Java\jdk1.7.0_45) 系统变量→新建 CLASSPATH 变量 变量值填写   .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意最前面有一点)

一、android ndk环境配置

注意:NDK插件:用于开发Android NDK的插件,ADT版本在20以上,就能安装NDK插件,另外NDK集成了CDT插件. NDK版本在r7以上之后就集成了Cygwin,而且还是十分精简版.比起下载Cygwin要方便多啦! 1.本文针对的读者 android sdk 更新到 r23 时,eclipse 自带 adt版,里面并没有设置ndk的路径,从而导致了在ndk配置方面的难度.本文主要适合: ① 使用 android sdk r23 20140702 的朋友 ② 使用 android nd

一定能成功的Android NDK环境配置教程

前言在 Android 开发中,使用 NDK 开发的需求正逐渐增大但在 Android 使用 NDK 前需要进行 相关环境配置本文主要讲解 在 Mac 情况下的 Android NDK 配置,希望你们会喜欢1. 步骤说明下面,我将一步步讲解如何进行 NDK 环境配置. 2. 步骤讲解步骤1. 下载 Android NDK 工具包 官网下载地址 ,注意 科学 上网本文采用的 Android NDK 版本是: android-ndk-r14b-darwin-x86_64步骤2: 解压 NDK包注:解

Linux下Android NDK环境配置以及配合eclipse使用NDK

最近由于项目中经常用到jni,在这里将使用jni不步邹分享给大家! 一.下载NDK http://developer.android.com/sdk/ndk/index.html 目前最新版本是r8(android-ndk-r8-linux-x86.tar.bz2) 二.配置环境 从r7版本开始,Linux下直接解压就可以使用,在windows下cygwin也已经集成在NDK里面了,解压完配置下环境变量就可以使用了. 在~/.bashrc(Linux下配置环境变量的文件)文件末尾加上: expo

Qt For Android 开发环境配置

想了想,还是再写一篇关于Qt for Android开发环境配置的教程. 准备:Java jdk,Android sdk,Android adb,Android ndk,Android ant,Qt 支持 安卓的版本,比如qt-opensource-windows-x86-android-5.6.2. 前言:在Qt的版本更新中,Qt支持的功能越来越多,安装包也越来越大,在Qt5.9出来之前,Qt的每个版本都对应的编译环境,而在Qt5.9后Qt官方将好多编译环境放到了一起,而在这里我要说的是要配置

Windows XP环境下 搭建Android NDK环境

搭建Android NDK环境 Windows XP环境下 1 一些下载 ① NDK r7:http://developer.android.com/sdk/ndk/index.html ② cygwin:http://www.cygwin.com/  (1.7.11-1)③ notepad++:http://notepad-plus-plus.org/download/v5.9.8.html 2 cygwin安装 ① 执行下载的setup.exe.点Next② 选择安装方式.选择在线安装.假设

Mac系统cocos2dx + android 开发环境配置

Mac系统cocos2dx + android 开发环境配置 /****************************************************** 这遍文章主要转载自:http://www.cnblogs.com/wt616/p/3758828.html(这位大哥真的很牛,谢谢!) 然后,文章中又加入了一些自己的理解以及在实际操作过程中遇到问题的解决办法.而这些办法也是来自于伟大 的网友,但由于搜索的比较多,很多出处地址都没有记录好,抱歉,若你们看到,告诉我,我再加上地

Android/NDK环境下FFmpeg及AAC,MP3,X264的编译

本篇介绍在Android/Ndk环境下FFmpeg的编译及使用, FFmpeg自带了H264.AAC.MP3的解码器,但却没有(或没有好的)相应的编码器.相应的编码器需要使用第三方库.推荐使用的第三方库为x264(H264编码) .FDK_AAC(AAC编码),lame(MP3编码). 在顺序上,应该先编译好第三方库,最后再编译FFmpeg库. [本书说明:本文作者:邵发,本文选自<FFmpeg视音频编程指南>.有关本书的详细信息请访问官网:http://www.afanihao.cn ] [

【转】Windows环境下Android NDK环境搭建

原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设备.接口.驱动控制的应用开发,不得不使用到本文的NDK开发环境(基于Android源码或内核源码修改),开发语言使用C/C++,NDK开发更接近于Linux开发,需要更多关于Linux应用编程知识.本文就介绍一