INSTALL_PARSE_FAILED_NO_CERTIFICATES 오류는 무엇입니까?


163

androidmanifest.xml파일 을 편집하여 기본 / 기본 / 시작 (당신이 무엇이든간에) 활동을 변경하려고했습니다 . 내가 한 것은 android:name재산 을 바꾸는 것이었다 . 그러나 이것은 전체 앱을 완전히 파괴했습니다. 설치하려고하면 실패하고 읽습니다.

설치 오류 : INSTALL_PARSE_FAILED_NO_CERTIFICATES

이전 상태로 되돌리려 고했지만 여전히 같은 오류가 발생했습니다. 어떻게해야합니까?


다른 사람을 위해 : 예를 들어 ( src ) 를 통해 얻을 수있는 INSTALL_PARSE_FAILED_NO_CERTIFICATES오류 -103입니다 . adb log D/PackageInstaller(21320): Installation error code: -103

대답은 사실입니다.이 오류를 발생시키는 또 다른 이유는 전화기에 동일한 패키지 이름을 가진 오래된 응용 프로그램이 설치된 경우입니다. 새 전화기를 설치하기 전에 전화기에서 제거하십시오
Emre Kilinc Arslan

1
이 질문에 걸려 넘어지는 사람에게는 아래의 모든 답변을 읽으 십시오! 이 오류 메시지는 "무언가 잘못된"유형의 오류 인 것 같습니다. 내가 그것을 만난 이유는 답변 방법 중 하나 때문입니다.
GMc

답변:


56

파일 에서 AndroidManifest.xml직접 편집 했습니까 .apk? 그렇다면 작동하지 않습니다.

.apk마켓을 통해 설치하지 않더라도 휴대 전화에 설치하려는 경우 모든 Android에 서명해야합니다 . 개발 도구는 개발 인증서로 서명하여이 문제를 해결하지만 .apk여전히 서명되어 있습니다.

이를 사용 .apk하면 인증서가 동일 하므로 장치가 설치된 응용 프로그램의 유효한 업그레이드 인지 알 수 있습니다 .

따라서 앱을 전혀 변경하지 않으면 다시 .apk서명 해야 앱 이 올바르게 서명됩니다.


감사합니다. 매니페스트를 자동으로 다시 작성하는 버튼이 있습니까?
mtmurdock

설레다로 어려움을 겪고있는 사람들을 위해 flutter clean다시 실행 하고 디버그하십시오! 이 작업은 빌드 폴더를 정리하고 실행 / 디버그에서 빌드 파일을 다시 빌드하기 때문에 위의 솔루션과 유사합니다!
마노이 쿠마

183

잘못된 서명 구성을 사용할 때이 오류가 발생할 수도 있음을 알았습니다. 여기 에 설명 된대로 Android 7.0에는 새로운 서명 체계 V2가 도입되었습니다 . V2 체계는 V1 체계에서와 같이 JAR이 아닌 전체 APK에 서명합니다. V2만으로 서명하고 7.0 이전 대상에 설치하려고하면 JAR 자체가 서명되지 않고 7.0 이전 PackageManager 가 V2 APK 서명이 있는지 감지 할 수 없으므로이 오류가 발생 합니다.

모든 대상 시스템과 호환되도록 다음과 같이 Android Studio의 서명 된 APK 생성 대화 상자에서 두 서명 버전 상자를 모두 확인하여 APK가 두 구성표로 서명되어 있는지 확인 하십시오.

여기에 이미지 설명을 입력하십시오

7.0 대상 만 예상되는 경우 V1 서명을 포함 할 필요가 없습니다.


5
당신은 내 많은 시간을 절약했습니다. Android Studio를 업그레이드하면 악몽이 발생했습니다. 이것은 그들 중 하나였습니다. SO가 안드로이드 개발의 절반 이상이 아니 었는지 궁금합니다. Android Studio는 오류에 대한 단서를 제공하지 않습니다.
Atul

4
운 좋게도 구글 플레이에서 출시하기 전에 기존 기기에서 릴리스 APK를 테스트했습니다. 모든 <Android 7.0 장치가 새 버전을 설치하지 못하면 재앙이됩니다. apk 릴리스를 만들려면 클릭하면 두 가지 버전이있는 것은 큰 빨간색 팝업 대화 상자가되어야합니다!
Kirill Karmazin

고마워 내 APK가 Android 7 이하에서 실행되지 않는 이유를 찾는 데 열중하고 있지만 단순한 확인란이었습니다. 너무 짜증나.
japzone

54

내 JDK 버전으로 인한 것입니다.

'ant'에 대해이 문제가 발생했으며 설명서에 언급 된주의 때문에 발생했습니다.

http://developer.android.com/guide/publishing/app-signing.html#signapp

주의 : JDK 7부터 기본 서명 알고리즘이 변경되었으므로 APK에 서명 할 때 서명 및 다이제스트 알고리즘 (-sigalg 및 -digestalg)을 지정해야합니다.

JDK 7이 있습니다. Ant 로그에서 상세 -v를 -v를 사용하여 표시했습니다.

$ ant -Dadb.device.arg=-d -v release install
[signjar] Executing 'C:\Program Files\Java\jdk1.7.0_03\bin\jarsigner.exe' with arguments:
[signjar] '-keystore'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\release.keystore'
[signjar] '-signedjar'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unaligned.apk'
[signjar] 'C:\cygwin\home\Chloe\pairfinder\bin\PairFinder-release-unsigned.apk'
[signjar] 'mykey'
 [exec]     pkg: /data/local/tmp/PairFinder-release.apk
 [exec] Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

JAR에 수동으로 서명하고 zipaligned했지만 약간 다른 오류가 발생했습니다.

$ "$JAVA_HOME"/bin/jarsigner -sigalg MD5withRSA -digestalg SHA1 -keystore release.keystore -signedjar bin/PairFinder-release-unaligned.apk bin/PairFinder-release-unsigned.apk mykey
$ zipalign -v -f 4 bin/PairFinder-release-unaligned.apk bin/PairFinder-release.apk
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
641 KB/s (52620 bytes in 0.080s)

나는 그 대답을 여기에서 발견했다.

제거하지 않고 INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES를 처리하는 방법

나는 그것을 제거하고 나서 효과가있었습니다!

$ adb -d uninstall com.kizbit.pairfinder
Success
$ adb -d install -r bin/PairFinder-release.apk
        pkg: /data/local/tmp/PairFinder-release.apk
Success
641 KB/s (52620 bytes in 0.080s)

이제 서명 할 때 해당 옵션을 사용하도록 build.xml 만 수정하면됩니다!

여기에 C : \ Program Files \ Java \ android-sdk \ tools \ ant \ build.xml이 있습니다.

            <signjar
                    sigalg="MD5withRSA"
                    digestalg="SHA1"
                    jar="${out.packaged.file}"
                    signedjar="${out.unaligned.file}"
                    keystore="${key.store}"
                    storepass="${key.store.password}"
                    alias="${key.alias}"
                    keypass="${key.alias.password}"
                    verbose="${verbose}" />

3
JDK 7도 내 문제였습니다. 나는 게으르고 JDK 7을 제거하고 JDK 6을 설치했으며 ^^. 다른 해킹 솔루션이지만 덜 급진적 인 경우 JAVA_HOME을 JDK 6으로 설정하고 JDK 6의 bin 경로를 PATH에서 먼저 놓을 수 있습니다.
Ixx

1
JDK 8도 같은 문제가 있습니다. PATH를 JDK 6으로 변경했습니다. 생명의 은인 감사합니다!
Chris Xue

감사! 내 마켓 앱은 JDK6으로 컴파일되었습니다. JDK7을 사용하여 릴리스 키 저장소로 앱을 컴파일하고 설치하려고 할 때이 문제가 발생했습니다.
Sileria

28

대부분이 오류에 대한 해결책은 정말 간단합니다.

  1. APK 제거
  2. 당신의 안드로이드 프로젝트를 청소
  3. 당신의 안드로이드 프로젝트를 구축
  4. APK 설치 / 실행

나는 2,3,4를했고 같은 오류가 발생합니다. APK를 제거한다는 것은 무슨 뜻입니까? 내 장치에서? 나는 그것이 내 장치에 있다고 생각하지 않습니다.
커티스

나는 해결책이 아니라 단순히 청소 프로젝트가 효과가 없다면 갑자기이 오류가 발생하지 않기 시작했습니다. 감사.
pgcan

18

keytool에서 args를 사용하여 해결했습니다.

-sigalg MD5withRSA -keyalg RSA -keysize 1024

jarsigner에서 사용

