web-dev-qa-db-ja.com

Android ORMLite構成生成のためのStudio実行構成

Android St​​udioを使用していて、ORMLiteフレームワークを使用したい。 ORMLite for Androidには、 table config file を介してDAOを作成するためのメカニズムがあります。

この構成を生成するためにAndroid St​​udioで追加の実行構成をセットアップする方法

34

なんとかやりましたが、少しトリッキーでした。

OrmLiteConfigUtilを拡張するDatabaseConfigUtilと呼ばれるクラスがあります。ormliteの公式チュートリアルに従って作成したので、同じことをしたと思い、そのクラスも持っています。 ファイル名だけでなく、構成ファイルへの完全なパスを渡す必要があることに注意してください。それにもかかわらず、ここにあります:

public class DatabaseConfigUtil extends OrmLiteConfigUtil {
  private static final Class<?>[] classes = new Class[] {
    Class1.class, Class2.class, Class3.class, Class4.class
  };

  public static void main(String[] args) throws SQLException, IOException {
    writeConfigFile(new File("PATH/TO/Android/PROJECT/src/main/res/raw/ormlite_config.txt"), classes);
  }
}

これは、ormlite_config.txtを作成するために実行するクラスです。

Android Studioプロジェクトナビゲーションパネルで、DatabaseConfigUtil.Javaを右クリックし、[実行](緑の矢印の付いたオプション)を選択します。実行構成を作成していない場合は、作成されます。

さて、設定を編集してください

enter image description here

「起動前」セクションで、メイクを削除します。 rawフォルダーにファイルormlite_config.txtがすでにある場合は問題ありませんが、ない場合は、クラスを実行するとプロジェクトがコンパイルされ、ormlite_config.txtが存在しないために失敗します。

enter image description here

ここでプロジェクトを再度実行します。

すべてが順調に進んでいるはずです。

乾杯

---------------------------- ## -------------------- --------

更新:

最近、私は再びORMLiteを使用する必要があり、このソリューションはGradleプラグインで自動化できると判断しました。私自身を作成する前に、私は怠惰な開発者として、誰かが以前に同じことを試みたかどうかを確認することにしました。ありがたいことに、@ snicolasはまさにそれを行い、あなたは彼のプラグイン here を見つけることができます。私はそれを試しました、そしてそれはかなりうまくいきます。ファイルを生成するために実行できるcreateORMLiteConfigFile*Variant*というタスクが作成されます。

39
Joao Sousa

@Joaoの回答の下にあるすべてのコメントをまとめると、この実用的な解決策が得られました。

1)DB構成ファイルジェネレーターの構成を編集します。

edit configuration

2)Working directory$MODULE_DIR$/src/mainになるように構成します。

3)Before launchで、MakeMake, no error checkに置き換えます

working directory

これらの手順を実行すると、OrmLiteConfigUtilクラスでファイル名のみを指定できます。

public class DBConfigUtil extends OrmLiteConfigUtil {

    /**
     * To make this work in Android Studio, you may need to update your
     * Run Configuration as explained here:
     *   http://stackoverflow.com/a/17332546
     */
    public static void main(String[] args) throws Exception {
        writeConfigFile("ormlite_config.txt", sClasses);
    }
22
Dan J

OPがClassNotFoundExceptionで取得したのと同じ問題が発生しました。これを回避するには、一時的にコードを変更して、コンパイラーにプロジェクトをコンパイルさせるようにします。

Super()に渡すDatabaseHelperクラスで使用したR.raw.ormlite_config値を削除する必要がありました。

public class DBConfigUtil extends OrmLiteConfigUtil {
private static final Class<?>[] classes = new Class[] {Workout.class};

    public static void main(String[] args) throws IOException, SQLException {
        writeConfigFile("ormlite_config.txt",classes);
    }

}

OrmLiteSqliteOpenHelperを拡張する私のDBHelperクラスは、まだrawフォルダーを使用する必要はありません。これは、プロジェクトを正常にコンパイルするのに役立ちます。

public DBHelper(Context context){
    super(context,DATABASE_NAME,null,DATABASE_VERSION,1);// R.raw.ormlite_config
}

enter image description here

