åå ãã代ããã«
ãæ°ã«å
¥ãã®Androidã¬ãžã§ãããã¹ãŠã§HTML5ã®ãµããŒããç 究ããããã«ïŒå€¢ã®ãããªäŒæ©ãªãã§ïŒæ°æ¥ç¶ããŠéãããã®ã§ããã®ãããã¯ã«æ³šæãæãå¿
èŠããããšå€æããŸããã èšäºã§ã¯ãAndroidåãHTML5ã²ãŒã ã¢ããªã±ãŒã·ã§ã³ãäœæããã¢ã€ãã¢ããAPKãã¡ã€ã«èªäœã®ãªãªãŒã¹ãŸã§ã®ãã¹ãŠã®æ®µéïŒãã¡ãããåºæ¬/ããŒ/åºæ¬ïŒã段éçã«æããã«ããããšããŸãã ããããç§ã¯ãç±ç·ããéçºè
ã«ãšã£ãŠæ°ããããšã¯äœãå
¬éããŸããããåå¿è
ã®å Žåã¯ãã¹ã¯ãªãŒã³ã·ã§ãããšèª¬æã䜿çšããŠããã¹ãŠãã§ããã ãç°¡åã«èª¬æããããšããŸãã

ç«ã®äžã§ãã£ãšç¥ããã人ãæåŸ
ããŸãã
ã¢ã€ãã¢
äžè¬ã«ãAndroidã®å¯èœæ§ãHTML5ã®éçºãããã³ãããã®çžäºäœçšã«ã€ããŠå€ãã®ããšãèšããŸãã ç§ã¯ãããããŸããã ã ããããã€ã³ãã«å³ã
Androidåãã®ã²ãŒã ãäœæãããšããã¢ã€ãã¢ã¯ã
æ°äžäººã®éçºè
ãšãèªåèªèº«ããã®ããã«èããŠããéçºè
ã®é ã®äžã«ç¢ºãã«åãŸã£ãŠããŸãã ç§ãäŸå€ã§ã¯ãããŸããã
ããã»ã¹å
šäœã¯ããã€ãã®ã¹ãããã«åå²ãããæçµçãªã¢ããªã±ãŒã·ã§ã³ã¯2ã€ã®éšåã§æ§æãããŸãã
-ã©ãããŒïŒãã®å Žåã¯AndroidçšïŒ
-ã²ãŒã
ã¹ããã1.ã²ãŒã èªäœãæžã
HTML5ã§ã²ãŒã ãæžãããšã®ãã1ã€ã®å©ç¹ã¯ããã¹ãã«å€æ°ã®å®è¡ããã°ã©ã ãIDEããšãã¥ã¬ãŒã¿ãªã©ãå¿
èŠãªããšããäºå®ã§ãã å¿
èŠãªã®ã¯ãã©ãŠã¶ïŒç§ã®å Žåã¯ChromiumïŒãšããã¹ããšãã£ã¿ïŒBlueFishïŒã ãã§ãã
ã²ãŒã ã¯ã·ã³ãã«ã«ãªããŸããéãé·æ¹åœ¢ãšç·ã®é·æ¹åœ¢ããããŸãã ãã¬ãŒã€ãŒã®ã¿ã¹ã¯ã¯ãéãé·æ¹åœ¢ãç·ã®é·æ¹åœ¢ã«ãã©ãã°ããèµ€ãé·æ¹åœ¢ããã€ãã¹ããããšã§ããèµ€ãé·æ¹åœ¢ã¯ã競æå Žã«æ²¿ã£ãŠä»»æã®æ¹åã«ç§»åããŸãã
ã²ãŒã ãéçºããã«ã¯ãJ2dsïŒã²ãŒã ãšã³ãžã³ïŒã䜿çšããŸãã
çµäºããã²ãŒã ã®ã³ãŒãïŒ
index.html<!DOCTYPE html> <html> <head> <script type="text/javascript" src="j2ds/engineMath.js"></script> <script type="text/javascript" src="j2ds/engineKey.js"></script> <script type="text/javascript" src="j2ds/engineDOM.js"></script> <script type="text/javascript" src="j2ds/engine2D.js"></script> <script type="text/javascript" src="j2ds/engineNet.js"></script> <script type="text/javascript" src="j2ds/engineParticles.js"></script> <script type="text/javascript" src="j2ds/enginePE.js"></script> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <meta name="viewport" content="width=device-width,user-scalable=no" /> <title>Demo Game on J2ds v.0</title> </head> <body id="gameBody"> <canvas id="iCanvas" width="500" height="280"></canvas> <br> <div id="hint"></div> <script type="text/javascript"> </script> </body> </html>
ããã¯èšäºã®ç®çã§ã¯ãªããããã²ãŒã ã³ãŒãã®å質ã«æ³šæãæãããšã¯ã§ããŸããã ãã¡ããã奜ããªã ãæé©åããããšãã§ããŸããããã®ããã»ã¹ã¯äžè¬ã«ç¡éã§ãã
ã¹ããã2. Android Studioã ã²ãŒã ã®ã©ãããŒãäœæãã
ããããAndroidéçºçšã®IDEã®ã¯ãŒã«ãã誰ãšã§ã枬å®ããã€ããã¯ãããŸããããäŸãšããŠAndroid Studioã䜿çšããŠç€ºããŸãã åäœããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
-Javaãã·ã³ïŒOpenJDKã¯ç§ã®Linuxã«é©ããŠããŸãïŒ;
-Android Studioãã£ã¹ããªãã¥ãŒã·ã§ã³ã
ããŠã³ããŒããã€ã³ã¹ããŒã«ã
ãã¹ãŠãã€ã³ã¹ããŒã«ããããïŒããã2ã€ã®ããã°ã©ã ã§ååã§ãïŒãAndroid Studioãèµ·åããŸãã

