En la versión más reciente de ADT (r17) se agregó una constante generada BuildConfig.DEBUG
que se establece de acuerdo con el tipo de compilación. El problema que tengo es que nunca se establece en falso, esperaba que cambiara al hacer "Herramientas de Android -> Exportar paquete de aplicación firmado", pero no es así para mí.
Entonces, ¿cómo cambio el tipo de construcción?
Se agregó una función que le permite ejecutar código solo en modo de depuración. Las compilaciones ahora generan una clase llamada BuildConfig que contiene una constante DEBUG que se establece automáticamente de acuerdo con su tipo de compilación. Puede verificar la constante (BuildConfig.DEBUG) en su código para ejecutar funciones de solo depuración
Respuestas:
Actualmente, puede obtener el comportamiento correcto desactivando "Construir automáticamente", limpiando el proyecto y luego exportando a través de "Herramientas de Android -> Exportar paquete de aplicación firmado". Cuando ejecuta la aplicación
BuildConfig.DEBUG
debe ser falsa.fuente
Con Eclipse , siempre desactivo la opción "Construir automáticamente" antes de exportar la aplicación en el lanzamiento. Luego limpio el proyecto y exporto. De lo contrario, comienza a compilar en modo de depuración y, a continuación, el valor de BuildConfig.DEBUG puede ser incorrecto.
Con Android Studio , simplemente agrego mi propia variable personalizada en build.gradle:
Cuando construyo el proyecto, BuildConfig.java se genera de la siguiente manera:
Luego, en mi código puedo usar:
Recomiendo limpiar después de cambiar la versión de depuración / liberación.
fuente
No funciona correctamente:
Problema 27940 : BuildConfig.DEBUG es "true" para el paquete de aplicación exportado
Es decepcionante que a veces publiquen funciones con errores.
fuente
Funciona, pero tenga en cuenta que el archivo de código nunca cambia, incluso al exportar el archivo firmado. El proceso de exportación cambia el valor de esta variable a falso, lo que podría darle la falsa impresión de que no está funcionando. Probé esto con declaraciones de registro como
Al realizar las pruebas, mis declaraciones de registro ya no producen ningún resultado.
fuente
Compruebe si
imports
, a veces, BuildConfig se importa de cualquier clase de biblioteca sin querer. Por ejemplo:En este caso, BuildConfig.DEBUG siempre devolverá falso ;
En este caso, BuildConfig.DEBUG devolverá su variante de compilación real .
ps Solo copio este de mi respuesta aquí: BuildConfig.DEBUG siempre es falso al construir proyectos de biblioteca con gradle
fuente
android.support.compat
. Supongo que esa es otra razón para definir su propio campo con un nombre diferente.De Preparándose para el lanzamiento :
Más información sigue el enlace.
fuente
La solucion para mi:
Es trabajo en r20
fuente
Me gustaría proponer una solución alternativa simple si usa proguard durante la exportación de APK.
Proguard proporciona una forma de eliminar llamadas a funciones específicas en el modo de liberación. Cualquier llamada para depurar registros se puede eliminar con la siguiente configuración en
proguard-project.txt
.Y la optimización se instala
project.properties
.Con esto, no necesita preocuparse por ningún cálculo de cadena innecesario que pase al registro de depuración al que señaló @Jeremyfa. Los cálculos simplemente se eliminan en la versión de versión.
Entonces, la solución para BuildConfig.DEBUG usa la misma característica de proguard como sigue.
Y después de instalarse
proguard-project.txt
.Preferiría usar esto a deshabilitar la
Build Automatically
opción, porque esto no depende de la configuración IDE individual del constructor, sino que se mantiene como un archivo comprometido que se comparte entre los desarrolladores.fuente
No funciona correctamente, según tengo entendido ( problema de Android 22241 )
Tuve algunos problemas en un proyecto (trabajando con Eclipse), esa constante no estaba configurada como verdadera al exportar un APK firmado de mi proyecto :(
Aunque me encantaría escuchar que funciona
fuente
una buena forma es crear tu propia clase:
fuente
He visto un comportamiento extraño que tiene que ver con cuando los valores en BuildConfig se establecen en sus valores finales. Esto puede tener algo que ver con su problema.
La explicación simple es que los valores predeterminados se establecen inicialmente antes de que se ejecute Proguard, luego, después de que se ejecute Proguard, el archivo BuildConfig se regenera con los valores adecuados. Sin embargo, Proguard ya ha optimizado su código en este punto y tiene problemas.
Aquí hay un error que creé contra Gradle. https://code.google.com/p/android/issues/detail?id=182449
fuente