éçºç°å¢
Android StudioãšIntelliJ IDEAã§åäœãããã®ã¢ãããŒãã®é©çšæ§ã調æ»ããŸããã ãã®ç®çã®ããã«ãå®éã«ã¯ç°å¢ã«å€§ããªéãã¯ãããŸããã 埮åŠãªéãããããŸã-ãããã䜿ã£ãŠãèšäºã®éçšã§ç¥ãåããŸãã ããããäžè¬ã«ã䜿çšãããã¯ãããžãŒã¯ãStudioãšIdeaã®äž¡æ¹ã«çããçµ±åãããŠããŸãã çµå±ãæåã®ãã®ã¯IdeaãšåãIntelliJãã©ãããã©ãŒã ã«åºã¥ããŠããŸãã ãããã£ãŠãéžæã¯ãããžã§ã¯ãã®è©³çŽ°ã«åºã¥ããŠè¡ãå¿ èŠããããŸãã
åºæ¬çãªãããžã§ã¯ããäœæãã
ç§ãã¡ã®ããžãã¹ã®æåã®ããŒã«ã¯ãIntelliJ IDEAãšAndroid Studioã®Scalaèšèªã§éçºããããã«èšèšãããScalaãã©ã°ã€ã³ã§ãã ãã®ãã©ã°ã€ã³ã¯SBTãæäŸããŸãã éçºç°å¢ã«ã¯ä»å±ããŠããªããããJetBrainsãªããžããªããããŠã³ããŒãããå¿ èŠããããŸãã
ããã§ãåºæ¬çãªScala SBTãããžã§ã¯ããäœæã§ããŸãã ãããŠãããã«ç°å¢éã®æåã®éãããããŸããScalaãã©ã°ã€ã³ã¯ãIdeaã§å©çšå¯èœãªæ°ããSBTãããžã§ã¯ããäœæããããã®ãŠã£ã¶ãŒããæäŸããŸãïŒ
[File â New â Project â Scala â SBT]
ã ããããAndroid Studioã¯ãŠã£ã¶ãŒããéžæããæ©äŒãäžãããããã«ïŒå¥ã®ãã«ãããŒã«ã§ããGradleã«åºã¥ããŠïŒãŠã£ã¶ãŒããèµ·åããŸãã ãããã£ãŠããããžã§ã¯ãã¯SBT Studioã«ã®ã¿ã€ã³ããŒãã§ããŸãã åºæ¬çã«ãããã¯20ç§ã®åé¡ã§ãã
- å¥ã®ãã©ã«ããŒã«ãã³ã³ãã³ã
name := "example"
æã€build.sbt
ãã¡ã€ã«ãäœæããŸãã
-
sbt compile
consoleã³ãã³ãã䜿çšããŠãåºæ¬çãªãããžã§ã¯ãã«å¿ èŠãªãã¹ãŠãçæããŸãã ïŒç«¯æ«ã¯ãSBTã«ã¢ã¯ã»ã¹ããããã«Studioå ã§èµ·åãããŸãïŒ
- Android Studioã®ãããããŠã£ã³ããŠã§ãã€ã³ããŒããããžã§ã¯ããå®è¡ãã
build.sbt
ãbuild.sbt
ãéžæããŸã
ã€ã³ããŒããŠã£ã¶ãŒãã§ãAndroid SDKïŒçŸåš25ïŒãæå®ããã¢ããªã³ãã§ãã¯ããã¯ã¹ãåé€ããŸãã ã¢ã¯ã·ã§ã³ãšã€ã³ããŒãã ã¢ã€ãã¢ã§ã¯ãæ°ããSBTãããžã§ã¯ããäœæãããšãã«ãAndroid SDKãéžæããæ¹æ³ã¯ãããŸãããJavaSDKïŒçŸåšã¯1.8ïŒãšScala 2.11ãéžæããŠãã ãã*ããŒãžã§ã³ã ãããŠãAndroid SDKèªäœã¯ãAndroidãã¬ãŒã ã¯ãŒã¯ãæå¹ã«ããåŸã«çœ®ãæããããŸãã SBTãããžã§ã¯ãã®æºåãã§ããŸããã
SBTãšAndroidãçµ±åããããã®ãã©ã°ã€ã³
次ã«ããããžã§ã¯ããAndroidãã©ãããã©ãŒã ã§å®è¡ããããã«èª¿æŽããå¿ èŠããããŸãã
- ãŸãã
plugins.sbt
ãã¡ã€ã«ãproject
ãã©ã«ããŒã«è¿œå ããŠã ãã©ã°ã€ã³ãæžã蟌ã¿ãŸã
addSbtPlugin("org.scala-android" % "sbt-android" % "1.7.7")
-
build.sbt
ãããã«ãæé ã§èµ·åããsbt-androidãã©ã°ã€ã³ãšã¿ã¹ã¯ã®ã€ã³ã¯ã«ãŒããè¿œå ããŸã
name := "example" scalaVersion := "2.11.8" enablePlugins(AndroidApp) run <<= run in Android install <<= install in Android
- ãããžã§ã¯ãAndroidManifest.xmlã«è¿œå ããŸãã Studioã§ã¯ããã®ãã¡ã€ã«ããããžã§ã¯ãã®ã«ãŒãã«é
眮ã§ããŸãã ã¢ã€ãã¢ã§ã¯ããªããªã ãŠã£ã¶ãŒãã¯æ¢ã«ãã©ã«ããŒæ§é ãäœæããŠããŸã;ãœãŒã¹ã«ãŒããã©ã«ããŒãšåãã¬ãã«ã«é
眮ããŸãã
src/main
ãŸãã ãã¡ã€ã«ãäœæããåŸãIdea / Studioã¯Androidãã¬ãŒã ã¯ãŒã¯ããããžã§ã¯ãã«å«ããããæ瀺ããŸãã ç³ãåºãåãå ¥ããŸãã ãããã§ã¹ãã®æå°å®äºïŒ
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example"> <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="25" /> <application android:label="my_app"> <activity android:name="MyActivity" android:label="MyActivityLabel"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
- Android Studioã§äœæ¥ããå ŽåããœãŒã¹ã«ãŒããã£ã¬ã¯ããªscrãäœæããŸãïŒ
src/main/scala
æ¢ã«Ideaã«ååšããŸãïŒã ãã®äžã§ãMyActivity.scala
ãã¡ã€ã«ãšåçŽãªã¢ã¯ãã£ããã£ãMyActivity.scala
com.exampleããã±ãŒãžãäœæããŸã
package com.example import android.app.Activity class MyActivity extends Activity { }
- Androidãšãã¥ã¬ãŒã¿ãŒãéããŠãªã³ã«ããŸã
- ãããžã§ã¯ããæŽæ°ããŠããã¹ãŠã®æ°ããèšå®ãæå¹ã«ããŸãã IDEAã§äœæ¥ããŠããå Žåããã®ã¢ã¯ã·ã§ã³ã«ããProGuardã¯èªåçã«ãªã³ã«ãªããŸãïŒããã«ã€ããŠã¯åŸã§èª¬æããŸãïŒã
[Project Structure â Facets â Android â Proguard â Run proguard ...]
ã§ç¡å¹ã«ããå¿ èŠããããŸãã - ãããŠãããã©ã«ãã®å®è¡æ§æãå®è¡ããŸã
[Run -> Run ... -> MyActivity
çµæïŒ
ProGuardããŒã«-ScalaãAndroidã«é©åããã
çŸæç¹ã§ã¯ãæãåçŽãªã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠããŸãã ããšãã°ãæ¡åŒµãéå§ããå Žåã¯ãå°ãªããšã
build.sbt
ã©ã€ãã©ãªãbuild.sbtã«è¿œå ããŸã ïŒããã«ã€ããŠã¯åŸã§èª¬æããŸãïŒ
libraryDependencies += "org.scaloid" %% "scaloid" % "4.2"
åé¡ãçºçããŸãã Androidãã©ãããã©ãŒã ã§ã¯ãåç §ã®æ°ã«å¶éããããŸã-64Kã Scalaã³ãŒãã®æ§è³ªã«ããããã®å¶éã«ããã«å°éããŸãã ãããŠããã®ã©ã€ãã©ãªããªã³ã«ããã ãã§ããããžã§ã¯ãã®éå§æã«ãšã©ãŒãçºçããŸãã
Error:Android Pre Dex: [scaloid_2.11-4.2.jar] trouble writing output: Too many method references: 81694; max is 65536.
ãã®åé¡ã解決ããããã®æšæºçãªã¢ãããŒãïŒ
- ProGuardããŒã«ã䜿çšããŠãããžã§ã¯ãããæªäœ¿çšã®ã³ãŒããåãåããŸãã
- ãããžã§ã¯ããœãŒã¹ãããã€ãã®.dexãã¡ã€ã«ã«åé¢ããŸããåãã¡ã€ã«ã«ã¯ã蚱容ãããæ°ã®ã¡ãœãããå«ãŸããŸãã ããã·ãŒãžã£ã®ååã¯MultiDexingã§ãã
ååãšããŠãæåã®ã¹ãããã§ããåé¡ã解決ã§ããªãå Žåã¯ãããã ãã䜿çšãããŸãã æåã®ãã®ã§ã¯ååã§ãªãå ŽåãMultiDexingã¯ãã§ã«ååšããŸãã ãã®ã¿ã¹ã¯å ã§ã¯ãProGuardã§ååã§ãã
ãã®ããŒã«ã¯ãAndroidãã¡ã»ãããªãã·ã§ã³ã§ãªã³ã«ãªããŸãïŒ
[Project Structure â Facets â Android â Proguard â Run proguard ...]
ã ããã©ã«ãã§ã¯ãåºæ¬èšå®ã®ããã¹ããã¡ã€ã«ãæ¢ã«æå®ãããŠããããšã«æ³šæããŠãã ããïŒStudioã«ã¯SDK
.../Android/sdk/tools/proguard/proguard-android.txt
ãã¡ã€ã«ãå«ãŸããIdeaã¯ãããžã§ã¯ãã®ã«ãŒãã«æ§æãã¡ã€ã«ãå«ããŠäœæããŸã
.../example/proguard-sbt.txt
ã ãããžã§ã¯ããæ£åžžã«å®è¡ããã«ã¯ã3ã€ã®è¿œå ãªãã·ã§ã³ãè¿œå ããã ãã§ååã§ãã
-dontwarn scala.** -dontwarn org.scaloid.** -keep class com.example.**
Scalaããã³Scaloidã©ã€ãã©ãªã®ãã€ãã³ãŒããåŠçããéãProGuardã¯èŠåãæµããŸãããã®å Žåãçµæã«åœ±é¿ã¯ãããŸãããã以éã®èµ·åããã»ã¹ã¯ãããã¯ãããŸãã ãããã£ãŠã
-dontwarn
ãªãã·ã§ã³
-dontwarn
ãŠãããããåé€ããŸãã ãŸããProGuardãææžãã³ãŒããåãåããªãããã«æå®ããå¿ èŠããããŸãã ããã¯ã
-keep class
ãªãã·ã§ã³ã«ãã£ãŠæäŸãããŸãã
å§ãããšãã2ã€ã®ãšã©ãŒãçºçããŸããã
-
Unsupported class version number [52.0] (maximum 51.0, Java 1.7)
ã ãã®çç±ã¯ãAndroid SDKã¯Java 1.8ã«åºã¥ããŠãããProGuardã¯æ倧1.7ããµããŒãããŠããããã§ãã ããã¯ãAndroid SDKå ã§ProGuardãããŒãžã§ã³5以éã«æŽæ°ããããšã§è§£æ±ºãããŸãã -
Error:ProGuard: Cannot find file /Users/.../Caches/AndroidStudio2.3/compile-server/.../proguard.txt
-ããã¯ãã©ãããã©ãŒã èªäœã®ãã°ã§ãããproguard-android.txt
ãã¡ã€ã«ã®æåãŸãã¯ã¹ã¯ãªããåããããã¡ã€ã«ã©ã€ãã³ã°ã«ãã£ãŠè§£æ±ºãããŸãAndroid SDKããåããã£ãã·ã¥ã«ç§»åãããã®åŸproguard.txt
ååãå€æŽãproguard.txt
ã æã䟿å©ãªæ¹æ³ã§ã¯ãããŸããããããã§ãããŠãŒã¶ãŒãbuild.sbt
ãã¡ã€ã«ã§ãããã®ãªãã·ã§ã³ããã¹ãŠæå®ããã®ã§ããã®æé ã¯ããŸã䜿çšãããŸããã
ç§ã¯ãã以äžåé¡ã芳å¯ãããScaloidã©ã€ãã©ãªãå«ããããžã§ã¯ããæ£åžžã«èµ·åããŸãããããã¯ãèµ·åæã«ProGuardã«ãã£ãŠã«ãããããŸããã ç¹å®ã®ãããžã§ã¯ãã®è€éããéæããã«ã¯ãProGuardãæäœããããã®ãã©ã°ã€ã³ãå«ããããšã¯çã«ããªã£ãŠããŸãã ãããã®ããã€ãããããŸãããçŸæç¹ã§ç§ã¯1ã€ãèŠã€ããŸããïŒ sbt-proguard ã ProGuardèªèº«ã«ãããšã圌ã®Webãµã€ãã«ãããã¥ã¢ã«ããããŸã ã
ããã§ãå人ãç§ã¯ãã®èšäºãå®äºããŸãã èå³ãããå Žåã¯ã ScaloidãMacroidãªã©ãScalaã§ã®Androidåãéçºçšã©ã€ãã©ãªãŒã®äœ¿çšãšãScalaèšèªã®æ©èœã䜿çšããŠããã®ã¢ãã€ã«ãã©ãããã©ãŒã ã§ã®äžè¬çãªåé¡/åé¡ã解決ããæ¹æ³ã«ã€ããŠãããã«è©³ãã説æããŸãã å€ãã®ç¹ã§ããã®è³æãå匷ãããšããAndroid SBTãã©ã°ã€ã³ãªãœãŒã¹ãšãScala for Androidã§ã®éçºå°çšã®æ å ±ãµã€ãã«å©ããããŸããã ãæž èŽããããšãããããŸãããç§ã¯åã³å»ºèšçãªæ¹å€ã質åãã³ã¡ã³ããææ¡ãããããŸãã ãããããé¡ãããŸãïŒ