android jni开发

摘自:http://www.cnblogs.com/xingfuzzhd/archive/2012/09/05/2671949.html

1.从官网下载NDK http://developer.android.com/tools/sdk/ndk/index.html#Reqs ,并解压文件。(在此目录为/home/zhangz/develop/android-ndk-r8b)

2.配置NDK的环境变量
  执行:gedit ~/.bashrc #在打开的文件末尾添加如下内容

  NDK=/home/zhangz/develop/android-ndk-r8b

  export NDK

3.在当前 bash 环境下读取并执行 ~/.bashrc 中的命令:

  source ~/.bashrc

  或 (source命令也称为“点命令”,也就是一个点符号(.)。)

  . ~/.bashrc

4.然后查看是否生效:

  执行:echo $NDK

  结果:/home/zhangz/develop/android-ndk-r8b

5.编译有两种方法:

  1)在目标工程目录下编译:

    cd /home/zhangz/develop/workspace/HelloNDK/project #进入例子目录

    $NDK/ndk-build #然后在当前目录下执行

  2)在任意目录下编译:

    $NDK/ndk-build -C /home/zhangz/develop/workspace/HelloNDK/project #用 -C 指出工程目录路径

注:无论哪种编译,成功后就会在当前目录下多生成 libs 与 obj 两个子目录。

 

摘自:http://bbs.51cto.com/thread-948244-1.html

下载进入正题啦。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;
/**
*
* @author XuZhiwei (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++的文件头。如下图


会在项目目录下生成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文件。



接下来就是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;
/**
*
* @author XuZhiwei (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 可以看到以下内容:

auto.png (55.19 KB)
2012-8-30 17:49




argument:--login -c "cd /e/myWorkSpace/android/hellJni && $NDK/ndk-build"
切换到Refresh 标签页

r.png (26.26 KB)
2012-8-30 17:49



切换到Build Options标签页

s.png (36.27 KB)
2012-8-30 17:49




这样就完成了配置,点击确定可看到控制台自动编译程序了

k.png (12.95 KB)
2012-8-30 17:49



 

 

摘自:http://blog.csdn.net/jhting/article/details/10099771

无法访问android.app.Activity

可以在-classpath参数里指定多个目录,用分号分开,像下面这样,如下:

F:\android\hello-jni>javah -classpath "F:\android\adt-bundle-windows-x86-2013021
9\sdk\platforms\android-14\android.jar;bin/classes" -d ndk -jni com.example.hell
ojni.HelloJni

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值