Android初涉JNI,从零打造你的第一个demo
- 格式:doc
- 大小:155.00 KB
- 文档页数:8
Android中JNI编程的那些事儿(1)2011-06-08 09:19 佚名互联网字号: |JNI译为Java本地接口。
它允许Java代码和其他语言编写的代码进行交互。
在android中提供JNI的方式,让Java程序可以调用C语言程序。
android中很多Java类都具有native 接口,这些接口由本地实现,然后注册到系统中。
AD:Android系统不允许一个纯粹使用C/C++的程序出现,它要求必须是通过Java代码嵌入Native C/C++——即通过JNI的方式来使用本地(Native)代码。
因此JNI对Android底层开发人员非常重要。
如何将.so文件打包到.APK让我们先从最简单的情况开始,假如已有一个JNI实现——libxxx.so文件,那么如何在APK中使用它呢?在我最初写类似程序的时候,我会将libxxx.so文件push到/system/lib/目录下,然后在Java代码中执行System.loadLibrary(xxx),这是个可行的做法,但需要取得/system/lib 目录的写权限(模拟器通过adb remount取得该权限)。
但模拟器重启之后libxxx.so文件会消失。
现在我找到了更好的方法,把.so 文件打包到apk中分发给最终用户,不管是模拟器或者真机,都不再需要system分区的写权限。
实现步骤如下:1、在你的项目根目录下建立libs/armeabi目录;2、将libxxx.so文件copy到 libs/armeabi/下;3、此时ADT插件自动编译输出的.apk文件中已经包括.so文件了;4、安装APK文件,即可直接使用JNI中的方法;我想还需要简单说明一下libxxx.so的命名规则,沿袭Linux传统,lib<something>.so是类库文件名称的格式,但在Java的System.loadLibrary(" something ")方法中指定库名称时,不能包括前缀—— lib,以及后缀——.so。
Android中JNI的使用之一:Java原生JNI的使用、javah指令的使用以及图解教材Java Nativie Interface(JNI,中文名称Java本地接口)标准时Java平台的一部分,它允许Java代码和其他语言写得代码进行交互。
JNI是本地编程接口,它使得Java虚拟机(VM)内部运行的Java代码能够用其他编程语言(如C、C++和汇编语言)编写的应用程序和库进行交互操作。
JNI的主要用途是为了对硬件进行访问以及追求高效率或可重用C/C++库。
Android系统中采用了JNI的方式来调用C/C++方法,然而,在Android系统里进一步加强了Java JNI的使用,使JNI的调用更具有效率。
因此,总的来说,Android 系统里可以采用两种方式来使用JNI。
第一种:Java原生JNI,使用dll等动态链接库;第二种,Android加强版JNI,通过动态加载*.so链接库来进行JNI调用。
今天,我们分析第一种JNI使用方式,也称得上是JNI入门。
由于Java与其他编程语言采用的语法不同,为了让Java与C/C++库函数能进行通信,约定的一个参数类型映射如下:Java类型C/C++类型void voidjboolean booleanjint intjlong longjdouble doublejfloat floatjbyte jbytejchar charjshort shor上面的只是简单类型的一个映射,后面我们会完善其他参数类型的映射。
开发环境介绍(Windows下):Eclipse:主要用来创建Java工程MicrosoftVC++6.0:生成动态链接库供相应的Java文件加载一、使用Eclipse创建Java工程本例中,我们简单的创建了一个Java工程HelloBabyJNI,工程绝对路径位于E:\MyCode\AndroidCode\HelloBabyJNI路径下,主文件路径位于\src\lover\hellojni路径下(路径对后面的javah编译很重要)HelloBabyJNI.java文件如下:[java] view plaincopyprint?1.package com.lover.hellojni;2.3./**4. * 一个简单的Java JNI实例5. *6. */7.public class HelloBabyJNI {8.9./*10. * 静态构造函数,动态加载HelloBabyJNI动态库,其dll文件名为:HelloBabyJNI.dll --->由MSVC6.0软件创建11. */12.static {13. System.load("E:/HelloBabyJNI.dll"); // 可能需要 dll链接库的绝对存放路径14. }15.16./*17. * 在Java中注册需要调用的C/C++本地方法(native method),也就是需要C/C++来实现的方法18. */19.public native int add(int a, int b);20.21.// main方法,加载动态库来调用C/C++本地方法22.public static void main(String[] args) {23. HelloBabyJNI helloBabyJNI = new HelloBabyJNI();24.// 调用注册的add方法来得到返回值25.int result = helloBabyJNI.add(2, 3);26.// 输出27. System.out.println("after invoke the native method,the result is "+ result);28. }29.}2,编译HelloBabyJNI.java文件,生成HelloBabyJNI.class文件,位于路径\src\lover\hellojni\HelloBabyJNI.class3,使用javah指令编译HelloBabyJNI.class文件,生成Java与C/C++之间进行通信的约定接口,它规定了Java中nativemethod在C/C++的具体接口。
AndroidNDK开发指南Android NDK开发指南第一章:介绍Android NDKAndroid NDK(Native Development Kit)是一个用于开发Android应用程序的工具集。
它提供了一组与平台无关的原生C/C++库以及一组工具,可以帮助开发者在Android应用程序中使用C/C++代码编写高性能的本地代码。
本章将介绍Android NDK的概述,包括其背景、目的以及与传统Java开发的区别。
同时还将介绍使用Android NDK的优势和适用场景。
第二章:Android NDK环境搭建要开始使用Android NDK进行开发,首先需要搭建相应的开发环境。
本章将详细介绍如何在Android Studio中配置NDK开发环境,包括下载和安装NDK工具链、配置Gradle构建文件以及设置NDK路径等。
第三章:Android NDK开发基础在进行Android NDK开发之前,需要了解一些基本概念和核心知识。
本章将介绍如何编写和构建C/C++代码,如何与Java层进行交互,以及如何处理线程和内存管理等重要方面。
第四章:使用Android NDK调用系统API在Android NDK中,可以直接调用系统提供的原生API,以实现更底层的功能。
本章将介绍如何使用Android NDK调用系统API,包括访问传感器、相机、音频、网络等硬件和系统服务。
第五章:优化Android NDK代码性能Android NDK提供了一系列优化工具和技术,可以帮助开发者提升代码性能。
本章将介绍如何使用NDK的调试工具、性能分析工具和优化技术,以及在设计和编写代码时应注意的性能问题。
第六章:使用第三方库进行Android NDK开发Android NDK还支持使用第三方库进行开发,这些库可以提供更多的功能和便利性。
本章将介绍如何集成和使用常见的第三方库,比如OpenCV、FFmpeg、SQLite等,以及相应的配置和调用方法。
安卓系统制作教程制作安卓系统是一个复杂的过程,需要多方面的知识和技能。
下面是一个简单的安卓系统制作教程,帮助初学者更好地理解它。
第一步:了解安卓系统架构安卓系统是基于Linux内核和Java虚拟机的开放源代码操作系统。
首先要了解安卓系统的架构,包括核心组件,如应用层、系统服务层、应用框架层、库和运行时。
第二步:设置开发环境安卓系统的制作需要特定的环境和工具。
你需要安装JDK并配置好Java环境变量,然后下载和安装Android SDK。
之后,根据你的开发需求,选择合适的集成开发环境,如Android Studio或Eclipse。
第三步:创建Android工程使用Android Studio或Eclipse创建一个新的Android工程。
在项目中,你可以定义应用的名称、包名、主题和其他属性。
第四步:编写代码安卓系统的编写主要是通过编写Java代码和XML布局文件来实现。
你可以通过学习Android的开发文档和教程来熟悉安卓系统的开发方法和技巧。
在这个过程中,你需要掌握Android的基础组件,如活动(Activity)、布局(Layout)、视图(View)、片段(Fragment)等。
第五步:构建和调试完成代码编写后,你需要构建和调试你的安卓系统。
你可以使用Android Studio或Eclipse提供的工具来构建、运行和调试你的应用程序。
第六步:发布和部署当你的安卓系统开发完成后,你可以将其打包并发布到Google Play商店或其他安卓应用商店中。
你需要创建一个开发者账户,并按照商店的要求提交你的应用。
总结:制作安卓系统不仅需要掌握Java编程语言,还需要了解安卓系统的架构、开发环境和工具。
通过学习和实践,你可以逐渐掌握制作安卓系统的技能,创建自己的应用。
这个过程可能会遇到一些困难,但只要你持续学习和努力,你一定能够制作出优秀的安卓系统。
Android应用开发环境搭建教程随着智能手机的普及,Android应用开发成为了一个热门的行业。
许多人都希望能够开发自己的Android应用,但是很多人却不知道如何搭建开发环境。
本文将介绍如何搭建一个完整的Android应用开发环境,帮助初学者入门。
一、安装Java开发工具包(JDK)Android应用开发需要使用Java语言,因此首先需要安装Java开发工具包(JDK)。
在官方网站上下载适合你操作系统的JDK安装包,并按照提示进行安装。
安装完成后,可以通过在命令行输入“java -version”来验证是否安装成功。
二、安装Android StudioAndroid Studio是官方推荐的Android应用开发集成开发环境(IDE)。
在官方网站上下载适合你操作系统的Android Studio安装包,并按照提示进行安装。
安装完成后,打开Android Studio,会有一系列的设置向导,按照提示进行设置即可。
三、安装Android SDKAndroid SDK是Android开发所需的软件开发工具包。
在Android Studio中,可以通过SDK Manager来安装和管理Android SDK。
打开Android Studio后,点击菜单栏中的“SDK Manager”按钮,然后选择需要安装的Android SDK版本和组件,并点击“Apply”按钮进行安装。
安装完成后,可以通过在命令行输入“adb devices”来验证是否安装成功。
四、创建Android虚拟设备(AVD)Android虚拟设备(AVD)是Android模拟器,用于在计算机上模拟Android设备的运行环境。
在Android Studio中,可以通过AVD Manager来创建和管理AVD。
打开Android Studio后,点击菜单栏中的“AVD Manager”按钮,然后点击“Create Virtual Device”按钮,选择需要创建的设备类型和系统镜像,并按照提示进行设置。
Android应用开发入门:从零开始构建你的第一个应用移动应用开发领域的巨头之一是安卓应用开发。
而在进入这个领域之前,我们需要掌握一些基本的知识。
本篇文章将介绍从零开始构建第一个安卓应用的步骤,并提供一些应用开发的基础知识。
要开始构建安卓应用,首先需要安装并设置好开发环境。
安卓应用开发主要使用Java语言,所以你需要下载并安装Java Development Kit(JDK)。
安装JDK后,你还需要安装Android Studio,这是谷歌官方提供的安卓应用开发工具。
安装完Android Studio后,你就可以开始创建你的第一个安卓应用了。
创建一个新的安卓项目非常简单。
打开Android Studio后,选择“Start a new Android Studio project”选项,然后按照向导的指示进行操作。
你需要选择应用的名称、包名和存储位置等信息。
在创建新项目之前,还需要选择一个适用的设备。
你可以选择一个模拟器或连接一个真实的安卓设备进行开发和测试。
当你完成项目创建后,你将看到一个默认的欢迎界面。
在这个界面上,你可以点击不同的选项来创建新的活动或布局文件。
活动是安卓应用的基本组成单元,它包含用户界面和代码逻辑。
布局文件定义了活动中的控件和布局样式。
要创建一个新的活动,你可以右键点击项目目录,选择“New”和“Activity”选项,然后按照向导的指示填写相应的信息。
一旦你创建了一个活动,你可以在其中添加控件、设置布局和编写代码逻辑。
安卓应用的用户界面主要使用XML来定义。
XML是一种标记语言,用于描述界面元素以及它们的属性和布局。
例如,你可以使用XML来定义一个按钮、一个文本框和一个图片视图。
然后,你可以使用Java 代码来处理这些控件的事件,比如点击按钮时触发某些操作。
此外,你还可以使用一些预定义的Android API来实现更复杂的功能。
Android API是一组开发者可以使用的程序接口,它们允许你访问设备的各种功能,比如相机、传感器和网络。
Android APP开发入门教程这篇文章主要介绍了Android APP开发入门教程,从SDK下载、开发环境搭建、代码编写、APP打包等步骤一一讲解,非常简明的一个Android APP开发入门教程,需要的朋友可以参考下;工作中有做过App项目,前端和android或ios程序员配合完成整个项目的开发,开发过程中与ios程序配合基本没什么问题,而android各种机子和rom的问题很多,这也让我产生了学习android和ios程序开发的兴趣;于是凌晨一点睡不着写了第一个android程序HelloAndroid,po出来分享给其他也想学习android开发的朋友,这么傻瓜的Android开发入门文章,有一点开发基础的应该都能看懂;一、准备工作主要以我自己的开发环境为例,下载安装JDK和Android SDK,假如你没有现成的IDE,你可以直接下载SDK完整包,里面包含了Eclipse,如果有IDE那么你可以滚动到下面选择USE AN EXISTING IDE,然后安装SDK,如果你的SDK在安装时找不到JDK目录,你可以在系统环境变量里添加JAVA_HOME变量,路径为你的JDK目录,我的IDE是IntelliJ IDEA,都装好以后开始配置IDE增加SDK支持;首先,打开Android SDK Manager把Android 4.0以上版本的未安装的都打勾装上,根据你个人实际情况,如果你只打算用自己的测试,那就把你机子系统一样版本的SDK包装上,下载时间有点长;然后打开IDE创建新项目,IDEA比较智能,如果你装好了SDK,新建项目里就会出现Android的Application Module,选择后右边Project SDK为空,点击New按钮,找到SDK目录确定,下拉列表就会列出已经安装的各个版本的SDK,选择自己需要的版本,如果是第一次设置,IDE会提醒你先设置JDK,根据提示找到JDK目录即可;填好项目名称后下一步选择USB Device,然后完成项目构建,IDE会自动生成基本的项目所需的文件及目录;二、代码编写做好准备工作后,终于可以开始写我们的hello android了,在开始编写代码之前,我们先了解几个文件:res/layout/main.xml App主窗体布局文件,你的应用长什么样都在这边定义,有Design和Text两种模式res/values/strings.xml 可以理解为i18n文件,这个文件用来存放程序调用的各种字符串src/com/example/helloandroid/MyActivity.java 这个就是我们的主程序类,等下要实现的功能都在这个文件里添加首先为应用添加一个id为hellotextView的textview和一个id为hellobutton 的button,mail.xml 代码如下:代码和控件用到的字符串定义如下:主程序中定义button点击后改变textview显示的文本,并且弹出Toast提示信息,代码如下:代码写好后,电脑通过USB数据线连接,系统设置里的开发人员选项里打开USB 调试,在IDE中直接点Run就可以在上看到运行的效果了;应用打包应用开发完成后就要打包发布了,在IDE的Build菜单下选择Generate Signed APK 来打包应用在弹出的Wizard对话框中需要指定签名的Key,一开始没有Key你可以点击Create New来新建一个Key用于签名,填入签名所需的一些字段后生成Key文件使用生成的Key来签名应用包完成编译后会在刚才我们设置的Designation APK path下生成我们的helloandroid.apk应用包,接下来要怎么安装应用应该不用说了吧,我们的第一个Android App就这样诞生了;。
Android应用开发从入门到精通第一章:介绍Android应用开发的基础概念Android应用开发是指基于Android操作系统平台开发的移动应用程序。
Android是一个基于Linux的开放源代码平台,它提供了强大的开发工具和丰富的API(应用程序接口),使开发者能够创建各种各样的应用程序,包括游戏、社交媒体、电子商务和工具类应用等。
Android应用开发的核心概念包括Activity、Fragment、布局文件、资源文件、Intent等。
Activity是Android应用的主要组件,每个Activity代表了应用的一个界面。
Fragment是一个可重用的界面组件,可以在Activity中动态加载和替换。
布局文件定义了Activity或Fragment中的界面元素的排列方式,可以使用XML语言编写。
资源文件包括图片、字符串、颜色等,用于应用的各种资源的管理。
Intent用于在不同的组件之间进行通信和传递数据。
第二章:Android应用开发环境的搭建要进行Android应用开发,需要搭建相应的开发环境。
首先,需要下载并安装Java Development Kit(JDK),然后下载并安装Android Studio,它是官方推荐的Android开发工具。
安装完Android Studio后,需要配置Android SDK(软件开发工具包)。
Android SDK包含了众多的开发工具和API,可以满足不同应用的需求。
配置SDK的过程通常包括选择需要安装的组件和设置相应的环境变量。
安装完成后,就可以开始进行Android应用的开发了。
第三章:Android应用的UI设计用户界面(UI)是Android应用的重要组成部分,好的UI设计能够提高用户体验。
Android提供了丰富的UI元素和布局管理器,开发者可以根据应用的需求自由选择和设计UI。
常用的UI元素包括文本框、按钮、图像视图、列表视图等。
Android提供了一套用于绘制和交互的UI组件,开发者可以通过XML文件或者代码方式来创建UI界面。
Android应用开发入门开发流程详解Android应用开发是目前移动应用开发领域中最为活跃的领域之一,它提供了一种基于Java语言的开发环境,让开发者能够轻松创建功能强大的移动应用。
本文将详细介绍Android应用开发的入门开发流程,以帮助读者快速入门。
一、环境搭建在进行Android应用开发之前,首先需要搭建开发环境。
具体来说,需要安装JDK、Android Studio和Android SDK。
JDK是Java开发工具包,Android Studio是官方推荐的Android开发IDE,Android SDK是Android软件开发工具包。
安装完成后,还需要配置Android Studio以及Android SDK,并下载相应的开发工具和系统镜像。
二、项目创建在Android Studio中创建一个新项目是第一步,点击"Start a new Android Studio project"按钮,然后根据提示填写应用的详细信息,如应用名称、包名、项目位置等。
创建项目后,根据需求选择相应的Activity和布局样式。
三、界面设计Android应用的界面设计是非常重要的一步,可以通过XML和Java 代码两种方式进行。
XML文件定义了应用的布局结构,开发者可以通过拖拽和修改XML布局文件来设计界面。
Java代码则负责处理用户界面的交互和逻辑。
四、功能实现实现应用的功能是Android应用开发的核心部分,可以通过编写Java代码实现。
开发者可以根据需求选择合适的API和库来实现各种功能,如数据存储、网络通信、传感器控制等。
在编写代码时,需要注意代码的可读性和可维护性,以便日后的开发和维护工作。
五、测试与调试在开发完成后,需要进行测试和调试。
Android Studio提供了强大的调试工具,可以帮助开发者定位和解决应用中的问题。
测试时可以使用模拟器或真实设备进行,确保应用在不同设备上都能正常运行并具备良好的用户体验。
Android开发环境搭建图解教程一、开发环境搭建在搭建Android开发环境之前,首先要了解Android对操作系统的要求:Android可以运行在Windows XP及以上的版本上,也可以运行在Mac OS和Linux 等操作系统上,本文以Windows XP为依托进行Android开发环境搭建的讲解。
1.安装JDK和配置Java开发环境Android应用程序开发使用Java语言,因此首先需要搭建Java程序开发运行环境,Java的开发环境称为JDK(Java Development Kit),是Sun Microsystems 针对java程序员开发的产品,自从Java推出以来,JDK已经成为最广泛的Java SDK。
JDK是整个Java的核心,包括了Java运行环境JRE(Java Runtime Environment)、Java工具和Java基础类库。
1.1 下载JDK当前最新版JDK的下载地址为:/technetwork/java/javase/downloads/jdk-7u2-download-1377129.html图1 - 11.2 配置JDK右键点击“我的电脑”,选择“属性”→“高级”→“环境变量”→“系统变量”,找到“Path”变量名(如果没有就新建一个名为“Path”的变量),点击“编辑”按钮,添加JDK安装目录中的“bin”文件夹路径,以分号隔开,如图1-2所示,然后点击“确定”按钮完成设定。
图1 - 2再找到“CLASSPATH”变量(如果没有,以同样方法新建一个),输入JDK 安装目录中的“lib”及“demo”的路径,如图1-3所示,点击“确定”按钮完成设定。
1.3 验证JDK是否安装配置成功安装配置完成之后,需要测试JDK是否安装配置成功。
在Windows XP系统中点击“开始”→“运行”,输入“CMD”回车进入命令行模式,键入命令“java -version”,运行结果如图1-4所示,表示安装JDK安装成功(显示的版本号根据具体情况可能有所不同)。
从零开始学android android编程基础篇来源:扣丁学堂从零开始学习Android编程,首先要了解Android操作系统为何物。
同样的从零开始学习Android开发技术对于Android系统的优势和前景也要有着一定的了解。
本文扣丁学堂Android开发培训讲师和学员分享从零开始学android编程基础篇内容。
从零开始学android android编程基础篇:android操作系统以Linux为基础一款免费开源代码系统,刚开始只是适用于智能手机领域,直至2005年之后逐渐扩展到平板电脑及其他领域上。
随着android开发者们的不懈努力,android系统涉及的领域已是越加广泛。
Symbian操作系统是一款面世较早的手机操作系统,曾广泛应用于诺基亚、摩托罗拉等主流机型,是手机领域中应用范围较广的操作系统之一。
Symbian拥有相当多针对不同用户的界面,它最大的特点就是采用了系统内核与人机界面分离技术,操作系统通常会因为手机的具体硬件而作改变,在不同的手机上它的界面和运行方式都有所不同。
Symbian对于硬件的要求比较低,支持多种语言环境,兼容性和扩展性非常出色。
Windows Mobile是微软公司为智能移动终端设备开发的操作系统,将用户熟悉的桌面Windows体验扩展到了移动设备上。
Windows Mobile作为微软公司的掌上版本操作系统,在与桌面PC和Office办公软件的兼容性方面具有先天的优势,而且具有强大的多媒体性能,办公娱乐两不误。
但其软件使用复杂、系统不太稳定、硬件要求较高。
Windows Phone是微软公司发布的一款针对智能手机的操作系统。
Windowshone具有桌面定制、图标拖拽、滑动控制等功能,其主屏幕通过提供类似仪表盘的体验来显示新的电子邮件、短信、未接来电、日历约会等,让人们对重要信息保持时刻更新。
它还包括一个增强的触摸屏界面,以及一个IE Mobile浏览器。
简单几步教你打开Android之门 NDK入门教程这是一篇Android NDK开发的入门教程,在这一教程结束后,你将创建你自己的项目,从Java代码简单地调用原生C语言代码。
前不久我们为大家介绍过在MyEclipse 8.6上搭建Android开发环境,本文为一篇外文翻译,我们将介绍如何学习安装 Android NDK 并开始使用它。
在这一教程结束后,你将创建你自己的项目,从 Java 代码简单地调用原生 C 语言代码。
教程细节技术:Android SDK、NDK、C 语言难度:进阶预计完成时间:60-90 分钟先决经验在我们开始之前,我们需要先花点时间了解一下这一教程的难度。
它的标记是“进阶”。
之所以标为“进阶”是因为我们这些作者想要确保你符合以下要求:你有Java和C语言经验。
你能适应命令行操作。
你知道如何了解你的 Cygwin、awk 和其他工具的版本。
你能适应 Android Development。
你有一个有效的 Android 开发环境(本文撰写时,笔者使用的是 Android 2.2)你使用 Eclipse 或者可以将 Eclipse 的指导步骤轻松应用于你自己的 IDE 上。
就算你并不满足这些条件,我们当然也欢迎你阅读这一教程,不过你可能在某些步骤遇到困难,如果你满足了以上条件这些困难就会轻易解除。
也就是说,即使你认为自己是个移动开发老手,使用 NDK 依然很容易碰到困难和麻烦。
请注意你可能要自行排查故障才能让一切正常运转于你的开发系统中。
本教程提供完整的样例项目的开源代码下载。
何时使用 NDK 的说明好,如果你正在阅读这篇教程,你也许已经在考虑在你的 Android 项目中使用 NDK 了。
不过,我们想要花点时间讨论一下 NDK 为什么那么重要、何时该使用它,以及——同等重要的,何时不该使用它。
总的来说,只有当你的应用程序真的是个处理器杀手的时候你才需要使用 NDK。
也就是说,你设计的算法要利用 DalvikVM 中所有的处理器资源,而且原生运行较为有利。
基础篇实战Android编程——手把手教你做出商用软件2第1章Android开发起步本章将要介绍的是Android开发起步的相关知识,首先将会对Android平台进行简单的介绍,其中包括Android的背景及其应用程序的框架。
然后会向读者讲解如何搭建Android 的开发环境、如何在Ecl中创建一个项目,以及如何使用Android平台提供的工具调试和监控应用程序。
1.1 Android平台简介Android平台自发布以来就一直吸引着广大开发者的目光,本节就对Android平台做简单的介绍,读者通过本节的学习可以对Android平台的来龙去脉及内部结构有比较透彻的了解。
1.1.1 Android背景介绍Android是一个开放的手机操作系统平台,为移动设备提供了一个包含了操作系统、中间件及应用程序的软件叠层架构。
Android SDK为开发人员使用Java语言编写Android平台下的应用程序提供了必要的工具和API。
1.Android的诞生Android也是一家公司的名称,这家公司的创始人名叫Andy Rubin。
Andy Rubin原来是苹果的一名工程师,后来创办过几家公司。
在创建Android公司时,Andy Rubin准备打造一个移动终端平台并将其对开发人员开放,后来Google收购了该公司,于是就有了今天如日中天的Android。
2.Android的特性Android自推出以来如此受追捧不仅仅是因为网络巨头Google的大力扶持,Android自身所具有的特性才是吸引全球精英开发者的更重要原因。
¾应用程序框架:可以方便地重用和替换手机组件。
¾Dalvik虚拟机:专为移动设备优化过的虚拟机。
¾内部集成浏览器:基于开源的WebKit引擎。
¾优化的图形系统:其中自定义了2D图形库,3D图形库基于OpenGL ES 1.0,可选硬件加速。
第1章 Android 开发起步3¾ SQLite :集成了轻量级数据库管理系统。
Android_Jni 操作指南近日小弟闻听android可以调用c/c++代码,所以很是好奇,就开始研究Jni。
在android JNI叫NDK(Native Development Kit),需要下载几个工具,下面我给大家按步骤的说明Jni的使用方法:一、准备工作Cygwin /setup.exeandroid-ndk-1.6_r1 /android/ndk/android-ndk-1.6_r1-windows.zipCDT /fd.php?i=578218968285704&s=070a0643ccfb0a3aade962e99302e6ef Eclipse二、安装Cygwin我们采用Cygwin去编译C、C++代码1.从上面指定网址下载到Cygwin2.点击安装因为安装软件很容易在这个我只介绍几个关键不步骤(没介绍的就按照默认点下一步就可以了)。
没有这个地址可以Add进去这一步需要很长时间(要耐心啊)将箭头指向的点成install 然后下一步这一个窗口需要经过几个阶段大家耐心等待我装的时候话了快一天啊中间反反复复错一几次,如果出现找不到的情况换个镜像地址,我试了两个终于成功啦。
最后直接下一步点击完成Cygwin就算安装完成桌面上会出现这样一个图标点击进去随便试验几个命令看安装成功没如和下面一样就表明安装成功三、安装NDK1.下载android-ndk-1.6_r1 (我使用的是这个版本的)2.将android-ndk-1.6_r1解压具体位置你可以自己定我是放在了E:\android底下3.打开Cygwin 进入到android-ndk-1.6_r1的根目录下具体指令如下4.输入build/host-setup.sh 如果出现下面的信息表明安装成功这里需要说明一下如果出现让你cd NDKROOT …你指需要执行export NDKROOT=E:\android\android-ndk-1.6_r1 也就是说是你NDK的路径5.NDK安装完成之后就让我们先编译一下NDK sample里面给的例子吧首先进入到ndk根目录然后make APP=hello-jni –B如果出现上图的信息就表明编译成功编译完成后会生成一个.so共享库文件四.编写第一个NDK程序由于是操作文档,所以在这里只是给大家简要的介绍一下概念Android NDK开发是使用JNI对本地的方法或者库来将Java程序和Native程序结合起来。
ndk的使用流程NDK(Native Development Kit)是Android提供的一个开发工具包,用于开发C/C++库,并将其集成到Android应用程序中。
NDK的使用流程可以分为以下几个步骤。
第一步,安装配置NDK。
首先需要下载NDK,可以从Android官方网站或者Android Studio的SDK Manager中下载安装。
安装完成后,需要配置NDK的环境变量,以便在命令行中可以直接使用NDK提供的工具。
第二步,创建NDK项目。
可以使用Android Studio创建一个新的NDK项目,或者将NDK集成到现有的Android项目中。
在项目的build.gradle文件中,需要添加NDK的配置信息,包括NDK的版本和需要编译的C/C++文件路径。
第三步,编写C/C++代码。
在项目中创建一个jni目录,用于存放C/C++代码。
在该目录下,可以创建多个C/C++文件,用于实现不同的功能。
在编写代码时,需要注意使用C/C++的语法和规范,并且可以使用NDK提供的一些特定的API和函数。
第四步,编译C/C++代码。
在命令行中进入到项目的根目录下,执行命令"ndk-build",即可编译C/C++代码。
编译完成后,会生成对应的动态链接库文件(.so文件),可以在项目的libs目录下找到。
第五步,配置JNI接口。
在Java代码中,需要通过JNI(JavaNative Interface)来调用C/C++代码。
首先需要创建一个Java类,用于定义JNI接口。
在该类中,可以使用native关键字声明需要调用的C/C++函数。
然后,在命令行中执行命令"javah",可以生成对应的JNI头文件。
将该头文件拷贝到jni目录下,并在其中实现JNI函数的具体逻辑。
第六步,使用JNI接口。
在Java代码中,可以通过调用JNI接口来使用C/C++代码。
首先需要加载动态链接库文件,可以使用System.loadLibrary()方法来实现。
Android中JNI的使用方法首先看一下Android平台的框架图:可以看到Android上层的Application和ApplicationFramework都是使用Java编写,底层包括系统和使用众多的LIiraries都是C/C++编写的。
所以上层Java要调用底层的C/C++函数库必须通过Java的JNI来实现。
下面将学习Android是如何通过Jni来实现Java对C/C++函数的调用。
以HelloWorld程序为例:第一步:使用Java编写HelloWorld 的Android应用程序:package com.lucyfyr;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class HelloWorld extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.main);Log.v("dufresne", printJNI("I am HelloWorld Activity"));}static{//加载库文件System.loadLibrary("HelloWorldJni");}//声明原生函数参数为String类型返回类型为Stringprivate native String printJNI(String inputStr);}这一步我们可以使用eclipse来生成一个App;因为eclipse会自动为我们编译此Java文件,后面要是用到。
Android初涉JNI,从零打造你的第一个demo 最近打算重构项目中的部分代码,将部分耗时或者敏感的代码放到native中实现。
说来惭愧,本人今年3月份才开始接触android开发,虽然一早就知道android中可以使用c/c++代码,但一直没有尝试。
于是趁着这次机会研究一下android中的ndk开发,花了一个下午加一个上午,经历了种种悲剧后终于跑通了第一个demo。
在整个过程中参考了无数文章,也走了很多弯路,特此写下本文章,希望帮助刚刚接触JNI的童鞋们更快的上手。
上面说的貌似是废话,现在开始进入正题。
我的开发环境是windows+eclipse,因此在开始真正写代码前,还需要在windows上搭建相关环境才能编译.so文件。
这里我推荐看下/jdksummer/articles/2166057.html这篇配置文章写的很详细。
假设你现在已经搭建好了开发环境,那么开始吧!(听着音乐,开始我们的学习吧!!)
1.打开eclipse新建一个android的工程,就叫"MyFirstJNI"吧。
建立后添加一个class 文件作为jni的接口,我是这样添加的
在该类中添加如下代码:都是一些很简单的函数^^
package om.example.myjni;
2
3 public class JNI {
4 public native void write();
5 public native String sayHello();
6 public native int plus(int a, int b);
7 }
这个就是native code在java中的接口了。
添加完成后,build project。
第一步的准备工作就此完成,很容易吧。
2.打开cmd并定位到刚刚新建的"MyFirstJNI"工程目录下的bin/classes目录,执行”javah -classpath . -jni com.example.myjni.JNI“,没有意外的话,bin/classes 目录下应该会产生一个com_example_myjni_JNI.h文件。
这个就是native code需要实现的函数了。
3.现在我们把刚刚得到的.h文件拷贝出,为它新建一个工程,我是手工建立的。
建立D:\MyfirstJNISO目录,并建立子目录jni(必须叫这个,否则后面会不能编译哦),并将.h 文件拷贝到该目录下,并新建一个com_example_myjni_JNI.c文件实现相关函数,代码如下:
#include
<string.h>
0 2 #include
"com_example_myjni_JNI.h"
0 3 0 4 0 5
0 6 JNIEXPORT void JNICALL Java_com_example_myjni_JNI_write
7
(JNIEnv *env, jobject thiz) 0
8
{
9
1
}
1
1
1 2 / *
1 3
* Class: com_example_myjni_JNI
1 4
* Method: sayHello
1 5
* Signature: ()Ljava/lang/String;
1
6
*/
1 7 JNIEXPORT jstring JNICALL Java_com_example_myjni_JNI_sayHello
1
8
(JNIEnv *env, jobject thiz)
1
9
{
2
return(*env)->NewStringUTF(env, "Hello from JNI !"); 2
1
}
2
2
2 3 / *
2 4
* Class: com_example_myjni_JNI
2
5
* Method: plus 2
6
* Signature: (II)I 2
7
*/
2 8 JNIEXPORT jint JNICALL Java_com_example_myjni_JNI_plus
2 9 (JNIEnv *env, jobject thiz, jint a, jint b)
3
{
3
1
return a+b;
3
2
}
接着还需要同一个目录下添加一个Android.mk文件,编译时候使用,具体内容如下:LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := first_jni (最终so文件名是
lib first_jni.so)
LOCAL_SRC_FILES := com_example_myjni_JNI.c (代码)
include $(BUILD_SHARED_LIBRARY)
是不是很麻烦,不过我们已经离成功越来越近了。
3.现在整理一下,我们到目前为止的工作,新建了一个android工程以及一个C的工程(暂且叫工程吧),现在开始最重要的一步,编译c代码生成.so文件让android工程中的调用。
你现在应该已经配置好了cygwin了吧,打开吧,定位到C工程目录,比如
D:\myfirstJNISO的话就执行”cd /cygdrive/D/myfirstJNISO“,然后执
行”$NDK/ndk-build
“(其中$NDK和你配置的cygwin有关)。
这样编译的工作就完成了,如果你前面没有范任何错的话。
赶紧打开C工程目录吧应该是这样的吧
黄色标记的目录就是我们需要的东西哦,里面是一个”armeabi“文件夹,里面是编译得到的.so文件。
final.将上面的armeabi文件夹整个拷贝到我们一开始建立的MyfirstJNI工程的libs 目录下,所有工作都已就绪,你的工程应该是这样的:
(ps:请忽略android-support-v4.jar这个和本次的内容没关系)
现在就来编写java代码调用吧,在MainActivity中添加必须的代码:
1 static {
2 System.loadLibrary("first_jni");
3 }
这个是让系统加载so库,注意编译生成的库的名字是带前缀lib的,代码中请忽略否则会找不到响应的so文件。
调用就很简单了:
1 jni = new JNI();
2
3 jni.sayHello();
4
5 jni.plus(1,2);
最后添加一些简单的button测试一下吧,我做的比较简陋了:。