una - Error al compilar la aplicación de Android(consulte ActionBarSherlock y ViewPagerTabs) con Ant
se cayo twitter hoy 2018 (3)
Tengo una aplicación de Android que usa ActionBarSherlock y ViewPagerTabs. Uso Eclipse para escribirlo y compilarlo, y funciona bien hasta que intento construirlo con Ant. Esto es lo que hice:
- vaya a la carpeta ActionBarSherlock, ejecute "android update lib-project --path".
- vaya a la carpeta ViewPagerTabs, ejecute "android update lib-project --path". también
- vaya a la carpeta de la aplicación, ejecute "android update project --path".
- Ejecutar "y depurar" en la carpeta de la aplicación, y obtuve los siguientes errores:
:
[javac] C:/Android/TestApp/src/com/test/App/TestActivity.java:46: cannot find symbol
[javac] symbol : method getSupportActionBar()
[javac] location: class com.test.App.TestActivity
[javac] final ActionBar ab = getSupportActionBar();
[javac] ^
Entonces pregunta NO. 1: Tengo referencias de biblioteca correctas en project.properties de la aplicación, y ActionBarSherlock & ViewPagerTabs podrían construirse con éxito, ¿por qué sigo recibiendo estos errores?
Hay una solución para este problema: copie todo classes.jar debajo de la carpeta bin de la biblioteca en la carpeta libs de la aplicación, y ejecute "depuración de hormigas" nuevamente. Pero necesito eliminar estos archivos .jar en la carpeta libs de la aplicación después de que todos los archivos .java de la aplicación puedan compilarse.
Ejecutando "depuración de hormigas" de nuevo después de esto, obtendré los siguientes errores:
[dx] processing archive C:/Android/ActionBarSherlock/library/bin/classes.jar...
[dx] ignored resource META-INF/MANIFEST.MF
[dx] processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoStubImpl.class...
[dx] processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl.class...
[dx] processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.class...
[dx] processing android/support/v4/accessibilityservice/AccessibilityServiceInfoCompatIcs.class...
[dx] processing android/support/v4/app/ActionBar$LayoutParams.class...
[dx] processing android/support/v4/app/ActionBar$OnMenuVisibilityListener.class...
[dx] processing android/support/v4/app/ActionBar$OnNavigationListener.class...
[dx] processing android/support/v4/app/ActionBar$Tab.class...
[dx] processing android/support/v4/app/ActionBar$TabListener.class...
[dx] processing android/support/v4/app/ActionBar.class...
[dx] processing android/support/v4/app/ActivityCompatHoneycomb.class...
[dx]
[dx] UNEXPECTED TOP-LEVEL EXCEPTION:
[dx] java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActivityCompatHoneycomb;
[dx] at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123)
[dx] at com.android.dx.dex.file.DexFile.add(DexFile.java:163)
[dx] at com.android.dx.command.dexer.Main.processClass(Main.java:486)
[dx] at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
[dx] at com.android.dx.command.dexer.Main.access$400(Main.java:67)
[dx] at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)
[dx] at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
[dx] at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
[dx] at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
[dx] at com.android.dx.command.dexer.Main.processOne(Main.java:418)
[dx] at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
[dx] at com.android.dx.command.dexer.Main.run(Main.java:206)
[dx] at com.android.dx.command.dexer.Main.main(Main.java:174)
[dx] at com.android.dx.command.Main.main(Main.java:95)
[dx] 1 error; aborting
Mi pregunta NO.2 es: ¿cómo puedo solucionar este problema?
¡Gracias!
Cuando actualiza lib-project, está actualizando el proyecto para que se compile como una biblioteca. Hay un paso separado para actualizar su proyecto principal para que vea la biblioteca que requiere.
Para cada proyecto de biblioteca que vas a usar, ejecuta
Proyecto de actualización de android --library ../pathToTheLibrary
Finalmente lo resuelvo yo mismo. Encuentro que hay un android-support-v4.jar en la carpeta libs de ViewPagerTabs. La solución es - borrar este android-support-v4.jar, luego hacer que ViewPagerTabs dependa de ActionBarSherlock (porque ActionBarSherlock realmente tiene una copia del Support Package).
Espero que sea útil para las personas que quieran usar ActionBarSherlock & ViewPagerTabs en una aplicación y usar Ant para crear su aplicación. Buena suerte.
Usted indicó que es porque ambas bibliotecas tienen android-support-v4.jar . Ver @ porter-liu answer para compilaciones no maven.
Para las personas que usan maven, configure su dependencia de ViewPager
como:
<dependency>
<groupId>com.viewpagerindicator</groupId>
<artifactId>library</artifactId>
<version>2.4.1</version>
<type>apklib</type>
<exclusions>
<exclusion>
<groupId>com.google.android</groupId>
<artifactId>support-v4</artifactId>
</exclusion>
</exclusions>
</dependency>
La etiqueta de exclusion
detiene la importación doble solucionando el problema.