jni ndk 入门

1.
Linux环境模拟,下载sygwin 安装,选择devl 和shell -> install

sygwin
中的配置ndk环境,进入安装目录c:/cygwin64

etc/profile文件配置ndk的环境

//37行

PATH="/usr/local/bin:/usr/bin:/cygdrive/d/android-ndk-r9d-windows-x86_64/android-ndk-r9d${PATH:+:${PATH}}"

2.
下载ndk

3.
开发,参考于ndk/sample/HelloJni

创建android
工程在JNTTest,在jni中创建3个文件

3.1 helo-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_jun_jnitest_MainActivity_stringFromJNI( JNIEnv* env, jobject thiz
)

{

return (*env)->NewStringUTF(env, "Hello from JNI !  Compiled with
ABI ");

}

3.2 Application.mk 内容如下:

APP_ABI := all

3.3
Android.mk

# 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)

3.4
java文件编辑

package
com.jun.jnitest;

public
class MainActivity extends Activity {

public native String  stringFromJNI();

/* This is another native method declaration that is
*not*

* implemented by ‘hello-jni‘. This is simply to show
that

* you can declare as many native methods in your Java
code

* as you want, their implementation is searched in
the

* currently loaded native libraries only the first
time

* you call them.

*

* Trying to call this function will result in
a

* java.lang.UnsatisfiedLinkError exception !

*/

public native String
 unimplementedStringFromJNI();

//
 静态代码块,先于构造函数执行,在此会对C/C++代码的库即:*.so文件进行加载

static {

//hello-jni
为在android.mk 中定义的名称

System.loadLibrary("hello-jni");

}

@Override

protected
void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// System.out.println(stringFromJNI());

}

public
void click(View view) {

//使用

Toast.makeText(this,
stringFromJNI(), 0).show();

}

}

3.5
利用cygwin编译

cd
到当前android 工程目录下 /cygdrive/d/android/workspace/jnitest

[email protected] /cygdrive/d/android/workspace/jnitest

$ ndk-build

Android NDK: WARNING: APP_PLATFORM android-19 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml

[armeabi-v7a] Compile thumb  : hello-jni <= hello-jni.c

[armeabi-v7a] SharedLibrary  : libhello-jni.so

[armeabi-v7a] Install        : libhello-jni.so => libs/armeabi-v7a/libhello-jni.so

[armeabi] Compile thumb  : hello-jni <= hello-jni.c

[armeabi] SharedLibrary  : libhello-jni.so

[armeabi] Install        : libhello-jni.so => libs/armeabi/libhello-jni.so

[x86] Compile        : hello-jni <= hello-jni.c

[x86] SharedLibrary  : libhello-jni.so

[x86] Install        : libhello-jni.so => libs/x86/libhello-jni.so

[mips] Compile        : hello-jni <= hello-jni.c

[mips] SharedLibrary  : libhello-jni.so

[mips] Install        : libhello-jni.so => libs/mips/libhello-jni.so

3.6
运行

来自为知笔记(Wiz)

jni ndk 入门,布布扣,bubuko.com

时间: 2024-10-11 04:54:19

jni ndk 入门的相关文章

cygwin+ndk+eclipse下JNI技术入门

1.JNI的编写步骤1)编写带有native 声明的java类.2)编译java文件成class类3)使用javah -jni com.ikags.project.XXXX 编译成.h文件4)使用C/C++编写代码5)编写makefile文件,将.h和.c(.cpp)文件编译成.dll(.so)文件6)将.dll(.so)文件提供给项目,用system.loadLibrary方法调用. 2.编写makefile文件make执行时,自动寻找Makefile(makefile)文件,然后执行编译工作

Android jni 编程入门

