温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Android之eclipse简单NDK入门

发布时间:2020-06-05 17:42:18 来源:网络 阅读:1396 作者:xuzw13 栏目:移动开发

    之前写了一篇JNI的使用,这里其实也是JNI的使用,只不过现在的使用更加方便,不需要什么cygwin或者gnu去创建那边麻烦,直接eclipse完成所有操作。

先前的一篇:http://xuzhiwei.blog.51cto.com/978424/976839


 1、首先现在Android的SDK和NDK

Android之eclipse简单NDK入门

2、sdk中以及集成了eclipse,打开eclipse并下载CDT插件支持,一会儿写c++使用。

    CDT下载地址:http://www.eclipse.org/cdt/

3、配置NDK环境,windows->preferences->Android->NDK进行配置。

Android之eclipse简单NDK入门

4、创建项目

Android之eclipse简单NDK入门

5、创建完成后,右击项目Android Tools->Add Native Support就可以了。Android之eclipse简单NDK入门


Android之eclipse简单NDK入门

自动为我们生成了JNI的目录,以及编译的Android.mk等文件。

Android之eclipse简单NDK入门


6、好了,开始写代码。

创建NativeUtils.java

package com.xzw.firstndk; /**  * 与c++的接口类,用来生成.h头文件  * @author xzw  *  */ public class NativeUtils {     public static native String getWords(); }


现在要生成.h的头文件,之前是在cmd里面通过javah命令来生成的,这里我们使用ant来自动为我们生成头文件。


创建build_headers.xml然后以ant editor的方式打开,使用快捷键ALT+/生成模板。

<?xml version="1.0" encoding="UTF-8"?> <!-- ======================================================================       2014-6-19 下午2:07:38                                                              FirstNDK          description                          XMYJ                                                                      ====================================================================== --> <project name="FirstNDK" default="BuilderHeaders">     <description>             description     </description>     <!-- =================================            target: BuilderHeaders                        ================================= -->     <target name="BuilderHeaders" depends="BuildNativeHeader"/>     <!-- - - - - - - - - - - - - - - - - -            target: BuildNativeHeader                                - - - - - - - - - - - - - - - - - -->     <target name="BuildNativeHeader">         <!--         destdir:输出目标目录         classpath:类路径         class:要生成的类         -->         <javah destdir="./jni" classpath="bin/classes" class="com.xzw.firstndk.NativeUtils"></javah>     </target> </project>

右击运行ant,然后刷新jni目录就可以看到.h文件了,也把一些依赖库给我们创建好了,方便很多。

如图

Android之eclipse简单NDK入门

打开com_xzw_firstndk_NativeUtils.h可以看到:

/* DO NOT EDIT THIS FILE - it is machine generated */ #include <jni.h> /* Header for class com_xzw_firstndk_NativeUtils */ #ifndef _Included_com_xzw_firstndk_NativeUtils #define _Included_com_xzw_firstndk_NativeUtils #ifdef __cplusplus extern "C" { #endif /*  * Class:     com_xzw_firstndk_NativeUtils  * Method:    getWords  * Signature: ()Ljava/lang/String;  */ JNIEXPORT jstring JNICALL Java_com_xzw_firstndk_NativeUtils_getWords   (JNIEnv *, jclass); #ifdef __cplusplus } #endif #endif


现在开始实现,打开FirstNDK.cpp,引入.h头文件

Android之eclipse简单NDK入门

eclipse提示功能也是很不错的,alt+/快捷快速提示,

#include <jni.h> #include "com_xzw_firstndk_NativeUtils.h" /*  * Class:     com_xzw_firstndk_NativeUtils  * Method:    getWords  * Signature: ()Ljava/lang/String;  */ JNIEXPORT jstring JNICALL Java_com_xzw_firstndk_NativeUtils_getWords   (JNIEnv *env, jclass clazz){     return env->NewStringUTF("hello firt ndk"); }

好了,c++部分ok了,现在来调用咯。

package com.xzw.firstndk; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends Activity {     TextView resultText;          @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);          resultText = (TextView)findViewById(R.id.result);         //调用c++的输出,显示出来         resultText.setText(NativeUtils.getWords());              }       static{         System.loadLibrary("FirstNDK");     } }


完成了,默认生成的是armeabi架构的so文件,如果需要生成多中架构的支持的so,需要在jni目录下创建Application.mk文件。

APP_ABI :=armeabi armeabi-v7a x86

添加好了,运行起来就可以在libs目录下看到这几个架构的文件夹了。搞定手工了。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI