2

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回のクリーンの後に、これらのエラーが表示されるのはなぜですか?

4

1 に答える 1

1

解決策は、treeshakerを使用せずに、代わりにAndroidProguardScalaプラグインを使用して最初からやり直すことです。

https://stackoverflow.com/a/11084146/1287856

于 2012-05-25T16:36:47.867 に答える