-sigalg MD5withRSA -digestalg SHA1

해결책은

안드로이드 APK 서명에는 어떤 종류의 핏팔이 존재합니까?


감사합니다, 나에게도 문제가 해결되었습니다 (JDK 7이 있습니다).
Enrico Ros

appcelerator titanium을 사용하고 APK 생성 스크립트에 액세스 할 수 없으므로 동일한 방식으로 수정했습니다. 이 솔루션에는 개인 키의 재생성 (변경!)이 필요합니다.
Federico

8

나는 또한 같은 문제에 직면했다. 먼저 V2를 사용하여 빌드를 생성하고 OS 5.1에서 실행되는 모바일 장치에 설치했으며 동일한 문제가 발생했습니다. 그러나 OS 7.0에서 실행되는 태블릿에서는 빌드가 제대로 작동했습니다. 그래서 V1 Jar 서명으로 빌드를 생성했으며 두 장치에서 모두 잘 작동했습니다.

결론 : Android OS 7.0 이하의 장치를 지원하는 경우 V1 jar 서명을 사용하여 빌드를 생성하십시오.


둘 다 확인할 필요가 없습니다. OS 7.0 이하를 지원하는 경우 V1을 선택하십시오. 7.0 이상에서 실행되는 장치를 지원하는 경우 V2를 확인하십시오.
Rajiv Ranjan

7

필자의 경우 릴리스 빌드를 빌드하고 실행할 수 있지만 INSTALL_PARSE_FAILED_NO_CERTIFICATES디버그 빌드를 수행하려고 할 때 오류가 발생했습니다.

해결책은 내 debug.keystore파일 을 삭제 하고 ADT가 다시 만들도록하는 것입니다. 분명히 만료되었습니다.

보다 장기적인 해결책은 debug.keystoreADT가 작성하지 않고 1 년 후에 만료되지 않는 것을 명시 적으로 작성하는 것입니다. 이를 수행하는 명령은 다음과 같습니다.

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 14000

프롬프트가 표시되면 다음 값을 입력하십시오.

  • 이름과 성 : Android Debug
  • 조직 단위 : Android
  • 조직 명 : 불명
  • 도시 또는 지역 : 알 수 없음
  • 주 또는도 : 알 수 없음
  • 국가 코드 : 미국

5

이것은 추악하지만 빠른 솔루션입니다. 7 대신 JDK 6을 사용하십시오.

Chloe의 답변을 읽은 후 JDK 7을 제거하고 (현재는 필요하지 않음) JDK 6을 설치했습니다. 더 나은 해결책은 개미가 JDK 6을 사용하도록 만들 것입니다 (7을 제거하지 않고). 이 속성을 변경 / 설정할 수 있습니다.

java.library.path

local.properties 파일에서. 프로젝트 디렉토리 (루트)에 있습니다.

안드로이드는 어쨌든 JDK 7에서 작동하지 않으므로 (6 또는 5 만) 개미 스크립트가 JDK 6 또는 5를 사용하도록하십시오. 아마도 좋은 해결책입니다.


5

이전에 생성 된 빌드와 현재가 v1 (jar signature)과 v2 (full APK Signature) 사이의 서명 버전에서 충돌하기 때문에,

서명 된 APK 생성 대화 상자에서 올바른 서명 버전을 수정하려면


4

최근에 Android Studio 4.0으로 업그레이드하는 동안이 오류가 발생했습니다. 의 서명 구성에서 프로젝트의 V2 서명이 비활성화 되었기 때문입니다 build.gradle.

해결책은 그것을 제거 v2SigningEnabled false하거나 명시 적으로 설정 true하는 것입니다. 이것이 기본값입니다.

android {    
    signingConfigs {
        dev {
            v2SigningEnabled true
        }
     }
}

Android Studio 4.0을 사용하고 있습니다. 그러나 내 build.gradle 파일에는 "v2SigningEnabled"가 없습니다. 그런 다음 어떻게해야합니까?
Nuwan Harshakumara Piyarathna

3

최신 Android Studio 버전 3.2 이상에서 release설치 를 실행하려고하는데 서명 구성을 정의하지 않은 경우 오류 프롬프트가 표시되고 설치가 실패합니다. debug빌드 를 실행 하거나 서명 구성 (V1 또는 V2)을 올바르게 설정해야합니다.


3

대부분의 답변은 사실입니다. 발생하는 또 다른 이유는

