Native Development Kit

Slides:



Advertisements
Similar presentations
哈工大计算机科学与技术学院软件基础教研室 第二部分 Android 与工程和科研 授课教师:李治军 综合楼 411 室 第 6 讲 进入 Android 内核 Lecture 6: Get Into the Android Kernels.
Advertisements

Java 程序设计 案例教程 北京大学出版社 第 01 章. Java 程序设计案例教程 第 01 章 Java 语言与面向对象程序设计 Java 语言的历史 Java 语言的特点 Java 程序的分类 Java 环境配置 Eclipse 的安装 Java 程序的调试 教学目标.
JAVA 概述 主讲:张雷. J2ME API 地址: 广东科贸信息工程 张雷学习要求 了解各种程序设计语言及其特点 了解各种程序设计语言及其特点 了解 JAVA 的发展史和其特点 了解 JAVA 的发展史和其特点.
Android App簡介及 App Inventor 2體驗 靜宜大學資管系 楊子青
第二章:行動裝置與擴增實境.
嵌入式系统简介 Introduction to Embedded System
用 Andriod手機 12年國教~有效教學策略設計 國立北門高中 林明璋 玩
課程地圖 (104年入學-日間部) 校通識核心 專業課程 必修與選修 與管理模組 網路技術 App設計與應用模組 學院通識核心 學院專業核心
圖書資訊處 -智慧型網路服務介紹- 2014年1月13日.
網站「開外掛」 優化營業人員的戰鬥力 介紹 Web365行動展售網站系統的10大特色
硕士论文开题报告 煤炭企业物流信息系统的 研究与设计 指导老师: 学生姓名: 学 号:
開南大學 資訊管理學系 學分學程相關說明.
星云集团.
学生教育办介绍 2015年9月.
第一章 Android简介与环境搭建 QQ号: QQ群: (Android编程入门) 网络资源:
教育雲端科技的現況與未來發展 臺北市政府教育局聘任督學 韓長澤.
浅谈我与Android相处的点滴 一、个人自动化经验分享 二、Android基本架构了解 三、MonkeyTest指令学习
第十四章 軟體系統安全 課前指引 網際網路的發展將每台電腦串連成共通的網絡,而層出不窮的資訊安全問題使得如何在開放的環境中,實現軟體安全的議題,逐漸受到重視。就軟體安全的角度而言,可分為軟體安全的應用及實作兩方面。在軟體安全應用方面,主要討論如何安全地執行及操作應用軟體,就網路應用軟體而言,電子郵件與檔案傳送等軟體,已有許多相關的安全技術發展,另一項近年十分流行的網路應用服務-即時通訊軟體,其安全性問題亦日漸受到重視。
简历撰写 杰普软件科技有限公司 赵芬芳 Brighten your way and raise you up.
Android环境搭建 倚动软件工厂实验室 网络课程地址:
動畫與遊戲設計 遊戲開發工具 程于芳 老師
PortableAPPs 製做我的行動學習碟
第二章 B4A程式語言的開發環境 課程名稱:程式設計 授課老師:李春雄 博士
荷福威士顿机器人科技有限公司 上海荷福集团
第1章 java简介及环境搭建 第1章 Java简介及开发环境搭建.
汽车安全驾驶检测系统 指导教师:李春杰 资料下载: PPT课件下载: 范文下载: 试卷下载:
Android App 系統開發教學 Luna 陳雯琳 2014/12/18
使用Android Studio 開發Android App 靜宜大學資管系 楊子青
建立Android新專案 建國科技大學 資管系 饒瑞佶 2010/10.
厦门大学数据库实验室 报告人:谢荣东 导师:林子雨 2014年8月30日
APP課程:Android程式設計開發環境與工具介紹
Review: Android简介.
第一章 認識Visual C 環境架構 1-1 認識Visual C Visual Studio 概觀
第2章 建立Android應用程式 2-1 Java語言、XML文件與Android 2-2 建立第一個Android應用程式
Microsoft .NET 第4組 十月15, 2002 B 陳東傑 B 蔣佳勳
Symbian OS介绍 概述 第一部分.
ANDROID與OSGI平台整合.
App Inventor 零基础Android移动应用开发
Android程式開發準備 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
Introduction on Smartphone Platform
Android SDK工具 Android智慧型手機程式設計 建國科技大學 資管系 饒瑞佶 2012/4 V1 2012/8 V2
第一个Android程序 本讲大纲: 1、创建Android应用程序 2、Android项目结构说明 3、运行Android应用程序
具備可攜性及通話品質量測功能之軟體電話架構設計與實作
講師:戴志華 國立台灣大學電機工程研究所 Visual Basic 程式設計 講師:戴志華 國立台灣大學電機工程研究所.
Installation, advance wireless module and evaluation 2008/11/11
移动系统的安全: 攻击和防御 杜文亮 教授 Dept. of Elec. Eng. & Comp. Sci.
App Inventor 2體驗 靜宜大學資管系 楊子青
Android 课程讲义 智能手机开发
第一章 認識Java Java 程式設計入門(I).
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
教務行政資訊系統 簡介 資訊科技中心 資訊系統組 徐振琦
2018/12/7 Java语言程序设计 教师:段鹏飞.
Java基础入门 第1章 Java开发入门 · Java语言的特点 · Java开发环境的搭建 · 环境变量的配置 · Java的运行机制.
Computational Photography final project- Histogram Equalization
建立Android新專案 Android智慧型手機程式設計 程式設計與應用班 建國科技大學 資管系 饒瑞佶 2012/4 V1
Android手动测试实践 ——绮珠.
《网上报告厅》使用说明 北京爱迪科森教育科技股份有限公司.
App Inventor 2體驗 靜宜大學資管系 楊子青
認識 Java.
Linux核心編譯與模組管理 2013/01/19.
Submit Meego Application for Intel AppUP(SM)Center
前终端一体化开发解决方案 腾讯 lucaspei(裴伟).
01.Java语言概述 讲师:复凡.
微软云计算 --Windows Azure platform
第1章 Java语言概述 学习目标 本章要点 上机练习 习 题.
人工智能人才培养示范基地建设分享 上海电子信息职业技术学院 邵瑛.
App Inventor 2體驗 靜宜大學資管系 楊子青
實驗十六:匯出APK安裝檔與軟體上架.
第三章 軟體資源管理 授課老師:褚麗絹.
Android进程间通讯.
Presentation transcript:

