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을 추가해야 signingConfigs에build.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.