68
Android vs EPUB Cd Chen http://www.cdchen.idv.tw/ 121221星期五

Android vs e pub

  • Upload
    -

  • View
    1.293

  • Download
    3

Embed Size (px)

DESCRIPTION

這是我於 2012/12/19 在高苑科技大學介紹 Android 與 EPUB 的投影片,煩請各位前輩先進指正。

Citation preview

Page 1: Android vs e pub

Android vs EPUBCd Chen

http://www.cdchen.idv.tw/

12年12月21⽇日星期五

Page 2: Android vs e pub

About

陳永昇 (Cd Chen)http://www.cdchen.idv.tw/

學歷:國⽴立台中科技⼤大學經歷:聯成電腦講師恆逸資訊講師現職:乃師實業技術總監證照:

RHCE / LPIC / NCLP MCSA / MCSE OCPJP / OCPJWCDTCSE / NSPA

12年12月21⽇日星期五

Page 3: Android vs e pub

⼤大綱

• ⾏行動 App 的基礎觀念

• EPUB 的介紹

• WebView 元件

• 實作 EPUB Reader

12年12月21⽇日星期五

Page 4: Android vs e pub

我假設您已經...

• 熟悉 Java 程式語⾔言

• 具備 Android 開發的經驗

12年12月21⽇日星期五

Page 5: Android vs e pub

⾏行動 App 的基礎觀念

12年12月21⽇日星期五

Page 6: Android vs e pub

什麼是⾏行動 App??

12年12月21⽇日星期五

Page 7: Android vs e pub

12年12月21⽇日星期五

Page 8: Android vs e pub

12年12月21⽇日星期五

Page 9: Android vs e pub

http://www.appleoutsider.de/2012/04/27/q12012-pc-vendor-marketshare/

12年12月21⽇日星期五

Page 10: Android vs e pub

http://mrpogson.com/tag/market-share/

12年12月21⽇日星期五

Page 11: Android vs e pub

http://wpcdn3.padgadget.com/wp-content/uploads/2012/07/evercore-120716-550x283.jpeg

12年12月21⽇日星期五

Page 12: Android vs e pub

⾏行動 App 類型

12年12月21⽇日星期五

Page 13: Android vs e pub

12年12月21⽇日星期五

Page 14: Android vs e pub

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⽇日星期五

Page 15: Android vs e pub

12年12月21⽇日星期五

Page 16: Android vs e pub

MVC 設計模式

12年12月21⽇日星期五

Page 17: Android vs e pub

12年12月21⽇日星期五

Page 18: Android vs e pub

EPUB

12年12月21⽇日星期五

Page 19: Android vs e pub

淺談電⼦子書格式

12年12月21⽇日星期五

Page 20: Android vs e pub

優點 缺點

azw

mobi / prc

lrf

pdf

市佔率⾼高⽀支援語⾳音

無中⽂文⽀支援僅⽀支援 Kindle

⽀支援度廣 無中⽂文⽀支援

檔案輕巧翻⾴頁快速

無精密排版中⽂文⽀支援差

精確排版中⽂文⽀支援佳

檔案⼤大翻⾴頁慢

12年12月21⽇日星期五

Page 21: Android vs e pub

什麼是 EPUB??

12年12月21⽇日星期五

Page 22: Android vs e pub

• Electronic Publication

• 國際數位出版論壇 (IDPF, International Digital Publishing Forum)

12年12月21⽇日星期五

Page 23: Android vs e pub

EPUB 優點• 免費且開放• 可重新排版與可重新縮放的字型• ⽀支援⾏行列圖⽚片• 嵌⼊入式 Metadata

• ⽀支援 DRM

• ⽀支援 CSS

• ⽀支援 影⾳音內容

12年12月21⽇日星期五

Page 24: Android vs e pub

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⽇日星期五

Page 25: Android vs e pub

EPUB 2 vs EPUB 3

功能 技術

‣⽀支援多媒體格式‣⽀支援數學格式‣⽀支援複雜本⽂文內容‣⽀支援⽂文字朗讀‣⽀支援⾮非羅⾺馬⽂文字‣⽀支援 DAISY 有聲書

