Gradle zipAlign 任务不起作用?

Posted

技术标签:

【中文标题】Gradle zipAlign 任务不起作用?【英文标题】:Gradle zipAlign task not working? 【发布时间】: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']
                
            
        
    

任何帮助表示赞赏!

【问题讨论】:

【参考方案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 密码的方法:***.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

【讨论】:

以上是关于Gradle zipAlign 任务不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 构建不起作用:任务“:MyApp:compileDebug”执行失败

gradle 中的 shadow 插件不起作用 - gradle build 不会构建胖 jar

在 gradle 中启用 Proguard 后 FCM 不起作用

将 gradle 更新到 7.0.3 后 buildConfigField 不起作用

在 Ubuntu 上,命令“gradle jettyRunWar”不起作用

Android Studio - Gradle 实现 (...) exclude ... 不起作用(无法从依赖项中排除组)