Proguard和postgresql jdbc驅動程序出現問題。Android Proguard postgresql和ssl連接
問題: 04-30 19:26:36.865:W/PostgresHelper(26968):提供org.postgresql.ssl.NonValidatingFactory的SSLSocketFactory的類不能被實例化。
這在調試模式下不成問題 - 即連接建立成功。
「Proguarding」項目後,我得到了上述錯誤。
我在我的項目中有/ libs下的postgresql-8.3-607.jdbc3.jar。
新增-dontwarn org.postgresql **到proguard.cfg(出口沒有這將無法完成)
這是代碼(共常見)位:
try {
Class.forName("org.postgresql.Driver");
String url = decrypt(pgurl);
Properties props = new Properties();
props.setProperty("user", decrypt(pguser));
props.setProperty("password", decrypt(pgpass));
props.setProperty("ssl", "true");
props.setProperty("sslfactory", "org.postgresql.ssl.NonValidatingFactory");
conn = DriverManager.getConnection(url, props);
} catch (ClassNotFoundException e) {
Log.w(TAG, "Postgresql Class not found!");
System.exit(1);
} catch (SQLException e) {
Log.w(TAG, "Postgresql connection failure!");
Log.w(TAG, e.getMessage());
} catch (Exception e) {
e.printStackTrace();
}
在這點我正在圈圈,並在大量的谷歌搜索無法得出結論。 有什麼見解嗎? ;)
TIA, 佩德羅
編輯:
在我已經添加了proguard.cfg文件,按照副把的友好建議: -keep public class org.postgresql.*
至於-dontobfuscate AFAIK沒有按」沒有采取任何額外的參數?
這是堆棧跟蹤(當應用程序是 「Proguarded」):
04-30 23:11:09.355: E/System(30717): Uncaught exception thrown by finalizer 04-30 23:11:09.355: E/System(30717): java.lang.NullPointerException 04-30 23:11:09.355: E/System(30717): at org.postgresql.d.g.close(Unknown Source) 04-30 23:11:09.355: E/System(30717): at org.postgresql.d.g.finalize(Unknown Source) 04-30 23:11:09.355: E/System(30717): at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:186) 04-30 23:11:09.355: E/System(30717): at java.lang.Daemons$FinalizerDaemon.run(Daemons.java:169) 04-30 23:11:09.355: E/System(30717): at java.lang.Thread.run(Thread.java:856)
EDIT2: 按照埃裏克LaFortune建議這已經解決了:
-keep class org.postgresql.** { *; }
謝謝你真是太棒了! :)
你確定你可以/想要/做一個直接從Android的PG jdbc連接,這是一個明智的做法嗎?您通常會創建一個連接到數據庫的Web服務/休息/ soap,然後繼續客戶端本身。 – 2013-04-30 22:23:38