Android之eclipse简单NDK入门

简介:

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

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


 1、首先现在Android的SDK和NDK

wKioL1OiefrhCR4FAACBUy4ndXI621.jpg

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

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

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

wKioL1OietPwXfUXAAIctFw-BEs361.jpg

4、创建项目

wKioL1OieyrhEMdGAAKr_JahOqI251.jpg

5、创建完成后,右击项目Android Tools->Add Native Support就可以了。wKiom1OifBCwAzCyAADVLH372i8435.jpg


wKiom1OifPKw4a5FAAD38R0Tkd0164.jpg

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

wKioL1OifMTAbDwsAADxiR32eA4998.jpg


6、好了,开始写代码。

创建NativeUtils.java

1
2
3
4
5
6
7
8
9
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+/生成模板。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<? 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文件了,也把一些依赖库给我们创建好了,方便很多。

如图

wKioL1OigSbi2Sv1AAFMqyN52e0911.jpg

打开com_xzw_firstndk_NativeUtils.h可以看到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* 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头文件

wKioL1OiggvRaNqkAAJrQGLtjE8254.jpg

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

1
2
3
4
5
6
7
8
9
10
11
12
#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了,现在来调用咯。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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文件。

1
APP_ABI :=armeabi armeabi-v7a x86

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


本文转自xuzw13 51CTO博客,原文链接:http://blog.51cto.com/xuzhiwei/1428192,如需转载请自行联系原作者

相关文章
|
2天前
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
7 1
|
19天前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
30天前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
65 7
|
1月前
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
55 10
|
14天前
|
Web App开发 编解码 视频直播
视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文详细介绍了Android端直播技术的全貌,涵盖了从实时音视频采集、编码、传输到解码与播放的各个环节。文章还探讨了直播中音视频同步、编解码器选择、传输协议以及直播延迟优化等关键问题。希望本文能为你提供有关Andriod端直播技术的深入理解和实践指导。
19 0
|
1月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
96 1
|
1月前
|
IDE Java 程序员
安卓应用开发入门:打造你的第一个“Hello World”
【9月更文挑战第11天】在编程的世界里,每一个初学者的旅程都从一个简单的“Hello World”开始。本文将带领安卓开发的新手们,通过简单直观的方式,一步步构建出自己的第一个安卓应用。我们将探索安卓工作室(Android Studio)的安装、项目的创建,以及如何运行和调试你的应用。无论你是编程新手还是想扩展技能的老手,这篇文章都将为你打开一扇通往安卓世界的大门。
127 7
|
1月前
|
IDE Java API
安卓应用开发入门:打造你的第一个"Hello World"
【9月更文挑战第11天】在探索安卓开发的海洋中,每个开发者的航行都从简单的"Hello World"开始。本文将作为你的航标,引导你驶向安卓应用开发的精彩世界。我们将一起启航,通过浅显易懂的语言和步骤,学习如何构建并运行你的第一个安卓应用。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供所需的知识和信心。准备好了吗?让我们揭开安卓开发的神秘面纱,一起创造些令人兴奋的东西吧!
|
2月前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
143 0
|
2月前
|
XML IDE Java
安卓应用开发入门:打造你的第一个“Hello World”
【8月更文挑战第31天】 在安卓的浩瀚宇宙中,每一个新星都从一句简单的问候开始闪耀。本文将作为你的航标,引导你探索安卓开发的银河系。无论你是初心者还是资深开发者,构建第一个“Hello World”应用总是令人兴奋的里程碑。通过这篇文章,我们将一起搭建起通往安卓开发世界的桥梁。让我们摒弃复杂的术语,用最简单直白的语言,一步步地走过这段旅程。准备好了吗?让我们一起开启这段冒险吧!