gradle问题

  1. gradle 常见脚本
  2. 使用国内repositories镜像
  3. 项目打包发布

gradle 常见脚本

编译出来的apk重命名:

android.applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def outputFile = output.outputFile
        if (outputFile != null && outputFile.name.endsWith('.apk')) {
            def fileName = outputFile.name.replace(".apk", "-${defaultConfig.versionCode}.apk")
            output.outputFile = new File(outputFile.parent, fileName)
        }
    }
}

productFlavors:多版本编译apk(eg.大陆版/欧美版/台湾版)

productFlavors {
    generic {
        buildConfigField "boolean", "MOBILE", "false"
        buildConfigField "String", "UPDATE_URL", "/api/xxx"
    }
    china {
        buildConfigField "boolean", "MOBILE", "true"
        buildConfigField "String", "UPDATE_URL", "/api/yyy"

    }
    link {
        buildConfigField "boolean", "MOBILE", "false"
        buildConfigField "String", "UPDATE_URL", "/api/zzz"
    }
}

signingConfigs:

signingConfigs {
    debug_key {
        keyAlias 'androiddebugkey'
        keyPassword 'android'
        storePassword 'android'
        storeFile file('keys/debug.keystore')

    }
    HMS_release_key {
        keyAlias 'platform'
        keyPassword 'android'
        storePassword 'android'
        storeFile file('keys/release.keystore')
    }
}

buildTypes: depends: signingConfigs

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release_key
        buildConfigField "boolean", "DEBUG_MODE", "false"
    }
    debug {
        minifyEnabled = false
        signingConfig signingConfigs.debug_key
        buildConfigField "boolean", "DEBUG_MODE", "true"
    }
}

使用国内repositories镜像

vim /home/XXX/.gradle/init.gradle

allprojects{
    repositories {
        def ALIYUN_REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public'
        def ALIYUN_JCENTER_URL = 'http://maven.aliyun.com/nexus/content/repositories/jcenter'
        all { ArtifactRepository repo ->
            if(repo instanceof MavenArtifactRepository){
                def url = repo.url.toString()
                if (url.startsWith('https://repo1.maven.org/maven2')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_REPOSITORY_URL."
                    remove repo
                }
                if (url.startsWith('https://jcenter.bintray.com/')) {
                    project.logger.lifecycle "Repository ${repo.url} replaced by $ALIYUN_JCENTER_URL."
                    remove repo
                }
            }
        }
        maven {
                url ALIYUN_REPOSITORY_URL
            url ALIYUN_JCENTER_URL
        }
    }
}

项目打包发布

  1. Android 项目打包

gradlew assemble

  1. Desktop/HTML 项目打包

gradlew dist

Desktop:

执行这个命令,将在项目的 build/libs/ 文件夹下创建一个可运行的 jar 包。这个 jar 包中包含了所有需要的代码和资源,可以脱离整个项目,只要有 JDK 或 JRE 环境即可运行。运行这个 JAR 文件的命令: java -jar jar-file-name.jar

task dist(type: FatCapsule) {
    applicationClass mainClass
    archiveName project.name + ".jar"
    capsuleManifest {
        systemProperties['log4j.configuration'] = 'log4j.xml'
        jvmArgs = ['-Xms768m', '-Xmx1g']
        minJavaVersion = '1.6.0'
    }
}

HTML:

执行这个命令,将会把整个应用编译为一个静态的 WEB 应用,将在项目的 html/build/dist/ 文件夹下生产 JavaScript、HTML、asset 文件,这些文件组成的静态 WEB 应用可以脱离 Java 环境,部署在任何支持 HTML 和 JavaScript 的 WEB 服务器上,并通过任何支持 WebGL 的浏览器上访问并运行。

注意: 执行打包命令后,在 html/build/dist/ 目录下会生成一个 WEB-INF 文件夹,这个文件夹占用了较大的空间,对于一般的 WEB 服务器没有用,可以删掉。

  1. library 编译Jar包

gradlew makeJar

task makeJar(type: Copy) {
    delete 'libs/libmedia.jar'
    from('build/intermediates/bundles/default/')
    into('libs/')
    include('classes.jar')
    rename ('classes.jar', 'libmedia.jar')
}
makeJar.dependsOn(build)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 450603622@qq.com

文章标题:gradle问题

文章字数:558

本文作者:steinswang

发布时间:2017-01-15, 22:54:34

最后更新:2020-02-03, 11:15:26

原始链接:http://yoursite.com/2017/01/15/gradle-issue/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录