¿Cómo puede compilar el proyecto de Android cuando falta la clase importada en SDK?
OK, tal vez es muy simple, pero simplemente no puedo entenderlo ahora mismo.
He importado google muestra proyecto lector de tarjetas en Android Studio 1.5.1, compila en compileSdkVerison 23, funciona en mi móvil.
- ¿Cómo crear JavaDoc usando Android Studio sin R y BuildConfig?
- Android Studio: EditText editable es obsoleto Cómo utilizar inputType
- No se puede resolver el símbolo: 'HttpClient', incluso después de agregar la dependencia
- Android Studio - Asignación de varios valores a ManifestPlaceholders en Gradle
- Error: Se requiere que Jack admita características de lenguaje java 8
Entonces caminé a través del SDK mientras llegaba al código fuente a android.nfc.tech.BasicTagTechnology
, encontré TransceiveResult
dentro android.nfc.tech.BasicTagTechnology#transceive
no podía ser resuelto entonces encontré la clase TransceiveResult
falta en mi D:\Android\sdk\platforms\android-23\android.jar
, pero se presenta en el código fuente de Android aquí D:\Android\sdk\sources\android-23\android\nfc\TransceiveResult.java
entonces me di cuenta de que podría estar oculto Público, no exportado, en realidad es
/** * Class used to pipe transceive result from the NFC service. * * @hide */ public final class TransceiveResult implements Parcelable
Luego he hecho algunas cosas al azar, después de haber sincronizado el proyecto, limpio y reconstruir, invalidar cachés / reiniciado, todavía no es capaz de resolver TransceiveResult
por cierto, me pregunto ya que el símbolo se ha perdido en SDK, ¿cómo puede el proyecto Compilar suavemente
EDIT para finalmente Aha
Llamamos android.nfc.tech.BasicTagTechnology#transceive
en nuestro código en lugar de TransceiveResult
, en la compilación de tiempo que no hay necesidad de resolver TransceiveResult
, sólo tenemos que resolver android.nfc.tech.BasicTagTechnology#transceive
que se hace referencia en nuestro código , Yo estaba perdido en ese momento.
- Restablecer gradle predeterminado y plugin para android studio para estar al día al crear nuevos proyectos?
- Android Studio: cómo generar apk firmado usando Gradle?
- La casilla de verificación de Android marcada en una actividad y luego el botón aparece en otra actividad
- Android Studio 1.2 Emulator se ajusta a un extremo de la pantalla y no se mueve
- Haga clic automáticamente en Button si EditText es correcto
- Biblioteca de edificio con gradle que está en un directorio de hermanos
- Prueba de vibración de Android emulador?
- Error de ejecución para la tarea ': packageAllDebugClassesForMultiDex'
@ Oculta significa que no está incluido en los documentos como se describe aquí y también se despoja de las clases dentro de su android.jar que se utiliza en la compilación. Sin embargo, estos están disponibles en tiempo de ejecución.
Actualización: para aclarar en su IDE cuando se encuentra en sus clases de SDK, es posible que vea referencias a miembros ocultos que no puede resolver. Esto está bien y seguirá compilando siempre y cuando estén en las clases SDK no en su código.
Si desea utilizar esas clases / métodos / campos ocultos tiene 2 opciones principales:
1) buscar una versión completa de android-framework.jar y ser capaz de compilar. Esto sin embargo tiene un inconveniente que el código compilado probablemente no se ejecutará en otras versiones de Android como la clase o el método no puede ser incluso allí. Y también BasicTagTechnology por ejemplo es en realidad el paquete privado por lo que no puede acceder a él como que de todos modos
2) utilizar la reflexión:
Class tr = Class.forName("android.nfc.TransceiveResult"); Constructor constructor = tr.getConstructor(new Class[]{int.class, byte[].class}); Object trObj = constructor.newInstance(1, new byte[]{1,2});
Esta es una mejor opción en el sentido de que es más flexible y puede comprobar si la clase / método existe para init / call them, catch exception etc.
- Reaccione la caja nativa de Flex no usando todo el espacio disponible
- Android set divider padding para la pantalla de preferencias