【问题标题】:Gradle zipAlign task not working?Gradle zipAlign 任务不起作用?
【发布时间】:2013-07-10 09:04:53
【问题描述】:

Gradle zipAlign 任务似乎对我不起作用,不确定我做错了什么。我试过包括 zipAlign 任务,但不包括它,但它似乎没有什么不同。我的 gradle 脚本吐出了一个“发布”版本,但是当我尝试上传我的 .apk 时,根据开发者控制台,它从来没有 zipAligned。

这是我的构建脚本:

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:0.4.2'
    }
}

apply plugin: 'android'

dependencies {
    compile project(':facebook-android-sdk-3.0.1:facebook')
    compile project(':google-play-services_lib')
    compile project(':nineoldandroids')
    compile project(':SlidingMenu-master:library')
    compile project(':ViewPagerIndicator')
    compile project(':volley')
    compile project(':windowed-seek-bar')
    compile files('compile-libs/androidannotations-2.7.1.jar', 'libs/Flurry_3.2.1.jar', 'libs/google-play-services.jar', 'libs/gson-2.2.4.jar', 'libs/picasso-1.1.1.jar', 'libs/crittercism_v3_0_11_sdkonly.jar', 'libs/gcm.jar', 'libs/apphance-library.jar')
}

android {
    buildToolsVersion "17.0"
    compileSdkVersion 17

    signingConfigs {
        debug {
            storeFile file('keystores/debug.keystore')
        }
    }

    buildTypes {
        debug {
            sourceSets {
                main {
                    manifest.srcFile 'AndroidManifest.xml'
                    java.srcDirs = ['src']
                    resources.srcDirs = ['src']
                    aidl.srcDirs = ['src']
                    renderscript.srcDirs = ['src']
                    res.srcDirs = ['res']
                    assets.srcDirs = ['assets']
                }
            }
        }

        release {
            zipAlign true
            sourceSets {
                main {
                    manifest.srcFile 'AndroidManifest.xml'
                    java.srcDirs = ['src']
                    resources.srcDirs = ['src']
                    aidl.srcDirs = ['src']
                    renderscript.srcDirs = ['src']
                    res.srcDirs = ['res']
                    assets.srcDirs = ['assets']
                }
            }
        }
    }
}

任何帮助表示赞赏!

【问题讨论】:

    标签: android build-process gradle build-automation


    【解决方案1】:

    您的发布构建类型未配置为签名。

    如果您手动签署您的 apk,您还需要手动运行 ZipAlign。 ZipAlign 必须发生在签名之后

    只有当 apk 也可以签名时,Gradle 才会压缩对齐。

    要为发布配置设置签名,您需要先创建一个新的签名配置,然后将其分配给构建类型。

    android {
      signingConfigs {
        release {
          storeFile file("/path/to/keystore")
          storePassword "??"
          keyAlias "??"
          keyPassword "??"
        }
      }
    
      buildTypes {
        release {
          signingConfig signingConfigs.release
        }
      }
    }
    

    请注意,签名配置中的所有 4 个参数都是必需的,否则它会认为缺少某些值,甚至不会尝试签名。

    【讨论】:

    • 谢谢 Xav。如何将我的发布版本配置为自动签名?我是否只需要创建我的发布密钥库并将其设置在signingConfigs 下?
    • 在构建期间是否可以对这些值进行 gradle 提示?我真的不想将密码存储为纯文本。
    • @MikeG 您可以将这些参数设置为全局变量,这样您就可以在源代码中保留一个简单的引用,并且 gradle 会自动从您的全局 gradle 安装中获取它们(没有提示,也没有在同时)!
    • @MikeG - 这里讨论了一些隐藏 vcs 密码的方法:stackoverflow.com/questions/19487576/…
    • @MikeG 显然应该可以从控制台读取凭据 (developer.android.com/tools/publishing/app-signing.html)
    【解决方案2】:

    可以获取任何现有的 Android Studio gradle 项目并从命令行构建/签名,而无需编辑任何文件。这使得将您的项目存储在版本控制中非常好,同时将您的密钥和密码分开而不是在您的 build.gradle 文件中:

    ./gradlew assembleRelease -Pandroid.injected.signing.store.file=$KEYFILE -Pandroid.injected.signing.store.password=$STORE_PASSWORD -Pandroid.injected.signing.key.alias=$KEY_ALIAS -Pandroid.injected.signing.key.password=$KEY_PASSWORD
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 2019-12-13
      • 2013-12-30
      • 2023-03-31
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      相关资源
      最近更新 更多