Java Proguard中断数据库连接
我的应用程序使用基于的。当我生成可运行文件时,连接到我的数据库工作正常,但是如果让我处理我的应用程序,它会中断数据库连接 下面的代码建立了与数据库文件路径的连接。使用Proguard时,消息“Get connection!”从未打印,因此会被卡住Java Proguard中断数据库连接,java,sqlite,jdbc,proguard,Java,Sqlite,Jdbc,Proguard,我的应用程序使用基于的。当我生成可运行文件时,连接到我的数据库工作正常,但是如果让我处理我的应用程序,它会中断数据库连接 下面的代码建立了与数据库文件路径的连接。使用Proguard时,消息“Get connection!”从未打印,因此会被卡住 import java.sql.Connection; import java.sql.DriverManager; import javax.swing.JOptionPane; private void loadDatabase(String d
import java.sql.Connection;
import java.sql.DriverManager;
import javax.swing.JOptionPane;
private void loadDatabase(String databaseName) throws SQLException
{
String databaseLibrary = "jdbc:sqlite:";
JOptionPane.showMessageDialog(null, "Getting connection...");
Connection databaseConnection = DriverManager.getConnection(databaseLibrary
+ databaseName);
JOptionPane.showMessageDialog(null, "Got connection!");
// ...
}
只有在Proguard中禁用了收缩和选项时,数据库连接才会在处理后中断
关于如何解决这个问题以及为什么会发生这种情况,您有什么想法吗?不应该混淆SQLite库,最好不要使用
Class.forName
。因为编译时不需要SQLite库,所以请删除任何编译时依赖项。@JoopEggen:所以我只是通过-keep class org.SQLite.*{*}
排除SQLite,应该这样做吗?它至少起作用了:)是的,我想是的。最新的JDBC在Java SPI文件中指定了原始类名,所以混淆会造成严重破坏。SQLite库不应该混淆,最好省略class.forName
。因为编译时不需要SQLite库,所以请删除任何编译时依赖项。@JoopEggen:所以我只是通过-keep class org.SQLite.*{*}
排除SQLite,应该这样做吗?它至少起作用了:)是的,我想是的。最新的JDBC在Java SPI文件中指定了原始类名,所以混淆会造成严重破坏。SQLite库不应该混淆,最好省略class.forName
。因为编译时不需要SQLite库,所以请删除任何编译时依赖项。@JoopEggen:所以我只是通过-keep class org.SQLite.*{*}
排除SQLite,应该这样做吗?它至少起作用了:)是的,我想是的。最新的JDBC在Java SPI文件中指定了原始类名,因此(-不再需要class.forName。)因此混淆会造成严重破坏。