‣增加對 HTML5/CSS3 的⽀支援‣⽀支援嵌⼊入字型‣⽀支援 SVG 圖檔‣⽀支援 MathML

12年12月21⽇日星期五

Page 26: Android vs e pub

EPUB 格式

12年12月21⽇日星期五

Page 27: Android vs e pub

• ZIP 壓縮檔

• 附檔名可使⽤用 .epub 或 .zip

12年12月21⽇日星期五

Page 28: Android vs e pub

• XHTML ⽂文件 (XHTML Document)

• 套件檔 (Package Files)

• 容器檔 (Container Files)

EPUB 三種層級

12年12月21⽇日星期五

Page 29: Android vs e pub

XHTML ⽂文件

• EPUB 的內容

• 類似 (幾乎相同) HTML

• EPUB3 可使⽤用 HTML5

12年12月21⽇日星期五

Page 30: Android vs e pub

http://slides.html5rocks.com/

12年12月21⽇日星期五

Page 31: Android vs e pub

套件檔• /mimetype

• ⼀一定為 application/epub+zip

• /DIR/NAME.opf

• 作者、發⾏行者、...

• /DIR/NAME.ncx

• 電⼦子書的組織架構 (章節、段落、...)

12年12月21⽇日星期五

Page 32: Android vs e pub

容器檔

• META-INF/container.xml

• 儲存電⼦子書檔案的架構• 檔案路徑、DRM 宣告、...

12年12月21⽇日星期五

Page 33: Android vs e pub

EPUB 製作⼯工具

12年12月21⽇日星期五

Page 34: Android vs e pub

• Adobe InDesign

• IGP: Digital Publisher

• Apple Pages

• QuarkXPress

• oXygen XML Editor

商業軟體

12年12月21⽇日星期五

Page 35: Android vs e pub

OpenSource

• Sigil

• Booktype

• calibre

12年12月21⽇日星期五

Page 36: Android vs e pub

轉換程式

• Word2EPUB

• ePub Maker

• DocBook

12年12月21⽇日星期五

Page 37: Android vs e pub

WebView

12年12月21⽇日星期五

Page 38: Android vs e pub

WebView 的介紹

12年12月21⽇日星期五

Page 39: Android vs e pub

• Android 內建的簡易版瀏覽器

• ⽀支援 HTML5 / CSS3 / JavaScript

• 可⾃自定瀏覽器的使⽤用介⾯面• 可定義內容處理的⽅方式• 可組態執⾏行時期的設定• 可與 Server 端的 JavaScript 互動

12年12月21⽇日星期五

Page 40: Android vs e pub

• 設定 AndroidManifest.xml

• 配置 layout 檔

• 撰寫程式• 執⾏行與測試

使⽤用⽅方法

12年12月21⽇日星期五

Page 41: Android vs e pub

設定• 需開啟下列權限:• android.permission.INTERNET

<manifest ... > <uses-permission android:name="android.permission.INTERNET" /> ...</manifest>

12年12月21⽇日星期五

Page 42: Android vs e pub

配置 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⽇日星期五

Page 43: Android vs e pub

撰寫程式

12年12月21⽇日星期五

Page 44: Android vs e pub

WebView

• android.webkit.WebView

• 重要 API

• loadData()

• loadUrl()

• zoomIn() / zoomOut()

12年12月21⽇日星期五

Page 45: Android vs e pub

WebView (cont)

• 導覽 (Navigation) API

• canGoBack() / goBack()

• canGoForward() / goForward()

• canGoBackOrForward() / goBackOrForward()

12年12月21⽇日星期五

Page 46: Android vs e pub

• 取得 WebView 物件

• 指定網⾴頁瀏覽的設定 (Optional)

• 組態⾴頁⾯面處理的⽅方法 (Optional)

• ⾃自定使⽤用介⾯面 (Optional)

• 指定網址或本地資料

12年12月21⽇日星期五

Page 47: Android vs e pub

取得 WebView 物件

WebView webView = (WebView) findViewById(R.id.webView)

12年12月21⽇日星期五

Page 48: Android vs e pub

變更瀏覽器的設定

WebSettings settings = webView.getSettings();settings.setSupportZoom(true);settings.setBuiltinZoomControls(true);settings.setJavaScriptEnabled(true);