本文将介绍如何使用eclipse和ndk-build来编写一个基于Android4.4版本的包含有.so动态库的安卓程序. 前提是已经安装和配置好了诸如SDK,NDK等编译环境.下面开始编程! 1 程序逻辑 我们要编写的程序包含两部分:java部分--负责界面和调用JNI native函数:JNI native 部分--负责native函数的具体实现(本文使用C语言). native 函数伪代码如下: ? 1 2 3 4 5 6 7 8 /* funtion: 传入两个整形变量,计算他们之和 r

【译】NDK入门

翻译自官网Getting Started with the NDK NDK入门 文档包含以下内容 下载NDK以及工具 创建或导入一个本地项目 本地开发包(NDK)是一个可以在安卓开发中使用C和C++代码的一个工具集合,你可以使用它提供的 平台库 来管理本地操作和访问物理设备组件,例如传感器和触摸输入.NDK不适合大多数新手Android程序员,他们只需要使用java代码和Framework API来开发app.然后,如果你的情况适合一下原因,NDK将会变的非常有用. 设备发挥最大性能,以实现低延

NDK 入门实例

参考了百度经验里面的部分内容,发现里面还有些细节没有写出来,其中遇到不少问题,所以就在这里写出来和大家分享! 参考链接   Android NDK入门开发实例 1.先下载  android-ndk32-r10b-windows-x86 我是32位的机子,将其放在一个没有空格的路径中,因为之后在配置cygwin的时候要求路径不能有空格. 2.在cygwin官网上下载  cygwin   安装  ,这个网上有教程,注意不要少了make (我在网上看到的一篇教程里面就是少了make) 安装完后进行测试

将 so|JNI|NDK 之间的关系说明白

最近在了解公司历史的发展,发现了公司产品中几乎都要使用 so 文件,不禁好奇这个 so 到底是何方神圣. so 文件 so 是 shared object 的缩写,见名思义就是共享的对象,机器可以直接运行的二进制代码.so 主要存在于 Unix 和 Linux 系统中.[参考:安卓so文件是什么,又是如何开发出来的呢? ] 它是 c/c++ 实现的功能函数集合,并对外提供标准的接口,外层可以通过这个接口调用c/c++的代码.在 Android 系统上普遍用于调用系统的硬件接口. 那么,Andro

JNI/NDK开发指南(八)——调用构造方法和父类实例方法

转载请注明出处:http://blog.csdn.net/xyang81/article/details/44002089 在第6章我们学习到了在Native层如何调用Java静态方法和实例方法,其中调用实例方法的示例代码中也提到了调用构造函数来实始化一个对象,但没有详细介绍,一带而过了.还没有阅读过的同学请移步<JNI/NDK开发指南(六)--C/C++访问Java实例方法和静态方法>阅读.这章详细来介绍下初始一个对象的两种方式,以及如何调用子类对象重写的父类实例方法. 我们先回过一下,在J

JNI/NDK开发指南(开山篇)

转载请注明出处:http://blog.csdn.net/xyang81/article/details/41759643 相信很多做过Java或Android开发的朋友经常会接触到JNI方面的技术,由其做过Android的朋友,为了应用的安全性,会将一些复杂的逻辑和算法通过本地代码(C或C++)来实现,然后打包成so动态库文件,并提供Java接口供应用层调用,这么做的目的主要就是为了提供应用的安全性,防止被反编译后被不法分子分析应用的逻辑.当然打包成so也不能说完全安全了,只是相对反编译Jav

(转)java 层调用Jni(Ndk) 持久化c c++ 对象

对于Jni(Ndk) 很多人应该都有印象,Android的ndk接触到的机会相对会比较多,本例子以android平台为例,pc端的话就以简单的windows为例, 编码完用vs 或是 gcc进行编译成dll文件,扔到系统system32 , 就是环境变量配置的文件夹底下,linux 可能也差不多是这个意思,剩下的代码就跟android一样,进行加载这个动态链接库即可. 这里就不做赘述,直接进入android平台的ndk开发,这里就主要讲下,Java层如何持久化c c++ 对象,场景可以是这样,假

超全Android JNI&NDK编程总结

由于网上关于JNI/NDK相关的知识点介绍的比较零散而且不具备参照性,所以写了这篇JNI/NDK学习笔记,便于作为随时查阅的工具类型的文章,本文主要的介绍了在平时项目中常用的命令.JNI数据类型.签名等,便于查阅相关资料.文末相关参考资料比较适合刚接触或者不熟悉Android NDK开发的朋友参阅. 常用命令 javac 编译java源文件生成.class文件 由于JNI对应的头文件由javah工具根据对应的.class文件生成,所以在进行JNI编程之前,写好Java代码后需要先编译,在使用ja