【问题标题】:Android Studio preDexDebug error when compiling MySQL Connector Jar file编译 MySQL 连接器 Jar 文件时 Android Studio preDexDebug 错误
【发布时间】:2016-06-02 08:19:26
【问题描述】:

尝试在 Android Studio 1.4.1 中连接到 MySQL 数据库。将 MySQL 连接器 JAR 文件放在 libs 目录中,并通过执行 compile files('libs/mysql.jar') 将其添加为库。

当我尝试运行应用程序时,我收到以下错误:

:app:preDexDebug
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: Exception parsing classes
at com.android.dx.command.dexer.Main.processClass(Main.java:752)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:718)
at com.android.dx.command.dexer.Main.access$1200(Main.java:85)
at com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:672)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:574)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)

Caused by: com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
at com.android.dx.command.dexer.Main.parseClass(Main.java:764)
at com.android.dx.command.dexer.Main.access$1500(Main.java:85)
at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684)
at com.android.dx.command.dexer.Main.processClass(Main.java:749)
... 12 more
1 error; aborting
Error:Execution failed for task ':app:preDexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: 
    Process 'command 'C:\Program Files\Java\jdk1.8.0_74\bin\java.exe'' finished with non-zero exit value 1

这是我的 build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example.breandan.dishfinder"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile files('libs/mysql.jar')
}

当我删除 compile files('libs/mysql.jar') 行时,代码会运行,但不会执行我的任何数据库代码。

【问题讨论】:

    标签: java android mysql


    【解决方案1】:

    如果您想将 MySQL JAR 添加到您的项目中,您可以通过三种标准方式来完成。如果您以这些标准方式进行操作,Android Studio 将识别它们。请阅读此链接https://stackoverflow.com/a/35369267/5475941。在这篇文章中,我解释了如何在 Android Studio 中导入 JAR 文件,并通过屏幕截图逐步解释了所有可能的方法。

    您可以在此处找到 JAR 文件(您应该有一个免费的 Oracle 帐户可以下载):

    https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.38.tar.gz

    您也可以在本地 MySQL 安装目录中找到它。这是我机器上的地址。

    然后,将其添加到您的 Android 工作室:

    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.Statement;
    

    然后,你可以这样使用它:

    public class MysqlSample01Activity extends Activity {
    
    private static final String url = "jdbc:mysql://<server>:<port>/<database>";
    private static final String user = "<your username>";
    private static final String pass = "<your password>";
    
    /** This will run when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        connectToDB();
    }
    
    public void connectToDB() {
        ...
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, user, pass);
            System.out.println("Database connection was successful");
    
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery("select * from table_name");
            ResultSetMetaData rsmd = rs.getMetaData();
    
            while(rs.next()) {
                result += rsmd.getColumnName(1) + ": " + rs.getInt(1) + "\n";
                result += rsmd.getColumnName(2) + ": " + rs.getString(2) + "\n";
            }
            ...
        }
        catch(Exception e) {
            e.printStackTrace();
            tv.setText(e.toString());
        }   
    
    }
    }
    

    【讨论】:

    • 感谢您的帮助!由于某种原因,当我尝试打开项目结构窗口时,我的 Android Studio 不会打开它,有没有办法像您在第二种和第三种方法中那样手动添加依赖项?
    • 我想通了,但我仍然收到 java.exe 返回 1 的错误。它似乎在我编译 mysqlconnector.jar 时发生
    • 找到问题了,我需要旧版本的mysql连接器!
    • 很高兴听到这个消息,您在我告诉的路径中找到了吗?
    • 我的回答对您有用吗?
    猜你喜欢
    • 2015-04-23
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 2018-01-01
    • 2015-10-22
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    相关资源
    最近更新 更多