EclipseADT配置NDK


一、配置好的ADT。


二、点击菜单Window——Preferences——Android——NDK,输入NDK的路径,最好无中文字符。


三、新建一个Android项目HelloADT。右键项目名,点击Properties——C/C++ General——Paths and Symbols

   ,在Includes标签点击Add,输入NDK中include地址,如D:\AndroidNdk\platforms\android-19\arch-arm\usr\include并勾选Add to all languages。


示例:

在上述的HelloADT项目中新建一个Class—GetString

package com.zhang.helloadt;

public class GetString {
	
	public static native String getString(); //类方法
	
	public native String getStr(); //实例方法
		
	public native int add(int a, int b);//带参实例
		
	static{
		System.loadLibrary("HelloADT");
	}
	
}

右键项目名称,点击Android Tools——Add Native Support,填入HelloADT,finish。

使用cmd— javah -jni 命令生成GetString的头文件,将其放入项目jni目录下

生成的头文件如下

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_zhang_helloadt_GetString */

#ifndef _Included_com_zhang_helloadt_GetString
#define _Included_com_zhang_helloadt_GetString
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_zhang_helloadt_GetString
 * Method:    getString
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_zhang_helloadt_GetString_getString
  (JNIEnv *, jclass);

/*
 * Class:     com_zhang_helloadt_GetString
 * Method:    getStr
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_zhang_helloadt_GetString_getStr
  (JNIEnv *, jobject);

/*
 * Class:     com_zhang_helloadt_GetString
 * Method:    add
 * Signature: (II)I
 */
JNIEXPORT jint JNICALL Java_com_zhang_helloadt_GetString_add
  (JNIEnv *, jobject, jint, jint);

#ifdef __cplusplus
}
#endif
#endif


jni目录中HelloADT.cpp如下

#include <jni.h>
#include "com_zhang_helloadt_GetString.h"

JNIEXPORT jstring JNICALL Java_com_zhang_helloadt_GetString_getString(
		JNIEnv *env, jclass) {

	return env->NewStringUTF("Static Method Call");
}

JNIEXPORT jstring JNICALL Java_com_zhang_helloadt_GetString_getStr(JNIEnv *env,
		jobject) {
	return env->NewStringUTF("Method Call");
}

JNIEXPORT jint JNICALL Java_com_zhang_helloadt_GetString_add(JNIEnv *env,
		jobject, jint a, jint b) {
	return a + b;
}

在MainActivity中

package com.zhang.helloadt;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity {

	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		System.out.println(GetString.getString());
		
		GetString g = new GetString();
		System.out.println(g.getStr());
		
		GetString s = new GetString();
		System.out.println(s.add(1, 2));
	}
}

运行程序在armeabi架构的虚拟机中

若想在x86的架构中运行,只需在jni文件夹创建Application.mk文件,输入  APP_ABI := x86 armeabi 即可。



头文件的生成也可使用ADT自带的Ant实现

可先在工程传建一个xml文件如:build_headers,使用Ant打开。

编写方法具体参照网址 点击打开链接 http://www.codeweblog.com/android-ant-ndk构建自动生成c-c-头文件/

<?xml version="1.0" encoding="UTF-8"?>
<!-- ====================================================================== 
     2016年8月10日 下午11:38:34                                                        


     HelloADT    
     description
                   
     Administrator                                                                
     ====================================================================== -->
<project name="HelloADT" default="BuildAllHeaders">
    <description>
            description
    </description>


    <!-- ================================= 
          target: BuildAllHeaders            
         ================================= -->
    <target name="BuildAllHeaders">
        <antcall target ="BuildGetStringHeader" ></antcall>
    <span style="white-space:pre">	</span><antcall target ="BuildGetIntHeader" ></antcall>
    </target>


    <!-- - - - - - - - - - - - - - - - - - 
          target: BuildGetStringHeader  
           <javah  destdir="./jni" classpath="./bin/classes/" class="com.zhang.helloadt.GetString"></javah>                   
         - - - - - - - - - - - - - - - - - -->
    <target name="BuildGetStringHeader">
    <span style="white-space:pre">	</span>
    <span style="white-space:pre">	</span><exec dir="${basedir}/bin/classes/" executable="javah">
    <span style="white-space:pre">		</span><arg value="-d"/>
    <span style="white-space:pre">		</span><arg value="${basedir}/jni/"/>
    <span style="white-space:pre">		</span><arg value="-jni"/>
    <span style="white-space:pre">		</span><arg value="com.zhang.helloadt.GetString"/>
    <span style="white-space:pre">	</span></exec>
    <span style="white-space:pre">	</span>
    </target>


<span style="white-space:pre">	</span><!-- - - - - - - - - - - - - - - - - - 
          target: BuildGetIntHeader                      
         - - - - - - - - - - - - - - - - - -->
    <target name="BuildGetIntHeader">
    <span style="white-space:pre">	</span><exec dir="${basedir}/bin/classes/" executable="javah">
    <span style="white-space:pre">	</span>    <span style="white-space:pre">		</span><arg value="-d"/>
    <span style="white-space:pre">	</span>    <span style="white-space:pre">		</span><arg value="${basedir}/jni/"/>
    <span style="white-space:pre">	</span>    <span style="white-space:pre">		</span><arg value="-jni"/>
    <span style="white-space:pre">	</span>    <span style="white-space:pre">		</span><arg value="com.zhang.helloadt.GetInt"/>
    <span style="white-space:pre">	</span>    <span style="white-space:pre">	</span></exec>
    </target>


</project>


编译多个源文件

如在jni中再创建一个C++文件Hello.h和Hello.cpp

#ifndef HELLO_H_
#define HELLO_H_

class Hello {
public:
	Hello();
	char * getWords();
	virtual ~Hello();
};

#endif /* HELLO_H_ */


#include "Hello.h"

Hello::Hello() {
	// TODO Auto-generated constructor stub

}

char* Hello::getWords(){
	return "Hello NDK";
}

Hello::~Hello() {
	// TODO Auto-generated destructor stub
}


在GetString.java中加入

public static native String getWords();

再用Ant重新生成头文件,在HelloADT.cpp中实现


JNIEXPORT jstring JNICALL Java_com_zhang_helloadt_GetString_getWords
  (JNIEnv *env, jclass){
	Hello h;
	return env->NewStringUTF((const char*)h.getWords());
}


注意需要在Android.mk中LOCAL_SRC_FILES添加Hello.cpp



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值