Proguard 和 postgresql jdbc 驱动程序有问题。
问题:04-30 19:26:36.865: W/PostgresHelper(26968): SSLSocketFactory 类提供org.postgresql.ssl.NonValidatingFactory 无法实例化。
在调试模式下这不是问题 - 即成功建立连接。
在“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,佩德罗
编辑:
根据 Barend 的建议,在我添加的 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:根据 Eric LaFortune 的建议,这已通过以下方式解决:
-keep class org.postgresql.** { *; }
非常感谢!:)