Eclipseを使用して、Android用のscalaでライブラリプロジェクトとメインアプリケーションの両方を作成するための回避策を見つけました。それを皆さんと共有したいと思います。ただし、Eclipseからのあいまいなクリーニングプロセス(最後の問題を参照)により、この回避策が現在完全には機能していない、より大きなプロジェクトにこの機能を実装できません。
Eclipse 3.6、Scala 2.8.3のプラグイン、最新のAndroid SDK(私にとっては18)、treeshakerプラグインなどの構成をインストールしたと思います。
ライブラリの作成
- ファイル>新規>プロジェクト>Androidプロジェクト
- プロジェクト名:
TestScalaLibrary
、新規作成、デフォルトの場所を使用、次へ - ターゲット2.3.3API10、次
- アプリケーション名:
TestScalaLibrary
、パッケージ名com.exampleLibrary
、名前付きアクティビティの作成TestScalaLibraryActivity
、終了
プロジェクトTestScalaLibraryをscalaライブラリとして構成する
- プロジェクトを右クリックし、構成し、scalaの性質を追加します
- プロジェクトを右クリックし、Treeshakerを追加/削除します。
- プロジェクト、プロパティ... androidを右クリックし、[ライブラリ]をオンにします。
次のコンテンツを含む
TestScalaLibraryActivity2
パッケージで名前が付けられた新しいscalaクラスを作成します。com.exampleLibrary
package com.exampleLibrary import android.app.Activity import android.os.Bundle class TestScalaLibraryActivity2 extends Activity { override def onCreate(savedInstanceState: Bundle) { super.onCreate(savedInstanceState) setContentView(R.layout.main) } }
ファイルを削除します
TestScalaLibraryActivity.java
AndroidManifest.xml
に置き換えることで更新しandroid:name=".TestScalaLibraryActivity"
ますandroid:name="com.exampleLibrary.TestScalaLibraryActivity2"
- プロジェクトをクリーンアップし、自動的にビルドします。
testscalalibrary.jar
削除できないためにビルドエラーが発生した場合は、このライブラリを参照しているプロジェクトを一時的に閉じて、Eclipseの外部で手動で実行してください。
テストアプリケーションの作成
- ファイル>新規>プロジェクト>Androidプロジェクト
- プロジェクト名:
TestScala
、新規作成、デフォルトの場所を使用、次へ - ターゲット2.3.3API10、次
- アプリケーション名:TestScala、パッケージ名
com.exampleApplication
、createアクティビティという名前TestScalaActivity
プロジェクトをscalaプロジェクトとして構成する
- プロジェクトを右クリックし、構成し、scalaの性質を追加します
- プロジェクトを右クリックし、Treeshakerを追加/削除します。
- プロジェクトを右クリックし、プロパティ... android、library、add...プロジェクト
TestScalaLibrary
をライブラリプロジェクトとして追加します。 - を編集し、相対名をその絶対的な同等物に
AndroidManifest.xml
置き換えますandroid:name=".TestScalaActivity"
android:name="com.exampleLibrary.TestScalaLibraryActivity2"
デバッグモードで起動し(必要に応じて自分で新しい構成を作成します)、機能しません。例外が発生しますRunTimeException
。
LogCatを見ると、最終的に問題の原因がわかります。
Caused by: java.lang.ClassNotFoundException: com.exampleLibrary.TestScalaLibraryActivity2 in loader dalvik.system.PathClassLoader
これを修正するために、このブログから派生した次の回避策があります。
プロジェクトTestScalaで
TestScalaActivityDummy
、次のコードを使用してクラスを作成します。package com.exampleApplication class TestScalaActivityDummy {}
デバッグモードで起動します...動作します!
今、奇妙な部分。
- ファイルを削除し
TestScalaActivityDummy.scala
(はい、ファイルを削除します)、プロジェクトをクリーンアップし、自動的に再構築します。起動します。それはまだ動作します! - プロジェクトをもう一度、おそらく数回クリーンアップします。次に、それを起動すると、RunTimeExceptionが再び発生します。
1回のクリーン、1回の起動、1回のクリーンの後に、これらのエラーが表示されるのはなぜですか?