Configuración de ejecución de Android Studio para la generación de configuración de ORMLite

Estoy usando Android Studio y quiero usar el framework ORMLite. ORMLite para Android tiene un mecanismo para crear DAO a través de un archivo de configuración de tabla .

¿Cómo configurar la configuración de ejecución adicional en Android Studio para generar esta configuración?

Me las arreglé para hacerlo, pero fue un poco complicado.

Tengo una clase llamada DatabaseConfigUtil que extiende OrmLiteConfigUtil, que he creado simplemente siguiendo el tutorial oficial de ormlite, así que supongo que hiciste lo mismo y también tienes esa clase. Tenga en cuenta que debe pasar la ruta completa al archivo de configuración, en lugar de sólo el nombre del archivo. No obstante, aquí está:

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); } } 

Esta es la clase que queremos ejecutar para crear el archivo ormlite_config.txt.

En el panel de navegación del proyecto de Android Studio, haga clic con el botón derecho en DatabaseConfigUtil.java y seleccione "Ejecutar" (la opción con la flecha verde). Si no tiene una configuración de ejecución creada, creará una para usted.

Ahora, simplemente edite la configuración

Introduzca aquí la descripción de la imagen

En la sección "Antes del lanzamiento", quite la marca. Esto no es problemático si en la carpeta en bruto ya tiene el archivo ormlite_config.txt, pero si no lo hace, al ejecutar la clase, el proyecto se compilará porque fallará porque el archivo ormlite_config.txt no existe.

Introduzca aquí la descripción de la imagen

Ahora vuelva a ejecutar el proyecto.

Todo debería ir bien ahora.

Aclamaciones

Unesdoc.unesco.org unesdoc.unesco.org ——–

ACTUALIZAR:

Recientemente tuve que trabajar con ORMLite de nuevo y decidí que esta solución podría ser automatizada con un complemento gradle. Antes de crear mi propio, como el desarrollador perezoso que soy, decidí comprobar si alguien había intentado lo mismo antes. Afortunadamente, @snicolas hizo eso y puede encontrar su plugin aquí . Lo he probado, y funciona razonablemente bien. Crea una tarea llamada createORMLiteConfigFile*Variant* que se puede ejecutar para generar el archivo.

Recoger todos los comentarios en @ Joao respuesta me dio esta solución de trabajo:

1) Editar configuración para su generador de archivos de configuración DB:

Editar la configuración

2) Configure el Working directory como $MODULE_DIR$/src/main .

3) En Before launch , reemplace Make con Make, no error check

directorio de trabajo

Cuando tiene estos pasos en su lugar puede especificar sólo el nombre de archivo en su clase 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); } 

Tengo el mismo problema que OP obtuvo para ClassNotFoundException. La solución para ello es cambiar temporalmente el código para que el compilador compile el proyecto.

Tuve que eliminar el valor R.raw.ormlite_config que usé en la clase DatabaseHelper, que estoy pasando a super ().

 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); } } 

Mi clase DBHelper que extiende las extensiones OrmLiteSqliteOpenHelper no necesita usar la carpeta raw todavía. Esto ayuda a compilar el proyecto con éxito.

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

Introduzca aquí la descripción de la imagen

  1. Compilado el proyecto.
  2. Cambie el directorio de trabajo a la carpeta app / src / main.
  3. Cambió el JRE a JDK1.8
  4. Quite la marca de la sección Antes de lanzar.
  5. correr

Ok me topé con el mismo ClassNotFoundException como el OP. He aquí cómo lo solucioné:

Nota corta: Tengo un proyecto de biblioteca y un proyecto principal y ambos están configurados con Gradle, eso podría ser una gran diferencia ya que la solución previamente llamada no funcionó para mi configuración.

Así que mis pasos para hacer:

  1. He creado la clase 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. Tenga en cuenta la ruta de clase que usé en mi documentación: Se basa básicamente en el classpath normal que se obtiene cuando se intenta ejecutar la clase anterior (sólo copiarlo)

  3. Cree una configuración de ejecución y añada la ruta de clase que acaba de copiar como VM options
  4. Asegúrese de haber eliminado todas las entradas que contengan "build / classes / production / MODULENAME"
  5. Agregue la ruta completa de su "build / classes / debug" al classpath
  6. Compile y ejecute la configuración.

Debería ver la salida que se crean las clases que definió en MODELS .

Nota: Joao Sousa dijo que debes cambiar el código fuente de ORMlite. Hay un método más fácil: El método writeConfigFile(fileName) parece estar roto en la nueva estructura de Gradle, ya que comienza a buscar en la raíz del módulo y sube en lugar de ir a src/main/res/raw así que necesitaba usar El otro donde podría dar un objeto del archivo como parámetro (véase el código anterior).

Nota final: Como intento hacer un montón de cosas en una prensa, he creado una segunda configuración de ejecución que se llama "PROJECTNAME FULL" que hará una "make" que ejecuta la configuración de ejecución de ormlite y finalmente un segundo "MAKE".
La primera compila las fuentes para que se pueda crear la configuración de ormlite y la segunda "make" asegura que el nuevo archivo de configuración creado se agrega a la nueva compilación que se instalará entonces. Esta configuración "FULL" no necesita ejecutarse cada vez pero al menos una vez cuando cambió sus clases de modelo.

Tuve problemas con esto porque mis clases de DB se definieron en un proyecto de Java externo a mi proyecto android. Pero el OrmLiteConfigUtil se define en la biblioteca ormlite-android, y debe ser construido en el propio proyecto android.

Está bien, Gray planea por delante. Hay una sobrecarga de writeConfigFile que acepta argumentos de archivo que especifican el directorio de búsqueda.

 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); } } 

Cambie el "directorio de trabajo" a / src / principal del proyecto en "Editar configuraciones"

  • ORMLite - CallBatchTasks () individualmente o una vez para todas las actualizaciones?
  • ¿Cómo puedo mantener mi base de datos en una tarjeta SD y utilizar ORMLite?
  • ¿Es bueno tener un DatabaseManager con todas las funciones de todos los objetos del modelo?
  • Objeto de almacenamiento Robospice que extiende ArrayList en la base de datos a través de Ormlite
  • Convertir ForeignCollection en ArrayList - ORMLite, Gson y Android
  • CREOOrUpdate de ORMLite parece lento - ¿cuál es la velocidad normal?
  • Disminuir la verbosidad del registro interno de ORMlite o deshabilitarla
  • Orden insensible al caso con ormlite y sqlite en android
  • Ofuscación de clases de modelo ORMLite con Proguard
  • ORMLite - Consulta de campo externo
  • Android: niveles de aislamiento de transacciones SQLite (ORMLite)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.