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 ... 不起作用(无法从依赖项中排除组)