studio mejores librerias library generar create agregar java android android-activity aar

mejores - La clase de actividad no se puede encontrar en el archivo AAR java.lang.NoClassDefFoundError



librerias android studio (7)

La causa del problema es que se llama a la clase ScannerViewActivity dentro de uno de sus AAR como una dependencia como:

apply plugin: ''com.android.library'' android{...} dependencies { compile ''com.me.scanner:otherscanner@aar'' //library which contains ScannerViewActivity }

pero cuando usa un aar (transitive no agregará estas dependencias aar!), tiene que agregar la otra dependencia como:

dependencies { ... compile (''com.me.app:scanner@aar'')// remove{ transitive = true; } compile (''com.me.scanner:otherscanner@aar'') ... }

He creado una biblioteca de Android, contiene una clase de actividad que utiliza para abrir la intención de la cámara, la biblioteca funciona a excepción de la parte que invoca la actividad para aparecer en la pantalla y la aplicación se bloquea lanzando los siguientes errores

Suppressed: java.lang.ClassNotFoundException: com.me.scanner.ScannerViewActivity at java.lang.Class.classForName(Native Method) at java.lang.BootClassLoader.findClass(ClassLoader.java:781) at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) at java.lang.ClassLoader.loadClass(ClassLoader.java:504) ... 14 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available

A continuación está mi archivo build.gradle de otro proyecto que usará esta biblioteca

repositories { flatDir { dirs ''libs'' } } dependencies { compile fileTree(dir: ''libs'', include: [''*.jar'']) androidTestCompile(''com.android.support.test.espresso:espresso-core:2.2.2'', { exclude group: ''com.android.support'', module: ''support-annotations'' }) compile ''com.android.support:appcompat-v7:25.3.0'' compile ''com.android.support.constraint:constraint-layout:1.0.2'' compile ''com.me.app:gpio_lib@aar'' compile (''com.me.app:scanner@aar''){ transitive = true; } testCompile ''junit:junit:4.12'' }

Tenga en cuenta:

  • Esta biblioteca funciona perfectamente como proyecto de módulo,

    compile project('':scannercontrol'')

    pero no al usarlo como aar en el proyecto

  • Lo he intentado con y sin { transitive = true; } { transitive = true; } , sin cambios

  • He cambiado el nombre de mi archivo aar a scanner.aar
  • He tomado el archivo /[library-project]/build/outputs/aar/scanner-release.aar

Actualización1 - 2017-09-14

La actividad ScannerViewActivity es parte de mi biblioteca, así es como se llama desde una de las clases de la biblioteca

Intent scannerView = new Intent(); scannerView.putExtra(MESSAGE_RECEIVER, new MessageReceiver()); scannerView.setClass(context, ScannerViewActivity.class); scannerView.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(scannerView);

este context es la instancia de android.app.Application y no de ninguna Activity

Actualización2 - 2017-09-14

Afortunadamente después de roaming 2 días en todo google me encontré con la respuesta de la pregunta Class no encontrada en aar . He agregado las dependencias de la biblioteca al proyecto y puedo ejecutarlo con aar pero esta no es la solución de mi problema,

A continuación está el flujo y el problema que estoy enfrentando actualmente

  • Estoy desarrollando una versión de sandbox de una biblioteca que se comunica con un hardware de escáner de código de barras específico, ya que el desarrollador no necesariamente tiene el hardware, usará la versión de sandbox de la biblioteca que permitirá al desarrollador usar la cámara de su dispositivo como un código de barras escáner,

  • Queremos que el desarrollador extraiga los archivos AAR scanner.aar y scanner-sandbox.aar del SDK proporcionado y utilice cualquiera de ellos

  • No queremos que el desarrollador agregue una dependencia adicional a su archivo .gradle si quiere ejecutar la versión de sandbox de la biblioteca,

  • A continuación se muestra la dependencia que se utiliza para simular la cámara del dispositivo como un escáner de código de barras

    compile ''me.dm7.barcodescanner:zxing:1.9.8''

La pregunta actualizada es

¿Cuál es la forma posible de distribuir un archivo aar sin publicarlo en ningún repositorio como el repositorio maven y todas las dependencias de la biblioteca instalada cuando el desarrollador sincroniza el archivo .gradle


Aunque no conozco la causa raíz, puedes probar esta solución: en tu proyecto de aplicación, define una actividad que se extiende desde ScannerViewActivity, y declara en AndroidManifest.xml.

class MyScannerViewActivity extends ScannerViewActivity { // do nothing or something you want }

Entonces debería iniciar MyScannerViewActivity en lugar de ScannerViewActivity por intención.


zeeshan

Me he enfrentado al mismo problema que hice mucha investigación y lo arreglé con suerte, eso te ayuda

Creando un archivo .aar para un proyecto:

  1. Para un módulo de biblioteca, Android Studio crea automáticamente el archivo .aar. Para un proyecto con cualquier archivo de recursos o con las bibliotecas, el archivo .aar se puede generar como se menciona en los próximos pasos.
  2. Verifica el complemento. Debería estar de la siguiente manera, cambiar a la biblioteca si está en la aplicación, aplicar el complemento: ''com.android.library''
  3. Abra la barra de gradle de borde derecha abierta y vaya a "su proyecto" -> Tareas-> construir y luego haga doble clic en assembleRelease. Al crear el proyecto, encontrará los dos archivos .aar (app-debug.aar y app-release.aar) dentro del directorio app / build / outputs / aar /. Usando el archivo .aar en su proyecto:
  4. Obtenga el archivo "app-release.aar" y péguelo en la carpeta libs de su proyecto. Si la carpeta libs no está presente, cree un directorio llamado "libs" dentro del directorio de la aplicación.

  5. Agregue lo siguiente al archivo gradle de la aplicación, repositorios {flatDir {dirs ''libs''}} dependencias {compile (name: ''app-release'', ext: ''aar'')}

  6. En sincronización, su proyecto está listo para usar los archivos de la biblioteca. Nota: las dependencias .aar gradle deben agregarse manualmente en la gradle de su aplicación de proyecto. Ejemplo: a continuación

Suposición de errores: System.err: java.lang.NoClassDefFoundError:

Solución:

Las dependencias .aar gradle deben agregarse manualmente en la gradle de su aplicación de proyecto


¿Puedes intentar lo de abajo?

  1. Deshabilite la ejecución instantánea y limpie la construcción de su AAR.
  2. Implemente de nuevo, donde sea que esté alojando su AAR.
  3. Pruebe la aplicación nuevamente con AAR como dependencia.

Las ejecuciones instantáneas a veces causan problemas debido al almacenamiento en caché.

Editar: para agregar AAR local. Puedes seguir la respuesta como se menciona aquí


Hay 3 formas de distribuir tu biblioteca:

  1. Creando una biblioteca maven local luego distribuye el aar generado.
    Puede crear un aar local utilizando el complemento Maven de Gradle para Android . Como hacerlo:

    a. Agregue la ruta de clases del complemento a root build.gradle :

    buildscript { repositories { jcenter() mavenCentral() } dependencies { classpath ''com.android.tools.build:gradle:2.2.3'' classpath ''com.github.dcendents:android-maven-gradle-plugin:1.5'' } } allprojects { repositories { jcenter() } }

    segundo. Establezca el complemento maven y agregue el nombre de grupo y versión a la biblioteca build.gradle:

    apply plugin: ''com.android.library'' apply plugin: ''com.github.dcendents.android-maven'' group = ''com.your.packagename'' version = ''1.0.0'' ext.versionCode = 1000 android { compileSdkVersion 25 buildToolsVersion "25.0.3" defaultConfig { minSdkVersion 9 targetSdkVersion 25 versionCode versionCode versionName version } buildTypes { ... } } dependencies { ... }

    do. Establecer el artifactId se establece en settings.gradle:

    rootProject.name = ''yourlibraryname''

    re. Crea e instala la biblioteca a tu experto local.
    Puede ejecutar ./gradlew install en la carpeta del proyecto o usar

    Gradle -> YourLibrary -> Other -> Instalar desde Android Studio (en el lado derecho de Android Studio)

    mi. Use la biblioteca instalada directamente en su proyecto.
    Puede usar la biblioteca agregando mavenLocal() a su raíz build.gradle

    allprojects { repositories { jcenter() mavenLocal() // for local maven. } }

    A continuación, agregue la dependencia al proyecto:

    compile ''com.your.packagename:modulename:1.0.0''

    O puede copiar el .aar generado del camino maven local. En Linux, puede obtenerlo desde /your/userpath/.m2/repository/ o ~/.m2/repository/

  2. Utilice la misma técnica en el número 1, pero haga que la ruta del experto local para cada computadora reveladora apunte al ~/.m2/repository/ central.

  3. Use un repositorio maven privado. Puede usar JFrog Artifactory oss o Nexus Repository OSS


La respuesta para su "Update2 - 2017-09-14" - simplemente puede construir un archivo aar fat. que contendrá todas las dependencias, una cosa que puede tener que manejar es el conflicto en las dependencias que en algún momento puede crear un problema. también el tamaño de la grasa aar puede ser enorme. así que intentalo.


Prueba esto,

Deshabilitar la ejecución instantánea

Archivo -> Configuración -> Compilación, Ejecución, Despliegue -> Ejecución instantánea

si esto no funciona, házmelo saber.