Android Studio:如何使用Gradle生成签名的APK


89

我已经在Google和SO上进行了搜索,但找不到答案。

这是我第一次使用gradle系统,现在我正在生成一个签名的APK,以上传到Google Play(项目是从Eclipse导入的)。

现在,我已经在这里阅读了您应该添加到自己的部分http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-TaskssigningConfigsbuild.gradle

我已经添加了这些行,现在我看到您需要运行,./gradlew assembleRelease但是在我的cmd中运行它会返回“ gradle”,但它不被识别为内部或外部命令,可操作程序或批处理文件。我也尝试右键单击build.gradle并运行它,说它是成功的,但是一旦我在build / apk文件夹中查找,只有一个名为app-debug-unaligned.apk

那么如何使用Gradle系统生成签名的APK?



@ScottBarta部分成功了,一旦我切换到发布模式并运行gradle,我仍然会遇到错误,但是使用他的build>通过菜单生成签名的apk最终成功了!谢谢,我在提供的链接上为您投票。
Gooey 2014年

从gradle文件中使用v1(jar签名)或v2(完整的apk签名)版本签名?这里的解决方案:stackoverflow.com/questions/57943259/…–
user1506104

Answers:


97

根据生成生成的三种方法buildType。(在您的情况下,它已发布,但可以命名为任何您想要的名称。)

  1. 转到Android Studio右侧面板中的Gradle Task,然后在Module Tasks中assembleReleaseassemble(#your_defined_buildtype)在Module Tasks下搜索

  2. 转到左侧面板中的构建变体,然后从下拉列表中选择构建

  3. 转到文件资源管理器中的项目根目录,然后打开cmd / terminal并运行:

    Linux: ./gradlew assembleRelease or assemble(#your_defined_buildtype)

    视窗: gradlew assembleRelease or assemble(#your_defined_buildtype)

如果要(仅)进行发行版构建,可以使用Build> Generate Signed apk。对于其他构建类型,仅以上三个选项可用。

您可以在module/build目录中找到包含生成类型名称的APK 。


4
仅当您在build.gradle中具有构建配置时,才会构建签名的apk。如果将其存储在源代码管理工具中或与其他人共享,则应考虑将签名密钥的凭据与源代码分开。
Janusz

生成>生成签名的apk ...就这么简单
Atul 2016年

61

可以采用任何现有的Android Studio 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

1
由于我们需要将源代码传递给同伴,因此这是使密钥库内容保密的最佳方法。谢谢。

2
无论如何要知道这些android.injected.signing。*属性的存在?
Tixeon

我是从Android Studio团队的Xav那里获得此信息的,我不知道是否还有其他类似的变量。
韦恩·彼得卡斯基

我收到java.lang.RuntimeException:com.android.ide.common.signing.KeytoolException:无法从存储“ C:\ Users \ somedirectory \ Desktop \ someKey.jks”中读取密钥XXXXXX:没有别名为“ XXXXXX”的密钥在密钥库C:\ Users \ somedirectory \ Desktop \ someKey.jks中找到。这是为什么?
Archie G.Quiñones19年

39

您可以使用此代码

android {
   ...
    signingConfigs {
        release {
            storeFile file("../your_key_store_file.jks")
            storePassword "some_password"
            keyAlias "alias_name"
            keyPassword "key_password"
        }
    }

    buildTypes {

        release {
            signingConfig signingConfigs.release
        }
    }
   ...
}

然后从您的终端运行

./gradlew assembleRelease

您将在以下位置获得apk

您的android-app / build / outputs / apk / your-android-app-release.apk


@ozcanovunc,请再次检查您的密钥库路径,可能是您定义的路径错误。
bhavesh kaila 2016年

这样做时,您build.gradle有可能被检入版本控制,密码也有检入!当安全性在您的项目中很重要时,请考虑采用其他方法。
Marco7757 '19

1
gradle assembleRelease不起作用。使用而不是gradlew assembleRelease
Sathish Gadde


-3

构建菜单>生成签名的APK


如果运行该命令,它会告诉您这不是解决方法。此外,如果我上传该.apk文件,则会引发错误,指出错误检测或某些错误。
Gooey 2014年

11
它表示调试正在进行中...在android studio中,在左侧,应该有一个标有'build variants'的选项卡...单击它,然后将所有内容从'debug'切换到'release'...之后,再次生成已签名的apk ...
trickedoutdavid 2014年

2
这不再有效!例如,其构建的APK的BuildConfig.DEBUG设置为true。这没有给我带来麻烦,您现在必须使用gradlew assembleRelease方法。
Ben Clayton 2014年

@BenClayton你绝对正确!因此,我浪费了时间!Android Studio中的另一个非常烦人的“错误”-看不到麻烦了……
sjkm

我想知道为什么这个简单的步骤不能成为最合适的方式来生成签名的apk,正如它明确提到的那样。此步骤生成了应用程序,对我来说完美无缺。但是,关于SO的许多其他答案使我感到困惑,认为我所做的可能不正确。
Atul
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.