Gradle 常用配置

来源:互联网 发布:nginx修改默认根目录 编辑:程序博客网 时间:2024/06/16 21:07

Gradle 常用配置

  • Gradle 常用配置
    • 签名
    • 多渠道打包
      • 自定义APK名称
    • 导入包
      • 导入aarjarmodle
      • 导入 so
    • 完整buildgradle

签名

当程序中使用了第三方的功能,比如分享、地图时,要求程序必须是已签名的
Gradle中配置签名后,可以使我们的Debug也带上签名,而不需要使用Build/Generate Signer Apk去编译带签名的APK
- build.gradle

// 在 Android {} 节点下增加signingConfigs {    signConfig {        storeFile file ('../key.jks')        storePassword '123456'        keyAlias 'xdj'        keyPassword '123456'    }}buildTypes {    release {        signingConfig signingConfigs.signConfig    }    debug {        signingConfig signingConfigs.signConfig // 配置debug包的签名    }}
  • 获得签名文件信息
// 终端命令keytool -list -v -keystore ./key.jks

输出结果
返回

Tips
还可通过在AndroidStudio自带终端中运行 ./gradlew signingReport命令获取

  • 获得APK签名信息
// 终端命令jarsigner -verify -certs -verbose ./app/build/outputs/apk/app-googleplay-debug.apk

输出结果
返回结果

Tips:
${keyAlias}CN=Android Debug 说明APK未签名

多渠道打包

以友盟为例

  • build.gradle
defaultConfig {    manifestPlaceHolders=[UMENG_CHANNEL_VALUE:'Umeng'] // 默认渠道为Umeng}productFlavors {    googleplay {        manifestPlaceHolders=[UMENG_CANNEL_VALUE:'Google Play']    }    wandoujia{        manifestPlaceholders = [UMENG_CHANNEL_VALUE: "Wandoujia"]//      minSdkVersion 19//      applicationId 'com.rx.demo'//      targetSdkVersion 22//      versionCode 360//      versionName '1.1.1'//      signingConfig signingConfig.wandoujiaConfig    }    xiaomi{    }    tencent{    }}
  • manifest
<!-- 替换为您应用的推广渠道名称,channel id自定义。--><meta-data android:name="UMENG_CHANNEL" android:value="${UMEMG_CHANNEL_VALUE}"/>
  • 编译命令
    ./gradlew assemble: 编译所有渠道的Debug和Release
    ./gradlew assembleWandoujia: 编译豌豆荚的Debug和Release
    ./gradlew assembleWandoujiaDebug: 编译豌豆荚的Debug
    ./gradlew build:

Tips
貌似Android Studio上有多渠道打包的插件,但最终还是需要使用命令行

自定义APK名称

  • build.gradle
// 根节点下增加def releaseTime() {    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))} // Android {} 节点下增加 buildTypes {    applicationVariants.all { variant ->        variant.outputs.each { output ->            def outputFile = output.outputFile            // && outputFile.name.indexOf('debug') == -1            if (outputFile != null && outputFile.name.endsWith('.apk')                    && outputFile.name.indexOf('debug') == -1) {                // 输出apk名称为app-googleplay-release-v1.0-build1-2015-12-16                def fileName = outputFile.name.replace(".apk",                     "-v${defaultConfig.versionName}-build${defaultConfig.versionCode}-" +                    "${releaseTime()}.apk")                output.outputFile = new File(outputFile.parent, fileName)            }        }    }}

导入包

导入aar、jar、modle

dependencies {    compile fileTree(dir: 'libs', include: ['*.jar']) // 导入libs文件夹中所有的jar包    compile 'group:name:version'    compile 'group:name:1.1.+'    compile(group:name:version) {        exclude module: 'support-v4' // 发生冲突时,排除v4    }    compile(name:'xxx', ext:'aar') // aar包是用来替换jar的文件类型    compile project(:modle)}

Tips
+ 表示最新的版本号,曾经遇到过在Windows下导入包是输入的时准确的版本号1.0.0没有问题,到了Mac上的就提示找不到包,后来改成 1.0.+就好了

导入 *.so

  • Android Studio 默认路径:Project视图模式下./app/src/main/jniLibs
    这是我目前使用的方法,直接把so包放入文件夹即可,不需要其他操作
    so包默认存放路径
  • 自定义路径
    Eclipse中的习惯是讲so包放入libs文件夹中,这在Android Studio中也可以通过配置Gradle实现
    build.gradle
// 在 Android{} 节点下增加sourceSets {    main {//      jniLibs.srcDirs=['./libs']        jniLibs.srcDirs=['./libs/jniLibs']    }}

完整build.gradle

apply plugin: 'com.android.application'def releaseTime() {    return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))}android {    compileSdkVersion 22    buildToolsVersion "23.0.1"    signingConfigs {        signConfig {            storeFile file ("../key.jks")            storePassword  "123456"            keyAlias "xdj"            keyPassword "123456"        }    }    defaultConfig {        applicationId "com.xdj.rxjavademo"        minSdkVersion 15        targetSdkVersion 22        versionCode 1        versionName "1.0.0"        manifestPlaceholders=[UMENG_CHANNEL_VALUE: 'Umeng']    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'            signingConfig signingConfigs.signConfig            zipAlignEnabled true//            shrinkResources true // 清除无用的resource        }        debug {            buildConfigField "boolean", "LOG_DEBUG", "false" // 设置是否打印LOG,貌似没效果            signingConfig signingConfigs.signConfig        }        applicationVariants.all { variant ->            variant.outputs.each { output ->                def outputFile = output.outputFile                // && outputFile.name.indexOf('debug') == -1                if (outputFile != null && outputFile.name.endsWith('.apk')                        && outputFile.name.indexOf('debug') == -1) { // 不对Debug进行重命名                    // 输出apk名称为app-googleplay-release-2015-12-16-v1.0-build1                    def fileName = outputFile.name.replace(".apk", "-${releaseTime()}" +                            "-v${defaultConfig.versionName}-build${defaultConfig.versionCode}" +                            ".apk")                    output.outputFile = new File(outputFile.parent, fileName)                }            }        }    }    productFlavors {        googleplay {            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "Google Play"]        }        xiaomi {//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "Xiao Mi"]        }        _360 {//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "360"]//            minSdkVersion 19//            applicationId 'com.rx.demo'//            targetSdkVersion 22//            versionCode 360//            versionName '1.1.1'//            signingConfig signingConfig._360Config        }        tencent {//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "Tencent"]        }        baidu {//            manifestPlaceholders = [UMENG_CHANNEL_VALUE: "Baidu"]        }    }    sourceSets {        main {            jniLibs.srcDirs=['./libs/jniLibs']        }    }}dependencies {    compile fileTree(dir: 'libs', include: ['*.jar'])    testCompile 'junit:junit:4.12'    compile 'com.android.support:appcompat-v7:22.2.1'    compile 'com.android.support:design:22.2.1'    compile 'io.reactivex:rxjava:1.1.0'    compile 'io.reactivex:rxandroid:1.1.0'    //    compile ('cn.trinea.android.view.autoscrollviewpager:android-auto-scroll-view-pager:1.1.2') {    //        exclude module: 'support-v4'    //    }    compile 'com.android.support:recyclerview-v7:22.2.1'}
0 0
原创粉丝点击