Native Development Kit

序論 自Android平台發表以來,許多軟體開發者都關注著是否能以原生程式碼(native code,諸如C與C++語言)實作應用程式的內容,網路上也有許多的心得與技巧被提出。Google為了標準化與簡化一般在Android應用程式中 Java類別與原生程式語言間的開發程序與介面,於2009年6月發佈了Android 1.5 NDK(Native Development Kit,原生開發套件)。

單元介紹

基礎知識 具備JNI概念 具備C跟C++語言基本開發能力 具備Java語言一定基礎 具備Android系統一定概念

目錄 Part I NDK概論 Chapter 1NDK基本介紹 Part II

Part I NDK概論

Chapter 1 NDK介紹 1.1 什麼是NDK 1.2 為何需要NDK 1.3 NDK架構 1.4 NDK應用流程 1.6 版本對照表

1.1什麼是NDK NDK = Native Development Kit 是一個本地程式碼開發套件,透過JNI(Java Native Interface)Java本地介面機制來供Java程式碼調用。 每個Android應用程式都是透過Dalvik虛擬機器執行,由虛擬機器來負責程式所需的資源管理,就像Java程 式是透過Java虛擬機器執行一樣。 Dalvik對於Android應用程式使用原生程式碼的概念也學習自Java。 Dalvik實作了標準的 JNI(Java Native Interface,Java原生介面,Java語言用來與C或C++等原生程式碼溝通的介面)功能, 使Android應用程式中的Java類別能順利的 與原生函式庫溝通。 這些函式庫可能是原本已內建於Android系統中的核心函式庫(如:libc、WebKit、SQLite等),或是由開發者自行撰 寫並編譯完成的函式庫。Android應用程式透過Dalvik虛擬機器的JNI功能與原生函式庫溝通的方式,如圖所示:

1.1什麼是NDK(cont'd) Java Source C Source Compile with Javac Header file Compile and link C code Java Class Create C Header with Javah -jni Dynamic library 這個流程圖是JAVA如何透過JNI來呼叫底層的C/C++函式庫 為什麼要介紹這張圖? 因為NDK的用處就是將自己說定義的C或C++的函示庫包在自己所編寫的APP中所使用 每個寫好的APP最後都會發布成APK為了將自己所撰寫的函示庫可以包在裡面所以需要使用NDK做打包 Java VM Java Class Dynamic lib

1.1 什麼是NDK(cont'd) JNI與NDK差別 JNI是Java調用Native機制 NDK是Google幫助Android開發者透過C/C++本地語言編寫應用程式的開發工具 對內,android內部則用JNI(java native interface)表示java call  c  的結構.  android 上層用Java,底層用C中間用JNI串接.       對外, google提出NDK發展系統,以串接Java與 C原理都一樣 JNI是Java調用Native機制,是Java語言自己的特性全稱為 Java Native Interface,類似的還有微軟.Net Framework上的p/invoke,可以讓C#或Visual Basic.Net可以調用C/C++的API,所以說JNI和Android沒有關係,在PC上開發Java的應用,如果運行在Windows平台使用 JNI是是經常的,比如說讀寫Windows的註冊表。 NDK是Google公司推出的幫助Android開發者透過C/C++本地語言編寫應用程式的開發工具,包含了C/C++ 的header文件、library文件、說明文檔和範例程式碼,我們可以理解為Windows Platform SDK一樣,是純C/C++編寫的,但是Android並不支持純C/C++編寫的應用,同時NDK提供的library和fuction功能很有限,僅僅處理些算法效率敏感的問題

1.2為何需要NDK NDK是一系列工具的集合 NDK帶來什麼 幫助開發者快速開發C(或C++)的動態庫 自動將so和Java應用程式一起打包成apk NDK集成了交叉編譯器 NDK帶來什麼 使用C開發,性能需求較高的邏輯程式,提高應用程式的執行效率。 使用C開發,需保密的應用邏輯程式。 NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。 NDK集成了交叉編譯器,並提供了相應的mk文件隔離CPU、平台、ABI等差異,開發人員只需要簡單修改mk文件(指出「哪些文件需要編譯」、「編譯特性要求」等),就可以創建出so。 它可產生Linux,OS X 和windows(用Cygwin)上的原生ARM 的二進制碼。 NDK就是能夠方便快捷開發.so檔案的工具。JNI的過程比較複雜,生成.so需要大量操作,而NDK就是簡化了這個過程。

1.2為何需要NDK(cont’d) 提供了一套穩定,保證在以後的版本支持所有的平台的原生API libc (C library) headers libm (math library) headers JNI interface headers libz (Zlib compression) headers liblog (Android logging) header OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers libjnigraphics (Pixel buffer access) header (for Android 2.2 and above). A Minimal set of headers for C++ support OpenSL ES native audio libraries Android native application APIS

1.3NDK架構 Android Manifest,Dalvik Classes(Java程式碼),資源檔和JNI調用的本地函式庫(.so檔)。 一般藉由NDK打包成的apk內容包含了 Android manifest 以及 Dalvik classes Resource bundle Libraries JNI等內容

Linux kernel + Android extensions 1.3NDK架構(cont'd) Android NDK Apps SDK Apps Android app frameword Standard library Linux kernel + Android extensions JNI Native code Dalvik runtime

1.4NDK應用流程 Android * NDK Application Dalvik Application 這是創建本地的動態函示庫與JAVA JNI的流程以及關係圖 1. Create the Java class representing the native code 2. Create the native code header file 3. Implement the native code by writing your C code 4. Compile everything and build you Shared Library 5. Use your native code inside Android activity

1.5開發步驟 NDK應用的開發流程主要分為五個步驟: 1、 創建本地程式碼 2、 編寫makefile檔案,mk檔案 3、 編譯本地程式碼為library檔案(so) 4、 從Java端調用本地程式碼 5、 用gdb來測試本地程式碼

1.5開發步驟(cont'd) 應用程式調用流程如圖所示:Android App透過Java Framework調用Java SDK API, 透過JNI調用本地library檔案。

1.5開發步驟(cont'd) 在Android專案下的jni文件夾下面創建本例中使用的本地程式碼hello-jni.c 以及Android.mk,程式碼如圖所示。 注意,在Android.mk文件中要添加X86的支持項。

1.5開發步驟(cont'd) 進入專案所在目錄,執行ndk-build來編譯本地程式碼,執行效果如下次,會分別為ARM和X86生成相對應的so檔案,從java調用本地程式碼如圖紅色標出所示。

1.5開發步驟(cont'd) 測試流程的要求以及測試過程如下圖,需要注意的是在manifest文件中需要設置android:debuggable=“true”; 然後使用ndk-gdb來測試即可。

1.6版本對照表 API Level SDK NDK API Level 3 Android 1.5 NDK 1 API Level 4

練習 NDK是什麼? 為什麼需要NDK ? NDK開發有哪幾個步驟 1. NDK是Google公司推出的幫助Android開發者透過C/C++本地語言編寫應用程式的開發工具,包含了C/C++ 的header文件、library文件、說明文檔和範例程式碼,我們可以理解為Windows Platform SDK一樣,是純C/C++編寫的,但是Android並不支持純C/C++編寫的應用,同時NDK提供的library和fuction功能很有限,僅僅處理些算法效率敏感的問題 2. NDK是一系列工具的集合 幫助開發者快速開發C(或C++)的動態庫 自動將so和Java應用程式一起打包成apk NDK集成了交叉編譯器 NDK帶來什麼 使用C開發,性能需求較高的邏輯程式,提高應用程式的執行效率。 使用C開發,需保密的應用邏輯程式。 3. 1、 創建本地程式碼 2、 編寫makefile檔案,mk檔案 3、 編譯本地程式碼為library檔案(so) 4、 從Java端調用本地程式碼 5、 用gdb來測試本地程式碼