éå§ãŠã£ã³ããŠãéããŸãïŒæåã®éå§ã®å ŽåïŒãæåã§ã¯ãªãå ŽåãIDEèªäœã¯éããŸãããæ¬è³ªã¯å€ãããŸãããSDKãããŒãžã£ãŒã«è¡ããŸãããïŒ

ããã§ã¯ã䜿çšããAndroidã®å¿
èŠãªããŒãžã§ã³ãéžæããå¿
èŠããããŸããç§ã®å Žåã¯Android 4.4.2ã§ããå°ãªããšãäžåºŠã«ãã¹ãŠãéžæã§ããŸãã
äž»ãªãã®-ãããŒã«ããšããšã¯ã¹ãã©ããéžæãããããã±ãŒãžã®ã€ã³ã¹ããŒã«ããã¯ãªãã¯ããŠãã ããã
ãã¹ãŠãããŠã³ããŒãããããšãIDEã¯éãç°è²ã®èæ¯ãšããã€ãã®ãã¿ã³ã§èµ·åããæåã®ãã¿ã³ãã¯ãªãã¯ããŠæ°ãããããžã§ã¯ããäœæããŸãã IDEãããã«æ£åžžã«åäœããå Žåãããã¡ã€ã«->æ°èŠ->æ°èŠãããžã§ã¯ãã

å¿
é ãã£ãŒã«ãã«å
¥åããŠãã次ãžããã¯ãªãã¯ããŸã

