Android Studio : Gradle을 사용하여 서명 된 APK를 생성하는 방법은 무엇입니까?


90

나는 Google과 SO에서 검색했지만 내 대답을 찾을 수 없습니다.

gradle 시스템으로 작업하는 것은 이번이 처음이며 Google Play에 업로드하기 위해 서명 된 APK를 생성하는 시점에 있습니다 (프로젝트는 Eclipse에서 가져옴).

지금은 여기 부분을 읽어했습니다 http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Building-and-Tasks을 추가해야 signingConfigsbuild.gradle

이 줄을 추가했으며 이제 실행해야 ./gradlew assembleRelease하지만 cmd에서 실행하면 'gradle'이 내부 또는 외부 명령, 작동 가능한 프로그램 또는 배치 파일로 인식되지 않습니다. 또한 build.gradle을 마우스 오른쪽 버튼으로 클릭하고 실행하려고 시도했지만 성공했다고 말했지만 build / apk 폴더를 보면 다음과 같은 파일 만 있습니다.app-debug-unaligned.apk

그렇다면 Gradle 시스템을 사용하여 서명 된 APK를 어떻게 생성합니까?



@ScottBarta 부분적으로 트릭을 수행했습니다. 일단 릴리스 모드로 전환하고 gradle을 실행하면 여전히 오류가 발생했지만 그가 빌드> 메뉴를 통해 서명 된 APK 생성을 사용하면 결국 해결되었습니다! 제공된 링크에서 투표 해 주셔서 감사합니다.
Gooey

gradle 파일에서 v1 (jar 서명) 또는 v2 (전체 APK 서명) 버전으로 서명 하시겠습니까? 여기에 솔루션 : stackoverflow.com/questions/57943259/…
user1506104

답변:


97

.NET Framework에 따라 빌드를 생성하는 세 가지 방법이 있습니다 buildType. (귀하의 경우 릴리스이지만 원하는 이름을 지정할 수 있습니다.)

  1. Android Studio의 오른쪽 패널에서 Gradle Task로 이동하여 Module Tasks를 검색 assembleRelease하거나 assemble(#your_defined_buildtype)아래에서 검색합니다.

  2. 왼쪽 패널의 빌드 변형으로 이동하여 드롭 다운에서 빌드를 선택합니다.

  3. 파일 탐색의 프로젝트 루트 디렉토리로 이동하여 cmd / terminal을 열고 다음을 실행하십시오.

    리눅스 : ./gradlew assembleRelease or assemble(#your_defined_buildtype)

    Windows : gradlew assembleRelease or assemble(#your_defined_buildtype)

릴리스 빌드 (전용)를 수행하려는 경우 Build> 를 사용할 수 있습니다 Generate Signed apk. 다른 빌드 유형의 경우 위의 세 가지 옵션 만 사용할 수 있습니다.

module/build빌드 유형 이름이있는 디렉토리 에서 생성 된 APK를 찾을 수 있습니다 .


4
build.gradle에 빌드 구성이있는 경우에만 서명 된 APK를 빌드합니다. 이것을 소스 코드 관리 도구에 저장하거나 다른 사람들과 공유하는 경우 서명 키의 자격 증명을 소스 코드에서 분리하는 것을 고려해야합니다.
Janusz

빌드> 서명 된 apk 생성 ... 그것만큼 간단합니다
Atul

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
소스 코드를 동반자에게 전달해야하므로 이것이 키 저장소 항목을 비밀로 유지하는 가장 좋은 방법입니다. 감사.
Yeung의

2
어쨌든 이러한 android.injected.signing. * 속성 존재 를 알고 있습니까?
Tixeon

Android Studio 팀의 Xav에서이 정보를 얻었으며 이와 같은 다른 변수가 있는지 모르겠습니다.
Wayne Piekarski

java.lang.RuntimeException : com.android.ide.common.signing.KeytoolException : Failed to read key XXXXXX from store "C : \ Users \ somedirectory \ Desktop \ someKey.jks": No key with alias 'XXXXXX' 키 저장소 C : \ Users \ somedirectory \ Desktop \ someKey.jks에 있습니다. 왜 그런 겁니까?
아치 G. 퀴논

40

이 코드를 사용할 수 있습니다.

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를 얻을 것입니다

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


@ozcanovunc 키 저장소 경로를 다시 확인하십시오. 경로가 잘못 정의되었을 수 있습니다.
bhavesh kaila

이 작업을 수행 할 때 build.gradle버전 제어에 체크인 될 가능성이 있으며 비밀번호도 마찬가지입니다! 프로젝트에서 보안이 중요한 경우 다른 경로를 고려하십시오.
Marco7757

1
gradle assembleRelease가 작동하지 않습니다. 대신 gradlew assembleRelease의 사용
사티시 Gadde


-3

빌드 메뉴> 서명 된 APK 생성


당신이 그것을 실행하면 그것은 그것을하는 방법이 아니라는 것을 알려줍니다. 게다가 .apk 파일을 업로드하면 오류 감지 또는 무언가가 켜져 있다는 오류가 발생합니다.
Gooey

11
그것은 디버깅이 켜져 있다고 말합니다 ... 안드로이드 스튜디오의 왼쪽에는 '빌드 변형'이라는 탭이 있어야합니다 ... 클릭하고 모든 것을 '디버그'에서 '릴리스'로 전환하십시오 ... 그 후에 ... 다시 APK 서명 생성
trickedoutdavid

2
더 이상 작동하지 않습니다! 예를 들어 빌드하는 APK에는 BuildConfig.DEBUG가 true로 설정되어 있습니다. 이로 인해 문제가 발생하지 않았으므로 이제 gradlew assembleRelease 메서드를 사용해야합니다.
Ben Clayton

@BenClayton 당신이 절대적으로 맞습니다! 이 때문에 시간을 낭비했습니다! 안드로이드 스튜디오의 또 다른 매우 성가신 "버그"- 문제와 시야에 끝 ...
sjkm

이 간단한 단계가 명확하게 언급했듯이 서명 된 APK를 생성하는 데 가장 적합한 방법이 아닌 이유가 궁금합니다. 이 단계는 앱을 생성했으며 아무런 문제없이 저에게 완벽하게 작동합니다. 그러나 다른 많은 답변은 내가 한 일이 방식이나 무엇을 수정하지 않을 수 있다고 생각하면서 혼란 스러웠습니다.
Atul
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.