Problems including Apache HttpComponents in Gradle Android Project

I am trying to include httpmime in my application using the build.gradle file and everything compiles fine. Instead, when an application tries to use the MultipartEntityBuilder class, there are a bunch of WARN messages in the log that report problems.

Here is an 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;) 

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 according to the answer

 compile ('org.apache.httpcomponents: httpmime: 4. +') {
     exclude module: "httpclient"
 }
 compile ('org.apache.httpcomponents: httpcore: 4. +') {
     exclude module: "httpclient"
 }

[SECOND IMAGE] There are still problems - now these are all the other missing bits, but this may be a problem on the server:

 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;

[NEXT ANOTHER CHANGE]

The last missing bits do not seem to affect the successful use of MultipartEntityBuilder in this case.

+8
java android android-gradle build.gradle
source share
3 answers

You need to add httpcore-4.3.jar to your Java build path. I had the same problem and after adding this jar it went away.

+8
source

Here is how I did it in 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' } } 
+13
source
  compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5.1' compile('org.apache.httpcomponents:httpmime:4.3') { exclude module: "httpclient" } 

You can use the above dependencies for build.gradle (Module: app) for your project for the following IMPORT statements

import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MIME;

0
source

All Articles