Articles of scala

没有Java的Android

在完成整个“企业”编程一段时间之后,我对语言本身感到非常失望,如果我不得不重新开始,我总会感到非常受阻。 你的普通Android应用程序的项目大小并不太令人生畏,而且库的编码风格实际上相当不错,但如果我能避免使用Java,我肯定会这样做。 这就是问题:我可以避免吗? 虽然桌面和服务器上有很多JVM语言可供选择,但Dalvik VM和设备本身也有一些限制。 这在使用JIT的2.2中看起来好一点,但将自己限制在最前沿将是一个相当苛刻的决定。 我所知道的唯一替代方案似乎是Scala。 有没有可能我错过了? Clojure似乎完全解决了我在上面用Dalvik说明的问题,但是由于AppInventor建立在Kawa上,因此移动平台上的Lisp可能有希望吗? 还有哪些其他语言可以使用或朝这个方向迈进?

如何将Scala集成到核心Android平台?

我有兴趣将Scala(或其他一些非Java JVM语言)集成到android平台中。 我不是指用Scala编写一个Android应用程序,我早期就做过,但实际上是在构建android平台源代码树的构建过程中。 我想这将是一个挂入makefile等问题。 有没有人对此有所了解? 到目前为止我所拥有的:平台源代码树来自git://android.git.kernel.org/platform/manifest.git以其处女forms构建,以“[下载并构建Google Android] [1]”为指导 build / core / combo / scalac.mk#配置由config.mk包含的scala编译器相关variables 在build / core / definitions.mk中为all-subdir-scala-files和all-scala-files-under添加了定义 在definitions.mk中添加了定义以构建scala文件,使它们包含在包中 还剩下什么: 包括scala-library.jar 确保对-bootclasspath的更改没有破坏任何内容 弄清楚如何处理scala类依赖于java类的情况,反之亦然 主要清理代码 测试! 通过我所做的更改,弄清楚要做什么(除了在这里发布) 看起来我快到了! 过去的一些笔记 最新:我find了编译Java源文件的位置! 在definitions.mk中,请参阅’define transform-java-to-classes.jar’。 最新的想法是编写一个transform-scala-to-classes定义,然后将它们存储在直接打包的类中。 我将在transform-java-to-classes.jar中的这一步之前调用transform-scala-to-class。 现在可以删除对eclipse和cygwin的支持,因为它会使代码变得混乱,从而增加了失败的可能性。 构建过程由运行build / core / main.mk的根Makefile开始构建/ core / main.mk包括build / core / config.mk,其中包括build / core / combo / javac.mk,它设置HOST_JAVAC,TARGET_JAVAC和COMMON_JAVAC。 COMMON_JAVAC是“具有公共参数的Java编译器命令”,通过它看起来其他两个variables默认获取这些值,除非在特殊环境(openjdk或eclipse)中。 […]

在Android上使用Scala值得吗? 有很多开销吗? 问题?

我正在考虑使用Scala而不是常规Java(或者我猜的等价物)在Android上构建应用程序。 这值得么? 任何问题和不必要的头痛?

如何降级android studio gradle中的proguard版本?

