gpt4 book ai didi

Android Proguard postgresql 和 ssl 连接

转载 作者:太空宇宙 更新时间:2023-11-03 15:03:39 25 4
gpt4 key购买 nike

Proguard 和 postgresql jdbc 驱动程序有问题。

问题:04-30 19:26:36.865:W/PostgresHelper(26968):提供的 SSLSocketFactory 类 org.postgresql.ssl.NonValidatingFactory 无法实例化

在 Debug模式下这不是问题 - 即连接已成功建立。

在“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 文件中,根据 Barend 的友善建议:-保持公共(public)类 org.postgresql.*

至于 -dontobfuscate AFAIK 不接受任何额外参数?

这是堆栈跟踪(当应用程序处于“Proguarded”状态时):

04-30 23:11:09.355: E/System(30717): 终结器抛出的未捕获异常
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(未知来源)
04-30 23:11:09.355: E/System(30717): 在 org.postgresql.d.g.finalize(未知来源)
04-30 23:11:09.355: E/System(30717): 在 java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:186)
04-30 23:11:09.355: E/System(30717): 在 java.lang.Daemons$FinalizerDaemon.run(Daemons.java:169)
04-30 23:11:09.355: E/System(30717): 在 java.lang.Thread.run(Thread.java:856)

编辑2:根据 Eric LaFortune 的建议,这已通过以下方式解决:

-keep class org.postgresql.** { *; }

非常感谢! :)

最佳答案

可能的情况是 Proguard 已将 org.postgresql.ssl.NonValidatingFactory 重命名为 a.a.a.a 之类的名称,将 Spanner 扔进正在进行的反射类加载中。您需要指示混淆器避免混淆 Postgres JDBC 驱动程序。

最简单的方法是将其完全列入白名单。驱动本身是开源的,不用遮遮掩掩。在您的 Proguard 配置中,它将类似于:

-keep org.postgresql.*
-dontobfuscate org.postgresql.*

当然,它的使用可能会暴露你的程序代码,所以如果你真的很紧张,你会希望只将最少量的它列入白名单,这样就更难追踪你的代码的哪些部分是调用 JDBC。我想这将需要大量的反复试验才能弄清楚,但大同小异。您可以使用 -keepnames 而不是 -dontobfuscate

关于Android Proguard postgresql 和 ssl 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16306792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com