Android 앱에서 https url의 콘텐츠를 가져옵니다. SSL 인증서 확인 오류를 피하기 위해 SSL 공개 키를 내 키 저장소에 추가합니다.이 키 저장소는 앱의 내 res/raw 폴더에 있습니다. http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html에 대한 지침을 따르십시오.이 모든 것은 지금까지 정상적으로 작동합니다.Proguard가 Android의 SSL 키 저장소에 문제 발생
.. Proguard를 활성화하고 난독 화까지. Proguard를 활성화하면 다음과 같은 오류가 발생합니다.
ERROR/Login(4401): Could not login.
javax.net.ssl.SSLException: hostname in certificate didn't match: <store.mydomain.com/185.165.192.15> != <store.mydomain.com> OR <store.mydomain.com>
at xyz.fd.a(Unknown Source)
나는 꽤 이해하지 못합니다. 왜 URL의 idenfitication은 도메인 이름과 함께 /<ipAddress>
을 가져 오는 방식으로 바뀌지 만, Proguard 난독 화 없이는 잘 작동합니다. http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html
proguard.cfg :
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep class * extends DefaultHttpClient
-ignorewarnings
-repackageclasses 'xyz'
-allowaccessmodification
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
업데이트 :
또한 제거 -repackageclasses 'XYZ
은 HTTPS의 콘텐츠를 가져 오는위한 세션 객체로서, 나는에 MyHttpClient에서 같은 소스를 사용 '및 -allowaccessmodification은 차이를 만들지 않으며 동일한 오류가 발생합니다.