Gradle pouco conhecimento para desenvolvedores Android, hehe

Adquira o hábito de escrever juntos! Este é o primeiro dia da minha participação no "Nuggets Daily New Plan · April Update Challenge", clique para ver os detalhes do evento .

O que é Gradle

Oh hoo, falando em gradle, desde que seja um desenvolvedor Android, acredito que ninguém esteja familiarizado com ele (não sei nada sobre isso em outras áreas, então não ousamos dizer nada), mas . . . Como fazer bom uso dele e que conveniência ele pode trazer para o nosso desenvolvimento parece não estar claro para a maioria dos caras do Android. Em seguida, apresentarei brevemente o papel que o gradle desempenha no desenvolvimento do Android.

As seguintes introduções são todas grosseiras. Existem muitos artigos sobre compreensão profunda do gradle, e eles são bem escritos, mas são muito profissionais e não são adequados para um novato como eu entender. Os pontos a seguir são todos para minha autocompreensão. O grandalhão está disposto a me corrigir, e espero colocá-lo na área de comentários. Vou estudar com a mente aberta, o que será de grande ajuda para mim. Ao mesmo tempo, declaro que este artigo é um texto rudimentar de alfabetização técnica. Não é um artigo profissional! ! , vou recriá-lo quando entender o gradle em profundidade no futuro. Agradecemos antecipadamente por suas correções amigáveis.

  • Ferramentas de compilação (compilar, empacotar)
  • Introduzir dependências (chamadas de método como dependências, implementação, etc.)
  • Versão de configuração (compileSdkVersion, buildToolsVersion, minSdkVersion, etc.)
  • Configurar dependências (allprojects, buildscript, classpath, etc.)
  • Faça upload de dependências para o terminal remoto (carregue para armazéns remotos, como maven)
  • gradle plugin (kotlin-android、com.android.library等)

... Há muitos mais, não consigo pensar nisso por um tempo, e não consigo encontrar a descrição do idioma. Ajude-me a adicionar na área de comentários dos grandões! !

Então, qual é o pouco conhecimento que você quer falar?

Não sei se as grandes empresas costumam ter empacotamento multicanal, ou se há diferenças na descrição de algumas funções em plataformas diferentes. Eu estava na empresa anterior, porque o negócio principal da empresa são aplicativos de ferramentas, e os nomes dos aplicativos em diferentes plataformas de aplicativos são diferentes. , Quando eu não conhecia o flavorDismensions e productFlavors do gradle antes, o método que usei foi primeiro fazer um pacote da plataforma A, depois alterar manualmente o código e alterar o pacote da plataforma B . Isso não é apenas demorado, mas também propenso a erros.

  • Primeiro defina flavorDimensions "buildVersionApk", "version" no encerramento do Android
  • Associe a dimensão ao método definido no fechamento productFlavors e, em seguida, substitua o arquivo de recurso dentro
  • Execute o comando gradle assembleXXX para empacotar
  • Finalmente, você pode ver o apk desejado no caminho do arquivo 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 "======================================================================"
        }
    }
}
}
复制代码

Está muito seco para dizer palavras, vamos ao caso

imagem.png

ahaha entendeu?

Para as operações acima, você pode copiar diretamente o código. Uma coisa a notar é que se você quiser substituir o app_name, lembre-se de bloquear o código no arquivo de recurso, caso contrário, um erro será relatado.

Acho que você gosta

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