Gradle poco conocimiento para los desarrolladores de Android, jeje

¡Acostúmbrate a escribir juntos! Este es el primer día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento .

¿Qué es Gradle?

Oh hoo, hablando de gradle, siempre que sea un desarrollador de Android, creo que nadie lo desconoce (no sé nada al respecto en otros campos, por lo que no nos atrevemos a decir nada), pero . . . Cómo hacer un buen uso de él y qué conveniencia puede aportar a nuestro desarrollo parece no estar claro para la mayoría de los usuarios de Android. A continuación, presentaré brevemente el papel que juega Gradle en el desarrollo de Android.

Las siguientes introducciones son todas groseras. Hay muchos artículos sobre la comprensión profunda de gradle, y están bien escritos, pero son demasiado profesionales y no son adecuados para que los entienda un novato como yo. Los siguientes puntos son todos para mi autocomprensión. El tipo grande está dispuesto a corregirme, y espero presentarlo en el área de comentarios. Estudiaré con una mente abierta, lo que me será de gran ayuda. Al mismo tiempo, declaro que este artículo es un texto aproximado de alfabetización técnica. ¡No es un artículo profesional! ! , lo volveré a crear cuando entienda gradle en profundidad en el futuro. Gracias de antemano por sus amables correcciones.

  • Construir herramientas (compilar, empaquetar)
  • Introducir dependencias (llamadas a métodos como dependencias, implementación, etc.)
  • Versión de configuración (compileSdkVersion, buildToolsVersion, minSdkVersion, etc.)
  • Configurar dependencias (allprojects, buildscript, classpath, etc.)
  • Subir dependencias al extremo remoto (cargar a almacenes remotos como maven)
  • Complemento Gradle (kotlin-android, com.android.library等)

... Hay muchos más, no puedo pensar en eso por un tiempo y no puedo encontrar la descripción del idioma. ¡Ayúdenme a agregarlo en el área de comentarios de los grandes! !

Entonces, ¿cuál es el poco conocimiento del que quieres hablar?

No se si las grandes empresas suelen tener empaques multicanal, o si hay diferencias en la descripción de algunas funciones en distintas plataformas, yo estaba en la anterior empresa, porque el negocio principal de la empresa son las aplicaciones de herramientas, y los nombres de las aplicaciones en diferentes plataformas de aplicaciones son diferentes. , Cuando no conocía las características de Gradle's flavorDismensions y productFlavors antes, el método que utilicé fue primero hacer un paquete de la plataforma A, luego cambiar manualmente el código y cambiar el paquete de la plataforma B . Esto no solo requiere mucho tiempo, sino que también es propenso a errores.

  • Primero defina flavorDimensions "buildVersionApk", "versión" en el cierre de Android
  • Asocie la dimensión con el método definido en el cierre productFlavors y luego reemplace el archivo de recursos dentro
  • Ejecute el comando gradle ensamblarXXX para empaquetar
  • Finalmente, puede ver el apk que desea en la ruta del archivo modificado.
android{
...//其他配置

def flavorMap = [
        buildA : "test1",
        buildB : "test1",
        buildC   : "1.0.2",
]
//维度
flavorDimensions "buildApk", "version"
productFlavors {
    buildA {
        // 关联维度
        dimension 'buildApk'
        def appName = flavorMap.buildA
        resValue "string", "app_name", appName
    }
    buildB {
        dimension 'buildApk'
        def appName = flavorMap.buildB
        resValue "string", "app_name", appName
    }
    buildC{
        dimension "version"
        def appVersion = flavorMap.buildC
        resValue "string", "app_version", appVersion
    }
}
applicationVariants.all { variant ->
    variant.outputs.all {
        if (outputFile.name.contains("release")) {
            def appName = flavorMap[variant.productFlavors[0].name]
            variant.getPackageApplication().outputDirectory = new File(project.rootProject.rootDir, "/outputApk")
            outputFileName = "${appName}_v${versionName}.apk"

            println "======================================================================"
            println "终极输出路径>> : ${variant.getPackageApplication().outputDirectory}${File.separator}${outputFileName}"
            println "======================================================================"
        }
    }
}
}
复制代码

Es demasiado seco para decir palabras, vamos al caso

imagen.png

jaja, ¿entiendes?

Para las operaciones anteriores, puede copiar directamente el código. Una cosa a tener en cuenta es que si desea reemplazar el nombre de la aplicación, recuerde bloquear el código en el archivo de recursos, de lo contrario, se informará un error.

Supongo que te gusta

Origin juejin.im/post/7081828085925937166
Recomendado
Clasificación