使用Gradle构建未签名的APK

55

我目前正在学习使用Gradle构建Android APK文件。如何在gradle中设置选项以构建未签名的APK文件?


1
你的意思是无符号数在使用调试密钥时也要这样做吗?为什么? - tbruyelle
2
未签名的发布版本。 - Zul
@tbruyelle 亚马逊应用商店需要未签名的APK文件。 - withoutclass
4个回答

86

您无需设置任何选项,只需运行常规任务即可:

$ gradle assemble

这将在项目/build/apk/中生成两个文件。

app-debug-unaligned.apk 
app-release-unsigned.apk

@rafaello:我知道这是一段时间以前的事了。但是我的解决方案(上面的答案)不再起作用了(为什么?我不知道)。现在我尝试了你的解决方案,它对我很有效。非常感谢!我之前犯的错误是在我想要无符号的风味中设置了signConfig...现在我删除了signConfig,一切都正常工作了!只是通过命令行来完成这个有点烦人... - owe
这个需要签名配置吗?即使只是调试的? - Daniel Jonker
1
转到“运行>编辑配置”,并添加一个新的Gradle作业,其中包含任务“assemble”。现在运行您的新作业。myapp-debug.apk位于<module>/build/outputs/apk下。 - vault
@rafaello 我遇到了一个错误:>在存储库容器上找不到方法jcenter()的参数[]。 - IgorGanapolsky
@IgorGanapolsky 请尝试从https://dev59.com/l3vaa4cB1Zd3GeqPAjvo中获取答案,看看是否解决了您的问题。 - rafaello
这是一些详细的说明,介绍如何执行Vault在上面评论中所描述的操作。https://developer.android.com/guide/topics/manifest/uses-feature-element.html#testing - Nick

20

要生成未签名的apk,请执行以下操作:

  • 定义一个空的signingConfig配置,如下所示:

  • signingConfigs{
        unsigned{
            storePassword = ""
            keyAlias = ""
            keyPassword = ""
        }
    }
    
  • 在您的发布版本中的buildTypes中定义未签名配置:

  • buildTypes{
        release{
            signingConfig signingConfigs.unsigned
        }
    }
    

我从adt-dev小组中得到这个信息,其中Xavier Ducrohet写道:

当前的行为是检查签名配置是否完全配置(*),如果是,则生成已签名APK,否则生成未签名APK。

(*) 目前完全配置的意思是store、alias和passwords的值都存在,但不包括keystore的存在。

更新于2013-12-19

如withoutclass所提到的,这在gradle插件版本0.6.3中不起作用。

无论如何,可以使用gradle生成未签名APK:只需将flavor或buildType的signingConfig条目留空即可。它应该看起来像这样:

productFlavors{
    // with this config you should get a "MyProject-flavorUnsigned-release-unsigned.apk"
    flavorUnsigned{
        versionCode = 9
        packageName defaultPkgName
    }
}

buildTypes{
    // with this config you should get a "MyProject-release-unsigned.apk"
    release{
        packageNameSuffix '.release'
    }
}

对我来说不再起作用了。但rafaello的答案非常好。在ADT Dev Group上发布了一篇帖子:https://plus.google.com/117954254390243608387/posts/N5dTMNS5UGv - owe
1
这不起作用,因为构建将失败,并声明未为必填字段指定任何值。插件版本0.6.3。 - withoutclass
@withoutclass:你说得对。我更新了我的答案,并解释了如何使用最新的Gradle版本生成未签名的APK。 - owe
如果您的发布版本具有签名配置,则此方法不适用。它将使用发布配置对应用程序进行签名。插件版本为0.7.0。 - withoutclass
好的,我仍然使用插件版本0.6.+,因为在“dev channel”中没有适用于AS 0.4.0的更新。现在的问题是:如何使用插件版本0.7.0生成未签名的apk?我需要另外构建一个“unsigned”buildType,在其中不声明signingConfig吗?这不是一个好的解决方案,因为构建变体的数量会增加... - owe

11

只需将 signingConfig 指定为 null。

android {
  buildTypes {
    debug {
      signingConfig null
    }
  }
}

-1
如果您想创建一个未签名的构建类型(就像调试构建一样),请执行以下操作:
myBuildType {
    initWith debug
    ...
}

调试构建是由自动生成的密钥库签名的。 - Igor Čordaš

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接