Comprobación de las infracciones de android: minSdkVersion automáticamente
Estoy trabajando en una aplicación para Android y me preocupa que hayamos introducido un código que utiliza la funcionalidad de los niveles de API más tarde que su minSdkVersion
.
Me gustaría saber si hay alguna forma de detectar algunas de estas violaciones automáticamente.
- Error de compilación después de actualizar las herramientas para Android L
- ¿Cómo evitar la pantalla en negro mientras se invoca otra actividad en android?
- Configuración de "Aplicaciones protegidas" en los teléfonos Huawei y cómo manejarlo
- Hay 2 archivos de AndroidManifest.xml en mi aplicación Android Eclipse Developer, ¿cuál debo editar?
- Diferentes versiones de Android para diferentes entornos
En el archivo AndroidManifest.xml
esta aplicación, especifica:
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
Ndk-build es parece estar dándome una advertencia sobre esto (o es esta advertencia por otra razón?):
Android NDK: Found stable platform levels: 14 3 4 5 8 9 Android NDK: Found max platform level: 14 Android NDK: Parsing ./jni/Application.mk Android NDK: Found APP_PLATFORM=android-17 in ./project.properties Android NDK: Adjusting APP_PLATFORM android-17 to android-14 and enabling -fPIE /android-ndk/build/core/add-application.mk:128: Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
Aunque me doy cuenta de que cualquier herramienta no puede ser 100% exacta debido al envío de tiempo de ejecución, que no sea:
- Una auditoría completa del código fuente, o
- Una prueba completa de todas las rutas de código en un dispositivo que ejecuta minSdkVersion (en este caso, android-8 = 2.2 = Froyo)
… ¿hay una herramienta de pelusa, un cambio de configuración de construcción, o cualquier otra cosa que pueda utilizar para identificar al menos las violaciones más obvias / flagrantes?
Si no existe tal cosa, ¿hay una lista completa de API o algo que hará que una auditoría sea más fácil?
- Especificación de un filtro de intenciones SEND (compartido) para un servicio
- Tipo de error 3: Clase de actividad {...} no existe
- Tema de la aplicación de Android - diferencia al utilizar el tema del archivo de estilo xml
- ¿Cómo puedo elegir dinámicamente qué actividad iniciar al abrir una aplicación
- Android: marcadores de posición manifiestos para diferentes tipos de compilación
- Cómo personalizar el ancho y la altura cuando se muestra una actividad como un cuadro de diálogo
- ¿Cómo especificar qué actividad se inicia al iniciar la aplicación?
- ¿Cómo obtengo iconos múltiples para lanzar diferentes actividades en una sola aplicación?
Parece que la herramienta de lint
androide hace algunas de estas comprobaciones (gracias @CommonsWare en los comentarios anteriores):
$ which lint /android-sdk-macosx/tools/lint $ lint myProjectDir --check NewApi Scanning .: ..... No issues found.
Parece que también se puede ejecutar esto como ant lint
como SDK Tools Revisión 21.
Lint tiene varios formatos de salida agradable, parece! Integración con Jenkins a través de --xml
, etc …
Además, en ant.properties
, puede configurar algo como esto para que algunas comprobaciones de tipo pelusa realizadas por javac
:
java.compilerargs=-Xlint:all
No está claro si javac denuncia incidentes como lint –check NewApi, pero sí informa de las entradas [deprecation]
al menos. (Si encuentra una referencia para lo que javac informa, por favor, envíe un comentario.)
Para la posteridad, he aquí la descripción de Newint:
$ lint --show NewApi NewApi ------ Summary: Finds API accesses to APIs that are not supported in all targeted API versions Priority: 6 / 10 Severity: Error Category: Correctness This check scans through all the Android API calls in the application and warns about any calls that are not available on all versions targeted by this application (according to its minimum SDK attribute in the manifest). If you really want to use this API and don't need to support older devices just set the minSdkVersion in your AndroidManifest.xml file. If your code is deliberately accessing newer APIs, and you have ensured (eg with conditional execution) that this code will only ever be called on a supported platform, then you can annotate your class or method with the @TargetApi annotation specifying the local minimum SDK to apply, such as @TargetApi(11), such that this check considers 11 rather than your manifest file's minimum SDK as the required API level.
Y aquí hay algunos enlaces útiles con respecto a lint
:
La solución más fácil que encontré fue añadir esta línea al archivo Application.mk
Reemplazar APP_MIN_PLATFORM_LEVEL = 99
- Actualización masiva de más de 500 contactos
- Juego Android basado en turnos con Google Play Game Services e IntentService