► 최소 SDK는 장치 SDK보다 작습니다.
► 장치에 동일한 패키지 이름을 가진 이전 응용 프로그램이 있습니다.


이것은 내 경험이었습니다. 프로젝트의 최소 SDK는 장치 SDK보다 높았습니다. Android Studio에서 프로젝트를 만들 때 올바른 선택을 "누락"하고 실수로 내 SDK로 다음 상위 버전을 선택한 다음 이전 태블릿이 실행 중이었기 때문에 발생했습니다.
GMc

내 min sdk와 device sdk를 동일하게 만들면 문제가 해결되었습니다.
Nuwan Harshakumara Piyarathna

2

파일이 포함 된 .jar라이브러리를 포함 하려고 할 때 발생할 수 있습니다 AndroidManifest.xml.

  • 순수한 Java 인 경우 .jar 내보내기에 포함시키지 마십시오.
  • 순수한 Java가 아닌 경우 (Android 프로젝트임을 의미) 라이브러리 프로젝트로 포함해야합니다

2

또한 당신은 확인할 수 있습니다

Project Structure-> Default Config->Signing Config

당신이 필요로하는 모든 것을 추가 한 후


1

JAVA_HOMEJDK 7 대신 환경 변수 를 JDK 5 또는 6으로 설정 하면 오류가 수정되었습니다.


0

얼마 후 주제에 대한 여러 온라인 스레드 후 프로젝트를 수정했습니다.

주로 마지막에 넣은 파일 ( 이미지 또는 레이아웃 일 수 있음) 을 고려합니다. 파일 을 삭제하면 문제가 해결되며 프로젝트를 다시 빌드 할 수 있습니다.


0

Eclipse Console에서이 오류가 발생했습니다. 내용이 같지만 이름이 다른 두 개의 항아리가 있고 서로 충돌하는 것으로 나타났습니다. 방금 그들 중 하나를 삭제하고 장치에 앱을 설치할 수있었습니다.


0

ant release디스크 공간이 부족하여 실패 했음을 릴리스했기 때문에이 오류가 발생했습니다 .


0

API v23을 실행하는 전화에서 Android N 미리보기로 빌드 된 Xamarin 프로젝트를 설치하려고 할 때이 오류가 발생했습니다. 해결책은 그렇게하지 않는 것입니다.


0

이 오류를 얻는 또 다른 방법은 antmacOS 에서 빌드 Icon\r하고 앱의 소스 트리에 Finder 아이콘 파일 ( )을 두는 것 입니다. 이 나타납니다 jarsigner당신이 경우 서명이 유효한 주장 하겠지만, 파일 이름에 캐리지 리턴 대처할 수없고, -verifyAPK는, 항상 장치에 설치 실 거예요 APK를 초래한다. 아이러니하게도 Google Drive Finder 플러그인은 Finder 아이콘 파일의 훌륭한 소스입니다.

해결책은 다음과 같이 지정자를 사용하여 문제가되는 파일 (Apk에서 쓸모없는 파일)을 제외시키는 것입니다 fileset.

    <exclude name="**/Icon&#13;" />

0

서명되지 않은 APK 버전을 설치하는 경우이 문제가 발생합니다. 올바른 APK를 설치했는지 확인하십시오.


0

이온 / Visual Studio Code (장치에서 Android 실행)와 관련된 문제가 있습니다.

모바일 장치에서 앱을 제거했지만 (설정 / 앱) 오류가 사라지고 앱이 시작됩니다.


0

최소 SDK가 28 인 앱이 있고 SDK 버전이 23 인 에뮬레이터에서 재생되고 있기 때문에 오늘이 오류가 발생합니다. 일반적으로 불가능합니다 (회색은 재생 버튼이 없음) 많은.


0

먼저 그 일을 시도하십시오.

  • Gradle 스크립트 → bulid.gradle (module : app) → 이동하여 (minSdkVersion) 값을 변경해야합니다. 예를 들어, 26을 사용한 경우 (minSdkVersion 20)과 같이 값을 줄이려고 시도 할 수 있습니다.
  • 그런 다음 (지금 동기화)를 시도하십시오.

0

에뮬레이터를 사용하는 경우 재설정을 시도하고 모바일에서 먼저 응용 프로그램을 제거한 다음 개발자 모드를 끈 다음 스위치를 켜면 문제가 해결됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.