0

Android 3.2, Gradle 4.6, Java 1.8

dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'

on app/build.gradle

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.myproject"
        minSdkVersion 18
        targetSdkVersion 28
        versionCode 423
        versionName "2.1.423"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

   lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }

def AAVersion = '4.5.2'

dependencies {
    annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
    annotationProcessor "org.androidannotations:ormlite:$AAVersion"

    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:animated-vector-drawable:28.0.0'
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.android.support:customtabs:28.0.0'
    implementation 'com.android.support:exifinterface:28.0.0'
    implementation 'com.android.support:support-media-compat:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'

    implementation 'com.crashlytics.sdk.android:crashlytics:2.9.7'
    implementation 'com.google.android.gms:play-services-gcm:16.0.0'
    implementation 'com.google.code.gson:gson:2.8.2'
    implementation 'com.j256.ormlite:ormlite-android:5.1'
    implementation 'commons-codec:commons-codec:1.11'
    implementation 'commons-io:commons-io:2.6'
    implementation 'org.apache.commons:commons-lang3:3.8.1'
    implementation 'org.apache.httpcomponents:httpclient:4.3.6'
    implementation "org.androidannotations:androidannotations-api:$AAVersion"
    implementation "org.androidannotations:ormlite-api:$AAVersion"

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
}

Here java class snippet:

import android.content.Context;
import android.util.Log;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import org.apache.commons.codec.binary.Hex;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.io.FileUtils;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.File;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

private String getFileContent(String fileName) {
    try {
        File file = new File(fileName);
        String fileContent = FileUtils.readFileToString(file); // error here
        return fileContent;
    } catch (IOException e) {
        if(BuildConfig.DEBUG)Log.e(TAG, e.getMessage(), e);
    }
        return null;
    }

On Android 4.4+ project run success.

But on Android 4.3 I get error:

org/apache/commons/io/Charsets                                             
java.lang.NoClassDefFoundError: org/apache/commons/io/Charsets                             
    at org.apache.commons.io.IOUtils.copy(IOUtils.java:2440)                           
    at org.apache.commons.io.IOUtils.toString(IOUtils.java:1084)                           
    at org.apache.commons.io.IOUtils.toString(IOUtils.java:1064)                           
    at com.myproject.android.fointeraction.util.StringUtil.getStringFromResource(StringUtil.java:82)           
    at com.myproject.transport.lite.FOServiceLite.executeCommand(FOServiceLite.java:669)               
    at com.myproject.service.DeviceContextService.registerDeviceContext(DeviceContextService.java:112)     
    at com.myproject.service.DeviceContextService.update(DeviceContextService.java:149)            
    at com.myproject.service.DeviceContextService.getDeviceId(DeviceContextService.java:160)           
    at com.myproject.service.AppContextService.getUserName(AppContextService.java:16)              
    at com.myproject.service.NotificationsSyncModule.sync(NotificationsSyncModule.java:118)        
    at com.myproject.activity.FirstStartActivity$3.run(FirstStartActivity.java:135)            
at java.lang.Thread.run(Thread.java:841)

Error in this line:

String fileContent = FileUtils.readFileToString(file);
0

1 Answer 1

0

it's unlikely, that a library does not know a class on different API levels

... enable multidex to have all of the library packaged for Dalvik.

the amount of dependencies clearly points into this direction.


the error actually comes from there:

StringUtil.getStringFromResource(StringUtil.java:82)

one other possibility would be, that Charsets gets obfuscated.

can you import org.apache.commons.io.Charsets; ??

Sign up to request clarification or add additional context in comments.

3 Comments

String fileContent = FileUtils.readFileToString(file, org.apache.commons.io.Charsets.UTF_8); - not help. Same error.
Is I try use multidex, it's also not help. I get another error: java.lang.RuntimeException: Unable to get provider com.crashlytics.android.CrashlyticsInitProvider: java.lang.ClassNotFoundException: Didn't find class "com.crashlytics.android.CrashlyticsInitProvider"

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.