  1. プロジェクトをコンパイルしました。
  2. 作業ディレクトリをapp/src/mainフォルダーに変更します。
  3. JREをJDK1.8に変更しました
  4. 起動前セクションからメイクを削除します。
  5. 走る

わかりました、OPと同じClassNotFoundExceptionに失敗しました。これが私がそれを解決した方法です:

短いメモ:ライブラリプロジェクトとメインプロジェクトがあり、どちらもGradleでセットアップされています。以前に呼び出されたソリューションが私のセットアップでは機能しなかったため、これはかなり異なる可能性があります。

だから私の行うステップ:

  1. DatabaseConfigUtilクラスを作成しました

    _public class DatabaseConfigUtil extends OrmLiteConfigUtil {
        public static final Class<?>[] MODELS = {Character.class, Party.class, Clazz.class};
    
        /**
         * This must be called as a stand alone app by a JRE instance and NOT by Android.
         * It will create an ormlite config file that will make the reflection for annotation and more easier and faster.
         * <p/>
         * Make sure you have pathOfProject/build/classes/debug in your class path when running!
         * <p/>
         * Working class path:
         * <code>-classpath /usr/lib/jvm/Java-7-Oracle/lib/jconsole.jar:/usr/lib/jvm/Java-7-Oracle/lib/dt.jar:/usr/lib/jvm/Java-7-Oracle/lib/sa-jdi.jar:/usr/lib/jvm/Java-7-Oracle/lib/tools.jar:/usr/lib/jvm/Java-7-Oracle/lib/javafx-doclet.jar:/usr/lib/jvm/Java-7-Oracle/lib/ant-javafx.jar:/usr/lib/jvm/Java-7-Oracle/lib/javafx-mx.jar:/home/martin/workspace/idea/Project/MainProject/libs/ormlite-Android-4.45.jar:/home/martin/workspace/idea/Project/MainProject/libs/ormlite-core-4.45.jar:/opt/Android-studio/lib/idea_rt.jar:/home/martin/workspace/idea/Project/MainProject/build/classes/debug:/opt/Android/platforms/Android-16</code>
         *
         * @param args none will be used.
         * @throws Exception
         */
        public static void main(String[] args) throws Exception {
            writeConfigFile(new File("MODULENAME/src/main/res/raw/ormlite_config.txt"), MODELS);
        }
    }
    _
  2. 私のドキュメントで使用したクラスパスに注意してください。これは基本的に、上記のクラスを実行しようとしたときに取得する通常のクラスパスに基づいています(コピーするだけです)。

  3. 実行構成を作成し、コピーしたクラスパスを_VM options_として追加します
  4. 「build/classes/production/MODULENAME」を含むすべてのエントリを削除したことを確認してください
  5. 「build/classes/debug」の完全なパスをクラスパスに追加します
  6. 構成をコンパイルして実行します。

MODELSで定義したクラスが作成されたという出力が表示されます。

補足:Joao Sousaさんは、ORMliteソースコードを変更する必要があると述べました。より簡単な方法があります:writeConfigFile(fileName)メソッドは、新しいGradle構造で壊れているようです。モジュールのルートを調べ始め、_src/main/res/raw_に移動するのではなく、上に移動するため、ファイルオブジェクトをパラメーターとして指定できるもう1つの方法を使用します(上記のコードを参照)。

最後のメモ:1回のプレスで多くのものを作ろうとするため、私は「PROJECTNAME FULL」と呼ばれる2番目の実行構成を作成しました。
最初のmakeはソースをコンパイルしてormlite構成を作成できるようにし、2番目の「make」は新しく作成された構成ファイルが新しくインストールされるビルドに追加されることを確認します。この "FULL"構成は毎回実行する必要はありませんが、モデルクラスを変更したときに少なくとも1回実行する必要があります。

5
WarrenFaith

DBクラスがJavaプロジェクトの外部のAndroidプロジェクトの外部で定義されています。ただし、OrmLiteConfigUtilはormlite-Androidライブラリで定義されています。 、Androidプロジェクト自体にビルドする必要があります。

大丈夫です、グレイは先を計画しています。検索ディレクトリを指定するFile引数を受け入れるwriteConfigFileのオーバーロードがあります。

public class DatabaseConfigUtil extends OrmLiteConfigUtil {
  public static void main(String[] args) throws Exception {
      File conffile = new File("app/src/main/res/raw/ormlite_config.txt");
      File searchdir = new File("../jclip/tdb/src/main/Java/");
      writeConfigFile(conffile, searchdir);
  }
}
1
Autumn

「構成の編集」で「作業ディレクトリ」をプロジェクトの/ src/mainに変更します。

0