I try to include httpmime in my application using the build.gradle file, and everything compiles fine. Instead, when the application tries to actually use the MultipartEntityBuilder class, there are a bunch of WARN level messages on the log saying that there are problems.
Here's the excerpt from my build.gradle for the dependency:
    compile('org.apache.httpcomponents:httpmime:4.+') {
        exclude module: "httpclient"
    }
Here are the errors:
10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 6967 (DEFAULT_BINARY) in Lorg/apache/http/entity/ContentType; 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 6967 (DEFAULT_BINARY) in Lorg/apache/http/entity/ContentType; 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 6967 (DEFAULT_BINARY) in Lorg/apache/http/entity/ContentType; 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.367 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to resolve static method 19478: Lorg/apache/http/util/Args;.notNull (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; 10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 6968 (DEFAULT_TEXT) in Lorg/apache/http/entity/ContentType; 10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;) 10-09 13:39:37.377 2409-2426/com.company.app W/dalvikvm﹕ VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;)
The java class:
import android.util.Log;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.apache.http.HttpEntity;
import org.apache.http.entity.mime.MultipartEntityBuilder;
public class FileUploader {
    private final static String BOUNDARY = "__--__--__SERVETHEOVERMIND-__-_";
    public void uploadFile(String targetUrl, MultipartEntityBuilder upload, UploadHandler after) {
        Log.v("FileUploader", "Uploading to " + targetUrl);
        HttpURLConnection con = null;
        OutputStream os = null;
        InputStream is = null;
        try {
            HttpEntity uploadEntity = upload.build();
            URL postTo = new URL(targetUrl);
            con = (HttpURLConnection) postTo.openConnection();
            con.setRequestMethod("POST");
            con.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + BOUNDARY);
            con.setDoOutput(true);
            con.setDoInput(true);
            con.setUseCaches(false);
            con.addRequestProperty("Connection", "Keep-Alive");
            con.setRequestProperty("Content-length", String.valueOf(uploadEntity.getContentLength()));
            os = con.getOutputStream();
            uploadEntity.writeTo(os);
            os.close();
            con.connect();
            is = con.getInputStream();
            after.consumeUploadResponse(is);
            con.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if(con != null) {
            con.disconnect();
        }
        if(os != null) {
            try {
                os.close();
            } catch (IOException e) {
                Log.v("Uploader", "Closed output stream");
            }
        }
        if(is != null) {
            try {
                is.close();
            } catch (IOException e) {
                Log.v("Uploader", "Closed input stream");
            }
        }
    }
    public interface UploadHandler {
        public void consumeUploadResponse(InputStream stream);
    }
}
[EDIT] Correct Dependencies, as per answer
compile('org.apache.httpcomponents:httpmime:4.+') {
    exclude module: "httpclient"
}
compile('org.apache.httpcomponents:httpcore:4.+') {
    exclude module: "httpclient"
}
[SECOND EDIT] Still having issues - now it's these other missing bits, but it might be problems on the backend:
10-10 11:51:54.998 29597-29638/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 7465 (INSTANCE) in Lorg/apache/http/message/BasicHeaderValueParser; 10-10 11:51:54.998 29597-29638/com.company.app W/dalvikvm﹕ VFY: unable to resolve static field 7459 (INSTANCE) in Lorg/apache/http/message/BasicHeaderValueFormatter;
[YET ANOTHER EDIT]
It seems the last little missing bits don't have any effect on the successful use of the MultipartEntityBuilder in this case.
This is how I did in my gradle..
dependencies { 
compile ('org.apache.httpcomponents:httpmime:4.3'){
    exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
compile ('org.apache.httpcomponents:httpcore:4.4.1'){
    exclude group: 'org.apache.httpcomponents', module: 'httpclient'
}
}
And inside android
android{
packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/LICENSE'
}
}
                        You need to add httpcore-4.3.jar to your java build path. I had the same problem and it's gone after adding this jar.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With