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.

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?

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

  • Cómo agregar entradas personalizadas a Android generado MANIFEST.MF
  • Obtener instancia de la actividad android.intent.category.LAUNCHER actual
  • Diferentes resultados en Android 4.1
  • Java.lang.ClassNotFoundException en loader dalvik.system.PathClassLoader en el lanzamiento de la aplicación
  • Android EditarTexto Fondo transparente
  • Botón de captura de medios en Android> = 4.0 (funciona en 2.3)
  • Android cómo crear un esquema de URL personalizado con el formato dado myapp: // http: //
  • Importación de Dirigible Urbano en Android Studio da problemas de compilación?
  • Soporte múltiple de apk para Android TV y teléfono
  • El paquete de aplicaciones 'AndroidManifest.xml' debe tener un mínimo de 2 segmentos
  • ¿Qué es <permission-tree> en android manifest? ¿Cómo hacer uso de esto?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.