这几天一直在研究JNI的开发过程,顺便把NDK环境搭建一起总结下。在windows环境下开发jni需要c/c++编译器的支持,网络上我看很多人使用cygwin。呵呵我不是很喜欢使用它,感觉安装起来挺麻烦的。我使用GNUStep,下载地址http://www.gnustep.org/experience/Windows.html。![](http://img1.51cto.com/attachment/201208/231746940.png)
下载安装后,验证是否成功。打开GNUstep->Shell,输入make -v 和 gcc -v命令,如图所示。![](http://img1.51cto.com/attachment/201208/231327684.png)
下载NDK,地址http://developer.android.com/tools/sdk/ndk/index.html。下载完后解压即可。配置ndk环境变量,gnustep是模拟linux的环境的,打开gnustep的安装目录下的G:\softinstall\GNUstep\GNUstep\GNUstep.conf文件,添加以下内容:
复制内容到剪贴板
代码:
NDK=/g/softinstall/Android/android-ndk-r8b
export=NDK
说明如果不知道ndk目录在linux下应该是在哪里,你可以打开gnustep的命令窗口,输入mount,就可以找到对应的盘符。
验证环境变量,如下图。
![](http://img1.51cto.com/attachment/201208/231327758.png)
以上就配置成功了。
下载进入正题啦。Jni的开发步骤。
打开eclipse,新建工程名为testJni。在activity中添加以下代码
复制内容到剪贴板
代码:
package com.xzw.jni;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.support.v4.app.NavUtils;
/**
*
*@authorXuZhiwei (xuzhiwei@gmail.com)
* sina:http://weibo.com/xzw1989
*
* Create at 2012-8-30 上午10:49:45
*/
public class TestJni extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//natvie必须声明,用于生成C/C++代码
public native String hello();
static{
System.loadLibrary("testJni");
}
}
编译后的文件在bin目录下,通过javah命令生成c/c++的文件头。如下图
![](http://img1.51cto.com/attachment/201208/110018262.png)
会在项目目录下生成jni/com_xzw_jni_TestJni.h。
头文件代码如下:
复制内容到剪贴板
代码:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_xzw_jni_TestJni */
#ifndef _Included_com_xzw_jni_TestJni
#define _Included_com_xzw_jni_TestJni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_xzw_jni_TestJni
* Method: hello
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_xzw_jni_TestJni_hello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
这里我们可以根据头文件编写c代码
复制内容到剪贴板
代码:
#include <string.h>
#include <jni.h>
jstring
Java_com_xzw_jni_TestJni_hello
(JNIEnv* env, jobject thiz){
return (*env)->NewStringUTF(env, "哈哈完成自动化编译 !");
}
接下来编写 Android.mk,该文件可以直接从NDK的samples下的hello-jni的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 := testJni
LOCAL_SRC_FILES := testJni.c
include $(BUILD_SHARED_LIBRARY)
其中你只需要该LOCAL_MODULE和LOCAL_SRC_FILES就可以了。
说明:LOCAL_MODULE是描述模块的,用来给java调用的模块名,会生成对应的libtestJni.so
LOCAL_SRC_FILES就是源文件啦,多个文件空格隔开即可。
接下来,我们要开始编译生成so文件咯。
打开gnustep的命令窗口,进入到项目底下,输入$NDK/ndk-build命令,即可自动生成libs/armeabi/libtestJni.so文件。
![](http://img1.51cto.com/attachment/201208/110945188.png)
接下来就是java调用了。直接上代码
复制内容到剪贴板
代码:
package com.xzw.jni;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.support.v4.app.NavUtils;
/**
*
*@authorXuZhiwei (xuzhiwei@gmail.com)
* sina:http://weibo.com/xzw1989
*
* Create at 2012-8-30 上午10:49:45
*/
public class TestJni extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(hello()); //这里的hello() 就是调用c
setContentView(tv);
}
public native String hello();
static{
System.loadLibrary("testJni");
}
}
运行结果如下
以上就是jni的开发步骤了。在这里我还要补充下:在我们开发过程中,改一个c/c++的文件,我们都要手动去编译一下有点儿麻烦。这里我们可以使用让eclipse帮助我们自己编译。右击jni工程的properties-->Builders-->NEW -->;Program 可以看到以下内容:
argument:--login -c "cd /e/myWorkSpace/android/hellJni && $NDK/ndk-build"切换到Refresh 标签页
切换到Build Options标签页
这样就完成了配置,点击确定可看到控制台自动编译程序了
能力有限,请大家多多指教。附上源码
hellJni.rar(682.35
KB)。欢迎关注我的博客:
http://home.51cto.com/index.php?s=/space/978424
分享到:
相关推荐
### Android JNI开发步骤详解 #### 一、简介 JNI(Java Native Interface)是Java平台标准的一部分,它允许Java代码和其他语言写的代码进行交互。在Android开发中,JNI主要用于调用C/C++编写的本地代码,这可以...
本教程将围绕"Android JNI开发步骤"展开,详细介绍如何在Eclipse环境中进行JNI开发。 首先,我们需要创建一个Android项目。打开Eclipse,选择"File" -> "New" -> "Android Project",填写项目名称和目标SDK版本,...
- `android之JNI开发步骤总结.doc`:这份文档很可能详细介绍了JNI开发的基本流程,包括创建本地方法、编写C/C++代码、配置Android.mk和Application.mk文件、编译链接、以及在Java代码中调用本地方法等步骤。...
本文将详细介绍如何在 Android Studio 3.4 中配置 Android-JNI 开发基础,包括配置 NDK、编写 Native 方法、配置 CMakeLists.txt 文件等步骤。 首先,需要下载和配置 Android NDK。Android NDK 是一款用于开发 ...
JNI 开发步骤详解 ...JNI 开发步骤包括环境搭建、编写 Java 本地代码、生成头文件、创建 JNI 项目结构、编写 Android.mk 文件、编写 native 代码和编译运行。通过遵循这七个步骤,可以成功地实现 JNI 开发。
JNI开发流程主要包括以下几个步骤: 1. **创建本地方法接口**:在Java源代码中定义一个本地方法,使用`native`关键字标记。这个方法没有具体的实现,它的作用是声明将要调用的C/C++函数。 2. **生成头文件**:使用...
### Android Studio JNI集成步骤详解 #### 一、JNI简介与应用场景 JNI(Java Native Interface)是一种标准接口,允许Java代码和其他语言(如C、C++)编写的代码进行交互。在Android开发中,JNI通常用于实现性能...
在这个"android JNI开发演示(串口收发)"项目中,我们将关注如何利用JNI实现Android设备上的串口通信。 串口通信是设备间数据传输的一种常见方式,常用于嵌入式系统和物联网应用。在Android平台上,由于操作系统对...
### Eclipse里Android JNI的开发方法 #### NDK开发环境安装 **Native Development Kit ...通过上述步骤,开发者能够在Eclipse环境中顺利进行Android JNI的开发工作,充分利用C/C++的优势来增强应用的功能性和性能。
Android的JNI实现通常涉及到以下几个步骤: 1. **创建本地方法接口**:在Java层定义本地方法,这些方法将被C或C++代码实现。例如,你可能会有一个`encrypt()`和`decrypt()`方法声明。 2. **编写JNI头文件**:使用`...
Android Studio JNI开发是Android应用程序开发中的一个重要组成部分,它允许开发者使用C++或其他本地语言编写部分代码,以实现高性能计算、利用硬件加速或者调用已有的C/C++库。JNI(Java Native Interface)是Java...
在Android开发中,JNI(Java Native Interface)是一种技术,它允许Java代码和其他语言写的代码进行交互。JNI在Android系统中广泛用于实现性能优化、调用本地库或与硬件设备进行低级别通信,如本例中的串口通信。下面...
总结起来,Android的JNI开发涉及Java和C/C++的交互,包括Java调用C/C++函数和C/C++回调Java方法。掌握JNI技术对于优化性能、使用第三方C库或者进行系统级编程是至关重要的。通过学习和实践,你可以提升自己的Android...
总结来说,"Android使用JNI调用Python so解释器"涉及到Android NDK开发,JNI接口设计,Python解释器的Android移植,以及跨语言通信等多个技术层面。这种技术虽然复杂,但能充分利用Python的灵活性和Android的广泛...
在Android开发中,Java Native Interface (JNI) 是一个关键的工具,它允许Java代码与本地C/C++代码交互。JNI的使用场景广泛,包括优化性能、利用硬件特性、调用已有的C/C++库等。当涉及到Android调用JNI并返回自定义...
在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言(如C/C++)编写的代码进行交互。Android Studio作为官方推荐的集成开发环境,提供了对JNI的良好支持,使得开发者可以...
3. **JNI开发流程**: - 定义Java类,声明`native`方法。 - 使用`javah`工具生成C/C++头文件,该文件包含了Java方法的C/C++声明。 - 编写C/C++源文件,实现头文件中声明的方法,并添加必要的JNI函数。 - 编译C/...
在Android开发中,JNI(Java Native Interface)是一个关键的技术,它允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都非常有用,比如优化性能、使用现有的C/C++库、或者像在这个“JniCallback.zip”文件...
Android Studio 是Google官方...通过这个示例,新手可以了解如何在Android Studio项目中配置JNI,编写和调用本地方法,以及如何利用NDK进行C++开发。实践是学习的最佳途径,动手尝试这个示例将加深对JNI和NDK的理解。