Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android JDBC connection results in ctahttp exception

Im currently trying to establish a connection from my Android app to a MySQL server running on my raspberry pi.

I added the library to android studio correctly by adding it's into the dependencys in the module menu.

I implemented the JDBC-method like this into my program.

 public void readDatabase(String query)throws  Exception{

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            connection = DriverManager.getConnection("jdbc:mysql://192.168.0.101/mydb","user","mypassword");

            statement = connection.createStatement();

            resultSet = statement.executeQuery(query);

            System.out.println(resultSet);

        }catch (ClassNotFoundException e){

            e.printStackTrace();

        }finally {
            close();
        }

    }

    private void close(){
        try {
            if (resultSet != null){
                resultSet.close();
            }

            if (statement != null){
                statement.close();
            }

            if ( connection != null){
                connection.close();
            }
        }catch (Exception e){

        }
    }

Every time I fire up the program I get an class not found error. It says :

W/System: ClassLoader referenced unknown path: system/framework/mediatek-cta.jar I/System.out: e:java.lang.ClassNotFoundException: com.mediatek.cta.CtaHttp

I tried to search in different ways for the problem but I can not figure out where the problem is.
I don't even know what the cta class is. Maybe someone can help me out here.

like image 217
Sanevent Avatar asked Jan 27 '23 18:01

Sanevent


1 Answers

CTA = China Type Approval, this is something that Mediatek adds in Android for testing purpose.

Your error is happening in DriverManager.getConnection() that probably uses okhttp, apache-http or Socket class in Android's libcore to do its requests.

Mediatek patched these libraries for adding a control of HTTP requests. It tries to load dynamically some methods defined in /system/framework/mediatek-cta.jar but it is probably absent or not accessible on your android device's file system.

I see 5 solutions :

  1. Add an appropriate mediatek-cta.jar via OTA or via adb remount if you are on a custom/rooted ROM
  2. Use another device with the same application's source code (a non- Mediatek based device would not have that issue).
  3. Upgrading your OS via an official OTA update and hope device manufacturer fixed the issue.
  4. Rebuild and customize the OS by yourself with the following modifications
    • Make sure medatek-cta is added to PRODUCT_PACKAGES and PRODUCT_BOOT_JARS
    • Remove the hooks in libcore, okhttp and apache-http.
  5. Contact your OS maintainer's support.
like image 85
vhamon Avatar answered Feb 04 '23 02:02

vhamon