我正在尝试使用scala和android studio来构build一个android应用程序。 在proguard编译失败,例外: Error:java.lang.ArrayIndexOutOfBoundsException: 4 at proguard.classfile.editor.InterfaceDeleter.visitSignatureAttribute(InterfaceDeleter.java:162) at proguard.classfile.attribute.SignatureAttribute.accept(SignatureAttribute.java:97) 我在另一个地方( http://sourceforge.net/p/proguard/bugs/549/ )发现这个问题是由scala中的一个bug造成的,但是它只发生在proguard 5.1中,而不是在proguard 5.0中。 现在我的问题是:我怎么能安装android studio,以便它会使用proguard 5.0?

使用AndroidAnnotations与Scala和Gradle

使用Scala编程语言和Gradle构build系统可以使用AndroidAnnotations吗? 当我尝试将AndroidAnnotations集成到我现有的Android / Scala / Gradle项目中时,编译失败,因为生成的下划线类(例如MyActivity_)无法find。 这里有一些有用的出发点和参考: http://www.scala-lang.org/node/4773(2010-01-06 ) http://www.scala-lang.org/sid/5(2010-01-27 ) http://code.google.com/p/androidannotations/wiki/Configuring(2011-07-28 ) http://docs.jboss.org/hibernate/validator/4.1/reference/en-US/html/ch08.html#d0e2816(2010 ?) 使用Ant的Java 6注释处理configuration (2010-09-05) http://download.oracle.com/javase/6/docs/technotes/tools/solaris/javac.html#processing http://ant.apache.org/manual/Tasks/apt.html 从Gradle构build脚本生成JPA2元模型 (2011-06-22) http://download.oracle.com/javase/1.5.0/docs/guide/apt/GettingStarted.html

如何从proguard版本中排除R * .class文件

我离这里描述的方法只有一步之遥: 用Scala 2.8 Trunk构buildAndroid 与一个单一的项目(一个项目为斯卡拉和一个为Android)。 我遇到了一个问题。 使用这个input文件(参数)proguard: -injars bin;lib/scala-library.jar(!META-INF/MANIFEST.MF,!library.properties) -outjar lib/scandroid.jar -libraryjars lib/android.jar -dontwarn -dontoptimize -dontobfuscate -dontskipnonpubliclibraryclasses -dontskipnonpubliclibraryclassmembers -keepattributes Exceptions,InnerClasses,Signature,Deprecated, SourceFile,LineNumberTable,*Annotation*,EnclosingMethod -keep public class org.scala.jeb.** { public protected *; } -keep public class org.xml.sax.EntityResolver { public protected *; } Proguard成功构build了scandroid.jar,但它似乎包含了由android资源构build器生成和编译的生成的R类。 在这种情况下,它们位于bin / org / jeb / R * .class。 这不是我想要的。 Android的dalvik转换器不能build立,因为它认为有重复的R类(这是在scandroid和R * .class文件)。 我怎样才能修改上述proguard参数从scandroid.jar排除R * […]

Android上的Scala:java.lang.NoSuchMethodError:java.lang.String.isEmpty

我在Android 2.2.1上遇到以下exception: java.lang.NoSuchMethodError: java.lang.String.isEmpty 我从Scala调用text.isEmpty 。 任何想法,如何解决这个问题?

使用Scala与Gradle for Android项目

似乎有一个内存泄漏的地方。 在IntelliJ中设置项目并使用Gradle包装器时: ./gradlew assembleDebug –debug 大约5分钟后,我得到以下内容: 14:30:15.245 [INFO] [org.gradle.api.Project] processing scala/collection/SeqViewLike$$anon$5.class… 14:30:53.132 [INFO] [org.gradle.api.Project] processing scala/collection/SeqViewLike$$anon$6.class… 14:33:51.027 [ERROR] [org.gradle.api.Project] 14:33:51.028 [ERROR] [org.gradle.api.Project] UNEXPECTED TOP-LEVEL ERROR: 14:33:51.028 [ERROR] [org.gradle.api.Project] java.lang.OutOfMemoryError: Java heap space 14:33:51.028 [ERROR] [org.gradle.api.Project] at java.util.HashMap.<init>(HashMap.java:209) 14:33:51.029 [ERROR] [org.gradle.api.Project] at com.android.dx.ssa.LocalVariableInfo.<init>(LocalVariableInfo.java:66) 14:33:51.029 [ERROR] [org.gradle.api.Project] at com.android.dx.ssa.LocalVariableExtractor.<init>(LocalVariableExtractor.java:72) 14:33:51.029 [ERROR] [org.gradle.api.Project] at com.android.dx.ssa.LocalVariableExtractor.extract(LocalVariableExtractor.java:54) 14:33:51.029 [ERROR] [org.gradle.api.Project] […]

在Android上使用IntelliJ编写的Scala中的LibGDX项目

因此,在使用本教程进行设置后,我一直在使用Scala在IntelliJ v12.1.6中开发一个LibGDX项目: http ://www.gamefromscratch.com/post/2013/12/01/Using-LibGDX-with-IntelliJ -with-Gradle.aspx 。 不过,我注意到,当我的Android设备上testing游戏时,我收到以下错误 12-04 17:46:22.483: ERROR/AndroidRuntime(18951): FATAL EXCEPTION: GLThread 475 Process: com.voliant.rsoss, PID: 18951 java.lang.NoClassDefFoundError: scala.Predef$ at com.voliant.rsoss.Actors.Player.act(Player.scala:20) at com.badlogic.gdx.scenes.scene2d.Group.act(Group.java:48) at com.badlogic.gdx.scenes.scene2d.Stage.act(Stage.java:225) at com.badlogic.gdx.scenes.scene2d.Stage.act(Stage.java:189) at com.voliant.rsoss.Screens.GameScreen.render(GameScreen.scala:46) at com.badlogic.gdx.Game.render(Game.java:46) at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:499) at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1523) at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240) 每当我尝试使用Scala本地的方法(如标准的println()方法)。 我怀疑android类找不到Scala使用的类,所以我试图用Scala库导出android项目。 但是,每当我尝试这个,我得到一个错误,我有太多的方法, (类似于这个) ,这是有道理的,因为斯卡拉引入足够的方法进入项目,以保证这个错误。 我的问题是我怎么能让Android项目意识到Scala类和方法,以便我可以在android项目中有效地使用它们,因为我已经能够在桌面项目中? 谢谢!

在Android Studio中使用与Java的Scala

我在Android Studio 1.2.2中安装了1.5.2 Scala插件。 我有一个以Java编码的现有(function)项目。 我在Scala中添加了一个简单的类来replace现有的Java类,只是为了试用它。 IDE似乎validation了Scala代码,但是从Java代码引用的类没有解决。 我不知道为什么。 我已经在这个项目的服务器端的SBT下成功混合了这些语言。 Java代码引用如下所示: package net.from.apprise; import java.util.*; import java.io.Serializable; import org.json.*; class ItemRelation extends SharableRecord implements Serializable, JSONable { public static final String TAG = "IR"; String listKey; String description; String barCode; Purch purch; 喀嚓… Purch从Java中定义的Purchase改为正常解决。 Scala代码是: package net.from.apprise class Purch { val whatever:Int = 1 } 尝试build立良率: […]