Upload
-
View
1.293
Download
3
Embed Size (px)
DESCRIPTION
這是我於 2012/12/19 在高苑科技大學介紹 Android 與 EPUB 的投影片,煩請各位前輩先進指正。
Citation preview
Android vs EPUBCd Chen
http://www.cdchen.idv.tw/
12年12月21⽇日星期五
About
陳永昇 (Cd Chen)http://www.cdchen.idv.tw/
學歷:國⽴立台中科技⼤大學經歷:聯成電腦講師恆逸資訊講師現職:乃師實業技術總監證照:
RHCE / LPIC / NCLP MCSA / MCSE OCPJP / OCPJWCDTCSE / NSPA
12年12月21⽇日星期五
⼤大綱
• ⾏行動 App 的基礎觀念
• EPUB 的介紹
• WebView 元件
• 實作 EPUB Reader
12年12月21⽇日星期五
我假設您已經...
• 熟悉 Java 程式語⾔言
• 具備 Android 開發的經驗
12年12月21⽇日星期五
⾏行動 App 的基礎觀念
12年12月21⽇日星期五
什麼是⾏行動 App??
12年12月21⽇日星期五
12年12月21⽇日星期五
12年12月21⽇日星期五
http://www.appleoutsider.de/2012/04/27/q12012-pc-vendor-marketshare/
12年12月21⽇日星期五
http://mrpogson.com/tag/market-share/
12年12月21⽇日星期五
http://wpcdn3.padgadget.com/wp-content/uploads/2012/07/evercore-120716-550x283.jpeg
12年12月21⽇日星期五
⾏行動 App 類型
12年12月21⽇日星期五
12年12月21⽇日星期五
Web-Page App Native App
•Web 2.0
•HTML 5
•CSS 3
•JavaScript
• ...
•Web Service
•JSON-RPC
•XML-RPC
•SOAP
•Streaming
• ...
HTML / HTTPHTML / HTTP
12年12月21⽇日星期五
12年12月21⽇日星期五
MVC 設計模式
12年12月21⽇日星期五
12年12月21⽇日星期五
EPUB
12年12月21⽇日星期五
淺談電⼦子書格式
12年12月21⽇日星期五
優點 缺點
azw
mobi / prc
lrf
市佔率⾼高⽀支援語⾳音
無中⽂文⽀支援僅⽀支援 Kindle
⽀支援度廣 無中⽂文⽀支援
檔案輕巧翻⾴頁快速
無精密排版中⽂文⽀支援差
精確排版中⽂文⽀支援佳
檔案⼤大翻⾴頁慢
12年12月21⽇日星期五
什麼是 EPUB??
12年12月21⽇日星期五
• Electronic Publication
• 國際數位出版論壇 (IDPF, International Digital Publishing Forum)
12年12月21⽇日星期五
EPUB 優點• 免費且開放• 可重新排版與可重新縮放的字型• ⽀支援⾏行列圖⽚片• 嵌⼊入式 Metadata
• ⽀支援 DRM
• ⽀支援 CSS
• ⽀支援 影⾳音內容
12年12月21⽇日星期五
EPUB 的版本
• 2007/09 - EPUB Release
• 2009/08 - Start EPUB Working
• 2010/07 - EPUB 2.0.1 Draft
• 2010/09 - EPUB 2.0.1 Release
• 2011/10 - EPUB 3.0 Release (Current)
12年12月21⽇日星期五
EPUB 2 vs EPUB 3
功能 技術
‣⽀支援多媒體格式‣⽀支援數學格式‣⽀支援複雜本⽂文內容‣⽀支援⽂文字朗讀‣⽀支援⾮非羅⾺馬⽂文字‣⽀支援 DAISY 有聲書
‣增加對 HTML5/CSS3 的⽀支援‣⽀支援嵌⼊入字型‣⽀支援 SVG 圖檔‣⽀支援 MathML
12年12月21⽇日星期五
EPUB 格式
12年12月21⽇日星期五
• ZIP 壓縮檔
• 附檔名可使⽤用 .epub 或 .zip
12年12月21⽇日星期五
• XHTML ⽂文件 (XHTML Document)
• 套件檔 (Package Files)
• 容器檔 (Container Files)
EPUB 三種層級
12年12月21⽇日星期五
XHTML ⽂文件
• EPUB 的內容
• 類似 (幾乎相同) HTML
• EPUB3 可使⽤用 HTML5
12年12月21⽇日星期五
http://slides.html5rocks.com/
12年12月21⽇日星期五
套件檔• /mimetype
• ⼀一定為 application/epub+zip
• /DIR/NAME.opf
• 作者、發⾏行者、...
• /DIR/NAME.ncx
• 電⼦子書的組織架構 (章節、段落、...)
12年12月21⽇日星期五
容器檔
• META-INF/container.xml
• 儲存電⼦子書檔案的架構• 檔案路徑、DRM 宣告、...
12年12月21⽇日星期五
EPUB 製作⼯工具
12年12月21⽇日星期五
• Adobe InDesign
• IGP: Digital Publisher
• Apple Pages
• QuarkXPress
• oXygen XML Editor
商業軟體
12年12月21⽇日星期五
OpenSource
• Sigil
• Booktype
• calibre
12年12月21⽇日星期五
轉換程式
• Word2EPUB
• ePub Maker
• DocBook
12年12月21⽇日星期五
WebView
12年12月21⽇日星期五
WebView 的介紹
12年12月21⽇日星期五
• Android 內建的簡易版瀏覽器
• ⽀支援 HTML5 / CSS3 / JavaScript
• 可⾃自定瀏覽器的使⽤用介⾯面• 可定義內容處理的⽅方式• 可組態執⾏行時期的設定• 可與 Server 端的 JavaScript 互動
12年12月21⽇日星期五
• 設定 AndroidManifest.xml
• 配置 layout 檔
• 撰寫程式• 執⾏行與測試
使⽤用⽅方法
12年12月21⽇日星期五
設定• 需開啟下列權限:• android.permission.INTERNET
<manifest ... > <uses-permission android:name="android.permission.INTERNET" /> ...</manifest>
12年12月21⽇日星期五
配置 Layout
<?xml version="1.0" encoding="utf-8"?><WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent"/>
12年12月21⽇日星期五
撰寫程式
12年12月21⽇日星期五
WebView
• android.webkit.WebView
• 重要 API
• loadData()
• loadUrl()
• zoomIn() / zoomOut()
12年12月21⽇日星期五
WebView (cont)
• 導覽 (Navigation) API
• canGoBack() / goBack()
• canGoForward() / goForward()
• canGoBackOrForward() / goBackOrForward()
12年12月21⽇日星期五
• 取得 WebView 物件
• 指定網⾴頁瀏覽的設定 (Optional)
• 組態⾴頁⾯面處理的⽅方法 (Optional)
• ⾃自定使⽤用介⾯面 (Optional)
• 指定網址或本地資料
12年12月21⽇日星期五
取得 WebView 物件
WebView webView = (WebView) findViewById(R.id.webView)
12年12月21⽇日星期五
變更瀏覽器的設定
WebSettings settings = webView.getSettings();settings.setSupportZoom(true);settings.setBuiltinZoomControls(true);settings.setJavaScriptEnabled(true);
12年12月21⽇日星期五
WebSettings
• android.webkit.WebSettings
• 存取 WebView 的組態資料
• 重要 API
• setJavaScriptEnabled()
• !! ALL !!
12年12月21⽇日星期五
組態⾴頁⾯面處理⽅方法
webView.setWebViewClient( new WebViewClient() { // ... });
12年12月21⽇日星期五
WebViewClient
• android.webkit.WebViewClient
• ⾃自定⾴頁⾯面的處理⽅方法• 重要 API
• onPageXXX() / onFormResubmission()
• onLoadResource() / onReceivedError() / onReceivedHttpAuthRequest()
12年12月21⽇日星期五
⾃自定使⽤用介⾯面
webView.setWebChromeClient( new WebChromeClient() { // ... });
12年12月21⽇日星期五
WebChromeClient
• android.webkit.WebChromeClient
• 定義使⽤用介⾯面的事件處理• 重要 API
• onProgressChanged()
• onReceivedXXX() / onjsXXX()
• onCloseWindow()
12年12月21⽇日星期五
指定網址或本地資料
webView.loadUrl( “http://www.niceStudio.com.tw”);
webView.loadData( “<h1>Hello World!!</h1>”);
網址
本地資料
12年12月21⽇日星期五
JavaScript 整合
12年12月21⽇日星期五
• WebView 可與 JavaScript 整合
• ⽅方式• WebChromeClient.onjsXXX()
• JavaScript ➞ WebView
• WebView ➞ JavaScript
12年12月21⽇日星期五
• WebView 可註冊 JavaScript 函數的處理器 (Handler)
• 步驟• 撰寫類別與⽅方法• 在 WebView 註冊處理器
JavaScript ➞WebView
12年12月21⽇日星期五
<a href=”#” onclick=”android.say(‘hi’)” />
public class WebViewActivity extends Activity { class JavaScriptHandler { public void say(String word) { Toast.makeText(context, word, Toast.LENGTH_LONG).show(); } } public void onCreate(Bundle bundle) { super.onCreate(bundle); webView = (WebView) findViewById(R.id.wv); webView.addJavaScriptInterface( new JavaScriptHandler(), “android”); }}
HTML
Activity
12年12月21⽇日星期五
• WebView 可直接呼叫網⾴頁中的 JavaScript 函數
WebView➞JavaScript
webView.loadUrl(“javascript:changeColor(‘red’)”);
<script type=”text/javascript”>function changeColor(c) { ...}</script>
Activity
HTML
12年12月21⽇日星期五
實作 EPUB Reader
12年12月21⽇日星期五
Why??
• 實作私有的 DRM
• 實作特殊的效果或功能
12年12月21⽇日星期五
• Bottom-Up
• 利⽤用現成的 OpenSource Project
實作⽅方法
12年12月21⽇日星期五
FBReader
• Free & OpenSource
• Android 平台著名的 Reader
• http://www.fbreader.org/
• ⽀支援的格式• EPUB / HTML / FictionBook /
Plucker / PalmDoc / TCR / RTF / ...
12年12月21⽇日星期五
取得原始程式碼
• 從官網下載• http://www.fbreader.org/FBReaderJ
• 使⽤用 Git 下載• git://github.com/geometer/FBReaderJ.git
12年12月21⽇日星期五
準備
• Android SDK >= 1.6
• Android NDK >= r4b
• Apache Ant >= 1.7.0
• Cygwin >= 1.7 (Windows Only)
12年12月21⽇日星期五
編譯1.在專案⺫⽬目錄中建⽴立 local.properties 檔
sdk.dir=<DIR>ndk.dir=<DIR>
2. Windows:ndk-build -> ant releaseUnix / MacOS X: ant package
12年12月21⽇日星期五
擴充 FBReaderJ
• <PROJECT>/src/org/geometerplus/android/fbreader/
12年12月21⽇日星期五
Q & A
12年12月21⽇日星期五