Androidã®ç®çã®ããŒãžã§ã³ãéžæãã[次ãž

ããã§ã¯ã空ã®ã¢ã¯ãã£ããã£ïŒHelloãWorldïŒãå«ã空ã®ãã³ãã¬ãŒãïŒãéžæããŸã
次ã®ãŠã£ã³ããŠã§ãã¯ã©ã¹ãäœæããããã®ããŒã¿ãå
¥åããŸããããããããããããã«å€æŽããŸããã

æ¬æãè¡šããŠFinichãã¯ãªãã¯ããIDEããã¹ãŠã®äœæ¥ãæ§æããã³æºåããã®ãåŸ
ã¡ãŸãã

ãã©ãŒã ãã¶ã€ãã®ãããŠã£ã³ããŠãéããŸãã Delphiã®Lazarusãšã¯ç°ãªããŸãããåæ§ã®ããšããŸã ååšããŸãã

æ¥ãã§äœããå€æŽããããäœããã¯ãªãã¯ãããããªãã§ãã ãããèšå®ã¯ãŸã å®äºããŠããŸããã ãTolls-> Android-> AVD ManagerããéããŠããšãã¥ã¬ãŒã¿ãŒãæ§æããŸãã

ããã§ãäœããªãå Žåã¯ãä»®æ³ããã€ã¹ã®äœæããã¯ãªãã¯ããŸããããå Žåãæ°ããããã€ã¹ãäœæããããšã¯ã§ããŸããã ç§ã¯ç解ããŠããéã«ãã€ãŸããããã æ°ãããšãã¥ã¬ãŒã¿ãäœæããå¿
èŠãããå Žåããã¹ãŠãç°¡åã§ãã
1.ç»é¢ãµã€ãºãšé»è©±ã¢ãã«ãéžæããŸã
2. Androidã®ããŒãžã§ã³ãéžæããŸãïŒ4.4.2ããããŸãïŒ
3.ããã€ã¹ãã»ããã¢ããããŸãã
3çªç®ã®ã¹ãããã§ã¯ã詳现ã以äžã«ç€ºããŸãã

T.K. ã²ãŒã ã¯æ°Žå¹³æ¹åã«åŒã䌞ã°ãããããã暪åãã¢ãŒããéžæããå¿
èŠããããŸãã
ãã¹ãŠã®èšå®ãå
¥åããããç·è²ã®äžè§åœ¢ãã¯ãªãã¯ããŠãšãã¥ã¬ãŒã¿ãŒãèµ·åããŸãã èµ·ååŸãããã€ã¹ãå®å
šã«ããŒããããOSãèµ·åãããŸã§åŸ
æ©ããŸãã

ãã®ãŠã£ã³ããŠã¯éããªãã§ãã ããããšãã¥ã¬ãŒããããŸãã ããã§ããšãã£ã¿ãŒã«æ»ãããã©ãŒã ãã¶ã€ãã§æ¹åãå€æŽã§ããŸãã

èµ°ããŸãïŒ ä»ã§ã¯ééããªãå¯èœã§ãã
ãšãã¥ã¬ãŒã¿ãéžæããããã«æ±ãããããã以äžã®ããã¯ã¹ããã§ãã¯ã§ããŸãã

ããã§ãšãããããŸãïŒ åäœç¢ºèªæžã¿ïŒ

ãšãã¥ã¬ãŒã¿ãŒããªãã«ããŸãïŒãã ããéããªãã§ãã ããïŒïŒãšãã£ã¿ãŒã«ç§»åããŸãããã¹ãŠãå°ãè€éã§ãïŒå°ãïŒã
ãããã¹ããã¢ãŒãã«åãæ¿ããå¿
èŠããããŸãã activity_mainã§èª¬æãããŠãããã©ãŒã ã«ãããã¹ãŠã®èŠçŽ ããããŸãã ãã©ãŒã èªäœãå«ãã ãããŠãããã¯ãŸã£ãã圢ã§ã¯ãããŸããã
ãªããªã HTML5ã§ã²ãŒã ãäœæããããã«ã¯ã²ãŒã ã®ã©ãããŒã®ã¿ããããŸãããã¹ãŠã®ããã¹ããåé€ããŠã次ã貌ãä»ããŸãã
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".MainActivity"> <WebView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/webView" android:clickable="true" android:scrollbars="none" /> </RelativeLayout>
ããã§ãèšèšã«æ»ã£ãå Žåãå€èŠ³ãç°ãªããŸãã

ã芧ã®ãšããããHelloãWorldãã®ä»£ããã«ããã«ã¹ã¯ãªãŒã³ã¯WebViewã§ãã ãã®ãªããžã§ã¯ãã¯ãã²ãŒã ã®äžçãžã®ãçªãã§ãã
å®è¡ããŠãçœãç»é¢ããããã©ããã確èªããããšãã§ããŸãã ã©ãã
次ã«ããããžã§ã¯ãã«ç§»åããå¿
èŠããããŸãããã®ããã«ã¯ãå·ŠåŽã®[ãããžã§ã¯ã]ãã£ãŒã«ããéããéžæãããŠããªãå Žåã¯[Android]ã¿ããéžæããŸãã

ãã®ã¿ãã«ã¯ããããžã§ã¯ãã®æ§é ãšããã®ãã¹ãŠã®å
éšãã¡ã€ã«ãšãªãœãŒã¹ã衚瀺ãããŸãã
解説ãããã§ã¹ããã¡ã€ã«ãèŠã€ããŠãã¢ããªã±ãŒã·ã§ã³ã®å®çŸ©ã«æ¬¡ã®è¡ãè¿œå ããå¿
èŠããããŸãã
android:hardwareAccelerated="true"
ããã¯åœŒã ããã§ããç§ãã¡ã®ããã©ãŠã¶ãã®æ©èœã«åãæããæã§ãïŒ ã¯ã©ã¹ãMainActivity.javaããéããäžèŠãªãã®ããã¹ãŠåé€ããã¡ã€ã³ã®ã¿ãæ®ããŸãã
解説 package com.soft.skaner.demogamehtml5; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
å¿ããŠããªãå Žåã¯ãactivity_mainãã¡ã€ã«ã«WebViewãè¿œå ããŸããã倪åã®è¡ã«æ³šæããŠãã ããã
<Webview
androidïŒlayout_width = "fill_parent"
androidïŒlayout_height = "fill_parent"
androidïŒid = "@ + id / webView"androidïŒclickable = "true"
androidïŒscrollbars = "none" />
WebViewã¯ã©ã¹ã®ãªããžã§ã¯ãã宣èšããå¿
èŠããããŸãã
ãããè¡ãã«ã¯ãã€ã³ããŒãã®ãªã¹ãã«è¿œå ããŸãã
import android.webkit.WebView;
ãããŠãMainActivityã¯ã©ã¹å
ã§myWebãªããžã§ã¯ãã宣èšããŸãã
protected WebView myWeb;
次ã«ãè¡
setContentViewïŒR.layout.activity_mainïŒã®åŸ; 次ã®ã³ãŒããæ¿å
¥ããŸãã
myWeb= (WebView) findViewById(R.id.webView); myWeb.getSettings().setUseWideViewPort(true); myWeb.setInitialScale(1); myWeb.getSettings().setJavaScriptEnabled(true); myWeb.loadUrl("file:///android_asset/index.html");
ããã«ç§ããšãã£ã¿ãŒã§åŸããã®ããããŸãïŒ

ãããŠãããããšãã¥ã¬ãŒã¿ã®å
容ã§ãã

ããªããåããªã-ç§ãã¡ã¯æ£ããè»éã«ä¹ã£ãŠããŸãïŒ
å°ãããããšãæ®ã£ãŠããŸãã
ãã©ãŠã¶ã§ããŒãžãèªã¿èŸŒããšããã¡ã€ã«ãžã®ãã¹ã¯æ¬¡ã®ããã«ãªããŸãïŒ "fileïŒ///android_asset/index.html"
ã²ãŒã å
ã«ä»»æã®ãã¡ã€ã«ãä¿åãããããã«ã¢ã¯ã»ã¹ã§ããããšã«æ³šæããŠãã ããã
ãã®å ŽåãããŒãã©ã«ããŒã¯ãandroid_assetãã§ããäœæããŠã¿ãŸãããïŒã¯ããããã©ã«ãã§ã¯ãããžã§ã¯ãã«ãããŸããïŒã
ããã¡ã€ã«->æ°èŠ->ãã©ã«ããŒ->ã¢ã»ãããã©ã«ããŒããéžæãããšãIDEãåãå
¥ããã®ãéåžžã«ç°¡åãªãŠã£ã³ããŠãéããŸãã
æ°ã¥ããïŒ ãããžã§ã¯ãã«æ°ãããã©ã«ããŒã衚瀺ãããŸããã

ãããå³ã¯ãªãã¯ããããã¡ã€ã«ã«è¡šç€ºããéžæãããšãã·ã¹ãã ãšã¯ã¹ãããŒã©ãŒïŒç§ã®å Žåã¯NautilusïŒãéãããã©ã«ããŒãžã®ãã¹ã«æ³šæããŠãã ããã ãã©ã«ããŒã¯ãã¢ã»ããããšåŒã°ããŸããããandroid_assetãçµç±ã§ã¢ã¯ã»ã¹ããããšã«æ³šæããŠãã ããã

ãã®åŸããã¹ãŠãéåžžã«ç°¡åã§ã-ã²ãŒã ãã¢ã»ãããã©ã«ããŒã«ã³ããŒããŸãã

index.htmlãã¡ã€ã«ã¯ããã®èšäºã®æåããã®åãã€ã³ããã¯ã¹ã§ãã ããŠãå®è¡ããŠã¿ãŠãã ããïŒ
ã¡ãã£ãšãããã³ãïŒUSBãä»ããŠå®éã®ããã€ã¹ã§ãã¹ãããã®ãæåã§ãããã¹ãçµæã¯ããèŠèŠçã«ãªããããŠã¹ã®å¶åŸ¡ã¯è€æ°ã®ã¯ãªãã¯ã¯èšããŸã§ããªãæã䟿å©ãªãªãã·ã§ã³ã§ã¯ãããŸãããã¹ããã3. Android Studioã ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠçœ²åãã
ã²ãŒã ãïŒãã©ãŠã¶ãŸãã¯ãšãã¥ã¬ãŒã¿ã§ïŒå®å
šã«ãããã°ããããšãã©ãããŒã¯å®å
šã«æºåãæŽãããã¹ãŠã®éçºæ®µéãé
ããŠãã¢ããªã±ãŒã·ã§ã³ããã«ãã§ããŸãã Android Studioã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ãåéããŠãããŒã§çœ²åã§ããŸãã
ããŒãäœæããããã«ããã®IDEã«ã¯KeyToolãšåŒã°ããç¹å¥ãªãŠãŒãã£ãªãã£ããããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®å®è¡å¯èœãã¡ã€ã«ã®äœæã«é²ã¿ãŸãïŒããã«ã->眲åæžã¿APKã®çæãïŒïŒ

以åã«ããŒãšãšã€ãªã¢ã¹ãäœæããªãã£ãå Žåã¯ããæ°èŠäœæããã¯ãªãã¯ããŸãã ããªãã®è£éã§ãã£ãŒã«ãã«èšå
¥ããããšãã§ããŸããããŒã¿ã®ä¿¡é Œæ§ã¯å®å
šã«ããªã次第ã§ãã

æåã®ãã£ãŒã«ãã¯ãããŒãä¿åããããã©ã«ããŒãžã®ãã¹ã§ãã [OK]ãã¯ãªãã¯ãããšããã©ãŒã ã«èªåçã«å
¥åãããŸãã

åŸç¶ã®ã¢ããªã±ãŒã·ã§ã³çšã«æ°ããããŒãäœæããå¿
èŠã¯ãããŸãããããŒã§ä»ã®ã¢ããªã±ãŒã·ã§ã³ã«çœ²åã§ããŸããããã«ã¯ã[æ¢åã®ãã®ãéžæ]ãã¿ã³ããããŸãã
次ã®ã¹ãããã§ãIDEã¯ãã¹ã¯ãŒãã®åå
¥åãæ±ããAPKãã¡ã€ã«ãä¿åãããã©ã«ããŒãæå®ããŸãã

ããã§ããªã©ãã¯ã¹ããŠãããšãã°ã³ãŒããŒã飲ãããšãã§ããŸããã·ã¹ãã ãã³ã³ãã€ã«ãéå§ãããšãçµæãã¹ããŒã¿ã¹ããŒã«è¡šç€ºãããŸãã

ã³ã³ãã€ã«ãå®äºãããšãã·ã¹ãã ã¯ãããéç¥ããŸãã


ãã¡ã€ã«ãæºåž¯é»è©±/ã¿ãã¬ããã«ç§»åããŠãéåžžã®ã¢ããªã±ãŒã·ã§ã³ã®ããã«ã€ã³ã¹ããŒã«ããŸãã
çµæïŒ


è¬ç©ã®äŸã«ã€ããŠã¯ãå¿
èŠã«å¿ããŠã