12年12月21⽇日星期五

Page 49: Android vs e pub

WebSettings

• android.webkit.WebSettings

• 存取 WebView 的組態資料

• 重要 API

• setJavaScriptEnabled()

• !! ALL !!

12年12月21⽇日星期五

Page 50: Android vs e pub

組態⾴頁⾯面處理⽅方法

webView.setWebViewClient( new WebViewClient() { // ... });

12年12月21⽇日星期五

Page 51: Android vs e pub

WebViewClient

• android.webkit.WebViewClient

• ⾃自定⾴頁⾯面的處理⽅方法• 重要 API

• onPageXXX() / onFormResubmission()

• onLoadResource() / onReceivedError() / onReceivedHttpAuthRequest()

12年12月21⽇日星期五

Page 52: Android vs e pub

⾃自定使⽤用介⾯面

webView.setWebChromeClient( new WebChromeClient() { // ... });

12年12月21⽇日星期五

Page 53: Android vs e pub

WebChromeClient

• android.webkit.WebChromeClient

• 定義使⽤用介⾯面的事件處理• 重要 API

• onProgressChanged()

• onReceivedXXX() / onjsXXX()

• onCloseWindow()

12年12月21⽇日星期五

Page 54: Android vs e pub

指定網址或本地資料

webView.loadUrl( “http://www.niceStudio.com.tw”);

webView.loadData( “<h1>Hello World!!</h1>”);

網址

本地資料

12年12月21⽇日星期五

Page 55: Android vs e pub

JavaScript 整合

12年12月21⽇日星期五

Page 56: Android vs e pub

• WebView 可與 JavaScript 整合

• ⽅方式• WebChromeClient.onjsXXX()

• JavaScript ➞ WebView

• WebView ➞ JavaScript

12年12月21⽇日星期五

Page 57: Android vs e pub

• WebView 可註冊 JavaScript 函數的處理器 (Handler)

• 步驟• 撰寫類別與⽅方法• 在 WebView 註冊處理器

JavaScript ➞WebView

12年12月21⽇日星期五

Page 58: Android vs e pub

<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⽇日星期五

Page 59: Android vs e pub

• WebView 可直接呼叫網⾴頁中的 JavaScript 函數

WebView➞JavaScript

webView.loadUrl(“javascript:changeColor(‘red’)”);

<script type=”text/javascript”>function changeColor(c) { ...}</script>

Activity

HTML

12年12月21⽇日星期五

Page 60: Android vs e pub

實作 EPUB Reader

12年12月21⽇日星期五

Page 61: Android vs e pub

Why??

• 實作私有的 DRM

• 實作特殊的效果或功能

12年12月21⽇日星期五

Page 62: Android vs e pub

• Bottom-Up

• 利⽤用現成的 OpenSource Project

實作⽅方法

12年12月21⽇日星期五

Page 63: Android vs e pub

FBReader

• Free & OpenSource

• Android 平台著名的 Reader

• http://www.fbreader.org/

• ⽀支援的格式• EPUB / HTML / FictionBook /

Plucker / PalmDoc / TCR / RTF / ...

12年12月21⽇日星期五

Page 64: Android vs e pub

取得原始程式碼

• 從官網下載• http://www.fbreader.org/FBReaderJ

• 使⽤用 Git 下載• git://github.com/geometer/FBReaderJ.git

12年12月21⽇日星期五

Page 65: Android vs e pub

準備

• Android SDK >= 1.6

• Android NDK >= r4b

• Apache Ant >= 1.7.0

• Cygwin >= 1.7 (Windows Only)

12年12月21⽇日星期五

Page 66: Android vs e pub

編譯1.在專案⺫⽬目錄中建⽴立 local.properties 檔

sdk.dir=<DIR>ndk.dir=<DIR>

2. Windows:ndk-build -> ant releaseUnix / MacOS X: ant package

12年12月21⽇日星期五

Page 67: Android vs e pub

擴充 FBReaderJ

• <PROJECT>/src/org/geometerplus/android/fbreader/

12年12月21⽇日星期五

Page 68: Android vs e pub

Q & A

12年12月21⽇日星期五