위의 메시지로 인해 내 apk 업그레이드가 설치되지 않는 문제가 있습니다.패키지 이름이 같은 기존 패키지와의 충돌
나는 앱이 다른 릴리스 키로 서명 될 때이 메시지가 표시되는 게시물을 읽었습니다.
example post on different keys
. 내 로그에서 가 난 다음 내가 얻을 APK를 업그레이드하려고 같이
04-07 13:28:03.796 2072-2072/? W/InstallAppProgress: Replacing package:com.xxx.rr3
04-07 13:28:04.326 3675-3845/? W/PackageManager: verifying app can be installed or not
04-07 13:28:04.378 3675-3845/? W/PackageManager: Package com.xxx.rr3 signatures do not match the previously installed version; ignoring!
. 기본 응용 프로그램은 4 년 넘게 제작 중이며 이전의 하드 드라이브에 설치된 Eclipse를 사용하여 작성되었습니다.
6 개월 전 내 보스가 나에게 SSD 드라이브를 구입했고 Android Studio를 설치했습니다. 이전 프로젝트를 마이그레이션했는데 제대로 빌드되어 이전 버전이 설치되지 않은 장치에 설치됩니다.
이전 하드 드라이브의 키 저장소를 새로운 SSD에 복사했는데이를 사용하여 Android Studio에서 새 버전의 응용 프로그램에 서명합니다. 그래서 나는 같은 패스워드와 별칭을 가진 하나의 동일한 키 저장소만을 사용했습니다.
Android에서 내 업그레이드가 다른 키로 서명되었다고 말하는 이유는 누구에게 말해 줄 수 있습니까?
는 [갱신 1]
I 모두 신구 APK 대한 CERT.RSA을 추출했다. 둘 다 동일한 키 저장소와 키를 사용하지만 잘못된 릴리스 별칭을 사용하고있는 것으로 나타났습니다. 아래는 두 APK의 지문이며, 맨 위는 오래된 것, 새것은 맨 아래입니다. '서명 생성 APK'를 클릭하면
C:\OpenSSL-Win64\bin>keytool -printcert -file CERT.RSA
Owner: CN=matthew womersley, OU=dev, O=carefreegroup, L=wakefield, ST=west yorkshire
Issuer: CN=matthew womersley, OU=dev, O=carefreegroup, L=wakefield, ST=west yorkshire
Serial number: 6144ad2c
Valid from: Fri Jan 11 08:55:29 GMT 2013 until: Thu May 14 09:55:29 BST 3012
Certificate fingerprints:
MD5: 50:63:5E:54:9D:D3:C4:71:A9:4E:3C:F4:27:9E:50:CA
SHA1: 7C:2C:DB:7E:92:D2:01:46:43:8D:D2:B9:A4:D2:B0:F4:85:E7:16:D9
SHA256: 38:64:89:4D:A2:37:72:AA:CE:90:5E:34:46:B9:D0:A4:CA:18:B7:07:7A:E2:DB:1D:7C:60:CD:70:F6:77:C5:FF
Signature algorithm name: SHA256withRSA
Version: 3
Extensions:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 3F 95 E8 FA 36 5B 26 07 33 72 8B 09 37 0C 18 C5 ?...6[&.3r..7...
0010: 3B 5A 19 42 ;Z.B
]
]
C:\OpenSSL-Win64\bin>keytool -list -keystore .keystore
keytool error: java.lang.Exception: Keystore file does not exist: .keystore
C:\OpenSSL-Win64\bin>keytool -printcert -file CERT.RSA
Owner: CN=matthew womersley, OU=dev, O=carefreegroup, L=wakefield, ST=west yorkshire
Issuer: CN=matthew womersley, OU=dev, O=carefreegroup, L=wakefield, ST=west yorkshire
Serial number: 6144ad2c
Valid from: Fri Jan 11 08:55:29 GMT 2013 until: Thu May 14 09:55:29 BST 3012
Certificate fingerprints:
MD5: 50:63:5E:54:9D:D3:C4:71:A9:4E:3C:F4:27:9E:50:CA
SHA1: 7C:2C:DB:7E:92:D2:01:46:43:8D:D2:B9:A4:D2:B0:F4:85:E7:16:D9
SHA256: 38:64:89:4D:A2:37:72:AA:CE:90:5E:34:46:B9:D0:A4:CA:18:B7:07:7A:E2:DB:1D:7C:60:CD:70:F6:77:C5:FF
Signature algorithm name: SHA256withRSA
Version: 3
나는 올바른 releasealias를 지정되었지만 오류가 다른 불구하고 여전히있다.
같은 이름
하여 기존 패키지와 패키지 충돌합니다. 나는 다음과 같은 링크를 사용하여 수동으로 새 APK를 구축하는 것을 시도했다 :
C:\Users\mattheww\StudioProjects\nfcscanner3>gradlew assembleRelease
Downloading https://services.gradle.org/distributions/gradle-2.14.1-all.zip
Unzipping C:\Users\mattheww\.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv\gradle-2.14.1-all.zip to C:\Users\mattheww\.gradle\wrapper\dists\gradle-2.14.1-all\8bnwg5hd3w55iofp58khbp6yv
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\Users\mattheww\StudioProjects\nfcscanner3\app\build.gradle' line: 1
* What went wrong:
A problem occurred evaluating project ':app'.
> java.lang.UnsupportedClassVersionError: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Total time: 29.982 secs
합니다.
두 앱에서 키 저장소와 지문이 일치하는 경우 누구나 새로운 앱이 업그레이드되지 않는 이유를 설명 할 수 있습니까?
[업데이트 2] 난 그냥 안드로이드 스튜디오에 이클립스 프로젝트를 가져올 때, 제대로 구축하지 않을 것을 기억 한
. Appication Object에 문제가 있습니다. 내 응용 프로그램 개체는 NfcScannerApplication이라고하며 동일한 이름 (매니페스트에도 설명되어 있음)으로 구현 된 클래스가 있습니다.
일단 Android Studio로 가져 와서 장치에 빌드하고 푸시하면 Android는 Application 클래스를 찾을 수 없다고 말했습니다. 그래서 문제를 해결하는 것 같은 다음 코드를 사용했습니다.
public static NfcScannerApplication getRealApplication (Context applicationContext)
{
Log.e(TAG, "inside NfcScannerApplication getRealApplication");
NfcScannerApplication application = null;
if (applicationContext instanceof NfcScannerApplication)
{
application = (NfcScannerApplication) applicationContext;
}
else
{
Application realApplication = null;
Field magicField = null;
try
{
magicField = applicationContext.getClass().getDeclaredField("realApplication");
magicField.setAccessible(true);
realApplication = (Application) magicField.get(applicationContext);
}
catch (NoSuchFieldException e)
{
Log.e(TAG, e.getMessage());
}
catch (IllegalAccessException e)
{
Log.e(TAG, e.getMessage());
}
application = (NfcScannerApplication) realApplication;
}
return application;
}
// the above method is commented out and this is used
//because the migration process from Eclipse to Android
//needed it. see below
//https://stackoverflow.com/questions/36495954/bootstrapapplication-cannot-be-cast-to-applicationclass
응용 프로그램 클래스를 가져 오기 위해 리플렉션을 사용합니다. 이것이 내가 동일한 키 저장소 등을 사용하더라도 Android가 동일한 이름의 장치에 다른 앱을 있다고 생각하는 이유 일 수 있습니까?
[업데이트 3] 나는이 문제를 발견 한 것 같습니다. :) 나는 응용 프로그램이 처음로드 될 때 응용 프로그램 컨텍스트를 가져 오는 ContentProvider 있습니다. getContext를 호출하고이를 내 Application 클래스로 캐스팅합니다.
지금은 getContext.getApplicationContext()를 호출하면 제대로 작동합니다. 아래 코드는 내가 지금 사용하고 이전 코드는 위와 같이 주석 처리했다. 플레이 스토어의이 키 스토어가 원래 키가 아닌 말은 당신의 APK를 거부 할 경우
//old code
//Context context = getContext();
//nfcAppObj = (NfcScannerApplication) getContext();
//new code
Context applicationContext = getContext().getApplicationContext();
nfcAppObj = getRealApplication(applicationContext);
당신은 키 스토어가 올바른지 확인입니까? 만약 당신이 shomehow 귀하의 키 스토어가 curropted 생각 확실 해요. 이 링크를 씹을 수 있습니다. http : // stackoverflow.com/questions/13535424/android-keystore-stopped-working – savepopulation
@turtleboy Android Studio에서 릴리스 또는 디버그 모드로 빌드에 서명 하시겠습니까? –
@savepopulation 안녕하세요, 저는 5 년 전에 내 서버에 원래 키 저장소의 사본을 저장했습니다. 오늘은 키 스토어를 다운로드하고 Android Studio를 가리켰습니다. 불행히도 나는 여전히 같은 메시지를 얻는다. 그래서 키 저장소의 로컬 사본이 손상된 것 같지 않습니다. – turtleboy