Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
关于PhoneGap你应该知道的12件事 (12 things you should know...
Search
dong
March 02, 2012
Technology
2
400
关于PhoneGap你应该知道的12件事 (12 things you should know about PhoneGap)
在w3ctech上的演讲稿,介绍了PhoneGap的基本概念,用法,打包,插件的开发,以Android为例介绍了PhoneGap的内部机制,以及如何调试PhoneGap应用。
dong
March 02, 2012
Tweet
Share
More Decks by dong
See All by dong
CSS Backgrounds and Borders规范导读
dong
0
1.7k
模块化HTML5移动应用开发:jQuery Mobile + BackboneJS+RequireJS
dong
8
5.5k
Other Decks in Technology
See All in Technology
2025年夏 コーディングエージェントを統べる者
nwiizo
0
180
「何となくテストする」を卒業するためにプロダクトが動く仕組みを理解しよう
kawabeaver
0
420
「その開発、認知負荷高すぎませんか?」Platform Engineeringで始める開発者体験カイゼン術
sansantech
PRO
1
110
なぜテストマネージャの視点が 必要なのか? 〜 一歩先へ進むために 〜
moritamasami
0
230
💡Ruby 川辺で灯すPicoRubyからの光
bash0c7
0
120
新アイテムをどう使っていくか?みんなであーだこーだ言ってみよう / 20250911-rpi-jam-tokyo
akkiesoft
0
310
会社紹介資料 / Sansan Company Profile
sansan33
PRO
6
380k
自作JSエンジンに推しプロポーザルを実装したい!
sajikix
1
190
Firestore → Spanner 移行 を成功させた段階的移行プロセス
athug
1
490
職種の壁を溶かして開発サイクルを高速に回す~情報透明性と職種越境から考えるAIフレンドリーな職種間連携~
daitasu
0
170
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
210
機械学習を扱うプラットフォーム開発と運用事例
lycorptech_jp
PRO
0
560
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
268
13k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
Music & Morning Musume
bryan
46
6.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Being A Developer After 40
akosma
90
590k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Facilitating Awesome Meetings
lara
55
6.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Gamification - CAS2011
davidbonilla
81
5.4k
We Have a Design System, Now What?
morganepeng
53
7.8k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Transcript
ܱႿ1IPOF(BQ֥ࡱ൙ Mark Dong ٦ Adobe Developer Evangelist weibo.com/donglongfei weibo.com/javascriptdev
1IPOF(BQ൞હĤ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
٠໙၍ഡСЧֹหྟ յЇ)5.-"QQ ҆ඇ֞؟ᇕ QIPOF(BQQMVHJO Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
1IPOF(BQ҂൞હĤ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
+BWB4DSJQU 'SBNFXPSL *%&5PPMT Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
ఏჷ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
! Ⴟ୍ࣸࣁ֥ J1IPOF%FW$BNQ ! oCSJEHJOHUIFHBQ CFUXFFOUIFXFCBOEUIF JQIPOF4%,p ! 1IPOF(BQJUnTMJLF"*3 GPSUIF*QIPOF
/JUPCJCMPH Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
1IPOF(BQᄝ҂֥Чֹหྟ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
षჷĤ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
$BMM#BDL ۷ູ "QBDIF$PSEPWB Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
http://incubator.apache.org/cordova/
յЇ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
ᆌؓ҂֥*%& 4%, Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
PhoneGap Build Compile in the cloud Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
٠໙Чֹۿି
None
None
હ൞1IPOF(BQ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
None
+4 /BUJWF Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
/BUJWF8FC$POUSPM 1MVHJOT ''* JavaScript/CSS/HTML5 Not Web Tech Adobe 董龙飞 weibo.com/donglongfei
weibo.com/javascriptdev
/BUJWF8FC$POUSPM #SPXTFSğGVMMGVODUJPOT $ISPNFSFNPWFE /PUPQCBS
''* 'PSFJHO'VODUJPO*OUFSGBDF Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
/BUJWF8FC7JFX 1IPOF(BQ1MVHJOT .PCJMF04 /BUJWF"1* )BSEXBSF Ԯۋఖ ྙԩ ຩ
l 8FC"QQ +BWB4DSJQU $44 )5.- FFI 浏览器 OS API OS API 1IPOF(BQ"QQ
1IPOF(BQࡏܒ .PCJMF04 8FC"QQ )5.- +BWB4DSJQU $44 /BUJWF8FC7JFX 8FC7JFXa6*8FC7JFXl
1IPOF(BQ1MVHJOT ജཞ ᄎԮۋఖ ᆷଲᆌ ഡСྐ༏ (14 ๙ᆩ ຩሑ l קᇅQMVHJO HTML5 API PhoneGap JS API OS API OS API PhoneGap Native API
/BUJWF8FC$POUSPM ಆۿିᛍফఖ ીႵшॿ
public class CirclesActivity extends DroidGap { @Override public void onCreate(Bundle
savedInstanceState) { super.onCreate(savedInstanceState); super.loadUrl("file:///android_asset/ www/circles.html"); } } /BUJWF8SBQQFSXJUI1IPOF(BQ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
QMVHJO
)5.-ཛଢ QIPOFHBQKBS QMVHJOTYNM "OESPJE.BOJGFTUYNM BOESPJEBDUJWJUZ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
In Java
public class callsPGPlugin extends Plugin { // List Actions public
static nal String ACTION="list"; @Override public PluginResult execute(String action, JSONArray data, String callbackId) { PluginResult result=null; if(ACTION.equals(action)){ CallLogAI callLogAI = new CallLogAI(ctx); JSONObject callsHistory=callLogAI.fetchCallLogs(null); Log.d("RESULT=", callsHistory.toString()); result=new PluginResult(Status.OK,callsHistory); }else{ result=new PluginResult(Status.INVALID_ACTION); Log.d("CallsPlugin","Invalidate action:" + action); } return result; } } Javaקᇅplugin Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
ᇿҨplugin <?xml version="1.0" encoding="UTF-8"?> <plugins> <plugin name="App" value="com.phonegap.App"/> <plugin name="Geolocation"
value="com.phonegap.GeoBroker"/> <plugin name="Device" value="com.phonegap.Device"/> …… <plugin name="Temperature" value="com.phonegap.TempListener"/> <plugin name="FileTransfer" value="com.phonegap.FileTransfer"/> <plugin name="Capture" value="com.phonegap.Capture"/> <plugin name="CallsHistoryPlugin" value="com.mark.phonegap.plugin.callsPGPlugin" /> </plugins> Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
In JavaScript Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
+BWBTDSJQUࢤ१ var CallsListing=function(){}; CallsListing.prototype.list=function(successCallback,failureCallback){ return PhoneGap.exec(successCallback, failureCallback, 'CallsHistoryPlugin', 'list',['test'] );
}; PhoneGap.addConstructor(function(){ PhoneGap.addPlugin("callsListing",new CallsListing); });
window.plugins.callsListing.list( function(r){printResult(r)}, function(e){console.log(e)} ); ႨᆀטႨplugin +BWBTDSJQUࢤ१
ཬࢲ
window.plugins.callsListing.list( function(r){printResult(r)}, function(e){console.log(e)} ); CallsListing.prototype.list=function(success Callback,failureCallback){ return PhoneGap.exec(successCallback, failureCallback, 'CallsHistoryPlugin',
'list',['test’]); }; public class callsPGPlugin extends Plugin { // List Actions public static nal String ACTION="list"; @Override public PluginResult execute(String action, JSONArray data, String callbackId) { <plugin name="CallsHistoryPlugin" value="com.mark.phonegap.plugin.callsPGPlu gin" />
ೂޅൌགྷ+4აЧֹ"1*֥ࢌ
"OESPJE
$BMMCBDL4FSWFSğ9NM)UUQ3FRVFTUTFWFS 8FC$ISPN$MJFOUğonJsPrompt BEE+BWB4DSJQU*OUFSGBDF
$BMMCBDL4FSWFSğ9NM)UUQ3FRVFTUTFWFS 8FC$ISPN$MJFOUğڭۂonJsPrompt 'SPN+4UP/BUJWF 'SPN/BUJWFUP+4
CallsListing.prototype.list=function(successCallback,fai lureCallback){ return PhoneGap.exec(successCallback, failureCallback, 'CallsHistoryPlugin', 'list',['test’]); }; PhoneGap.exec =
function(success, fail, service, action, args) { … var r = prompt(JSON.stringify(args), "gap:"+JSON.stringify([service, action, callbackId, true])); … +BWBTDSJQU Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
Droidgap.java public boolean onJsPrompt(WebView view, String url, String message, String
defaultValue, JsPromptResult result) { …… String r = pluginManager.exec(service, action, callbackId, message, async); …… } Pluginmanager.java public String exec( nal String service, nal String action, nal String callbackId, nal String jsonArgs, nal boolean async) { …… cr = plugin.execute(action, args, callbackId); ctx.sendJavascript(cr.toErrorCallbackString(callbackId)); …… } +BWB
Pluginmanager.java ctx.sendJavascript(cr.toErrorCallbackString(callbackId)); $BMMCBDL4FSWFSKBWBğ9)3TFSWFS PhoneGap.Channel.join(function() { // Start listening for XHR
callbacks setTimeout(function() { if (PhoneGap.UsePolling) { PhoneGap.JSCallbackPolling(); } l +BWBTDSJQU +BWB
*04
+4֞/BUJWF֥๙ document.location = “gap://Class.method/args” /BUJWF֞+4֥๙ UIWebView.stringByEvaluatingJavaScriptFromString webView =[[UIWebView alloc] initWithFrame:webViewBounds];
ൌ২߄6*8FC7JFX Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
EFCVH
XFJOSF
8FJOSFᇂູ4FSWFSđ षؿᆀႨ$ISPNF 4BGBSJषؿ۽ऎটჹӱט ൫၍ႋႨ Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
<script src="http://192.168.1.101:8080/target/target-script-min.js#anonymous"> </script> Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
1IPOF(BQ%FCVH4FSWFS Adobe 董龙飞 weibo.com/donglongfei weibo.com/javascriptdev
ਫ਼ཌ
9 1FSGPSNBODF 8$DPNQBUJCMFđၞႨྟ $BMFOEBS .FTTBHFđ#MVFUPPUIđ"VEJP7JEFP
Mark Dong Developer Evangelist
[email protected]
weibo.com/donglongfei weibo.com/javascriptdev