cadenas personalizadas para debug buildType
Tengo una aplicación para Android y quiero cambiar la etiqueta de la aplicación para la depuración y otros buildTypes . ¡No tengo sabores!
Aquí está la configuración que creo que parece que debería funcionar:
- Cómo quitar comentarios en archivos XML sin procesar con Gradle cuando el archivo se empaqueta
- Después de una nueva instalación de Android Studio recibí un error en Gradle
- ¿Es posible definir un recurso de array de cadenas Android en Gradle?
- Android: cómo establecer un valor de gradle de un enum conocido
- Error Gradle: configuración declara la dependencia que no está declarada
-src |-debug |-res |-values |-strings.xml |-main |-res |-values |-strings.xml |-java [...]
No tengo fuentes personalizadas sólo un debug buildType:
buildTypes { debug { applicationIdSuffix ".debug" } }
así que pensé
sourceSets.debug.res.srcDirs = ['src/debug/res']
haría el truco. Pero no lo hace. ¿Algunas ideas?
Cómo cambiar el nombre de la aplicación por tipo de generación de Gradle ya no funciona …
- Cómo personalizar Jacoco para las pruebas de Espresso en Android
- Android Studio: ¿Cómo crear un archivo build.gradle para usarlo en Jenkins?
- Gradle Android No se pudo encontrar el método testPackage ()
- Cómo utilizar gradle-android-test-plugin
- Android Studio cómo habilitar --core-library flag?
- Construya androide con gradle, substituya la cadena cada sabor del producto
- Copiar archivos antes de resolver dependencias para crear una aplicación de Android
- Cómo configurar gradle home mientras importa proyectos existentes en Android studio
Encontré otra solución dulce a esto, usando marcadores de posición manifiestos:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application android:label="${applicationLabel}"> <activity android:label="${applicationLabel}"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
y en su archivo gradle:
android { defaultConfig { manifestPlaceholders = [ applicationLabel:"@string/app_name"] } buildTypes { debug { applicationIdSuffix ".debug" manifestPlaceholders = [ applicationLabel:"MyApp Debug"] } } }
buildTypes { release { resValue 'string', 'APP_NAME', '"My App Release"' } debug { resValue 'string', 'APP_NAME', '"My App Debug"' } }
valor \ strings.xml
<string name = "app_name"> @ string / APP_NAME </ string>
y use app_name en todas partes
Tienes que usar
|-debug |-res |-values |-strings.xml
En tu imagen tienes debug / res / strings.xml
También usted doens't lo necesita (porque es el estándar, pero el problema no está aquí).
sourceSets.debug.res.srcDirs = ['src/debug/res']
Olvídate de los archivos string.xml. Todos se pueden configurar fácilmente en build.gradle.
En primer lugar, debe mantener el puntero de cadena "app_name" en el archivo AndroidManifest y eliminar todas las instancias de "app_name" en los archivos de recursos de la cadena:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application android:label="@string/app_name"> <activity android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
En segundo lugar, el valor del recurso de @ string / app_name no está definido actualmente. Así que debemos aplicar su definición por defecto en build.gradle:
defaultConfig { applicationId "com.example.myapp" minSdkVersion 14 targetSdkVersion 22 versionCode 123423432 versionName "1.0.0" resValue 'string', 'app_name', '"My app label"' }
Actualmente, app_name se define para todos los tipos de compilación. Al suponer que desea cambiar la etiqueta de la aplicación para los tipos de construcción, cada tipo de construcción debe definirse con un valor de cadena en la misma rama build.gradle:
buildTypes { release { resValue 'string', 'app_name', '"My app label Release"' } debug { resValue 'string', 'app_name', '"My app label Debug"' } }
Dado que este valor de recurso se establece de forma programática, también necesitamos agregar un cierto descontexto de traducciones de lenguajes en caso de una compilación de Release :
lintOptions { disable 'MissingTranslation' }
En caso de que quiera cambiarlo en consecuencia con un conjunto de Flavors definidos (dev, qua o prd) agregue las definiciones resValues en productFlavours en lugar de buildTypes :
productFlavors { dev { applicationId "com.example.myapp.dev" resValue 'string', 'app_name', '"My app label Dev"' } qua { applicationId "com.example.myapp.qua" resValue 'string', 'app_name', '"My app label Qua"' } prd { applicationId "com.example.myapp.prd" resValue 'string', 'app_name', '"My app label Prd"' } }
Puede crear una cadena en gradle que estará disponible en xml también:
buildTypes { debug { buildConfigField "String", "app_name", "AppDebug" } release { buildConfigField "String", "app_name", "AppRelease" }
Y luego usarlo en xml:
android:label="@string/app_name"
Sólo asegúrese de que app_name
no app_name
especificado en strings.xml
.
Prueba esto.
buildTypes { debug { applicationIdSuffix ".debug" } sourceSets.debug.resources.srcDirs = ['src/debug/res'] }
¿Se ha acordado de deshacerse de la lista de directorios dentro de su aplicación build.gradle?
sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDir 'src' // res.srcDir 'res' <--- This line should be removed assets.srcDir 'assets'
Sé que esta es una vieja pregunta, pero he tenido el mismo problema y lo solucioné.
Debe actualizar estos códigos si tiene uno en su build.gradle
para su aplicación.
debug.setRoot('build-types/debug') release.setRoot('build-types/release')
Estos códigos generan automáticamente su AppName.iml
y establecen el directorio de depuración y liberación predeterminado en /build-types/debug/res
, que es diferente de src/debug/res
.