16852


現在開発しているプログラムでjarファイルを扱いたいのですが`NoClassDefFoundError`が出てしまいます。  
いくつか調べてlibsファイルにjarを保存し、ビルドパス→ソースでlibsフォルダを追加しました

ライブラリーのところにはビルドパスは通さなくてもいいんでしょうか？  
また上記を行わないとプログラム中のインポート文にエラーが出ます。

上記は.classpathの編集で解決しました。  
NoClassDefFoundErrorは現在も出ています。  
該当箇所はFileBodyの部分です。

解決策をご存知の方がいらっしゃいましたら教えていただきたいです。

開発はEclipseで行っています。

以下ソース

[code]

    public class HttpThread extends Thread{
    String muri = null;
    public HttpThread(String guri){　//メインから画像のパスを取得
    muri = guri;
    }
    
    public void run() {
    /*▼▼▼BlobKey取得用▼▼▼*/
    String url = "http://xxxx.appspot.com/bandroid";
    String bkey = "";
    HttpClient httpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(url);
    
    try {
        HttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();
        bkey = EntityUtils.toString(entity);
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        httpClient.getConnectionManager().shutdown();
    }
    /*▲▲▲ここまで▲▲▲*/
    
    /*▼▼▼ＧＡＥアクセス用▼▼▼*/
    try {
        httpClient = new DefaultHttpClient();
        if(bkey != null) {
            bkey = bkey.substring(0, bkey.length()-1);
            HttpPost httpPost = new HttpPost(bkey);
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            Log.v("test", "path=" + muri);
            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
            builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
    
            File file = new File(muri);
            FileBody fileBody = new FileBody(file);
    
            builder.addPart("myFile", fileBody);
            httpPost.setEntity(builder.build());
            httpClient.execute(httpPost, responseHandler);
        }
    } catch (ClientProtocolException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    /*▲▲▲ここまで▲▲▲*/
    
[/code]

}}


CC BY-SA 3.0
2015-09-19T17:25:37.420
16778
2015-09-22T12:49:14.397
2015-09-21T14:26:09.230
12246
12246
question
android eclipse
httpmime4.5.1をAndroidで利用するとNoClassDefFoundError


解決頂けたみたいですので、回答としてまとめてみます。

# ライブラリの利用方法

EclipseのADTプラグインで作成した新規Androidのプロジェクトには、`libs`というディレクトリが存在し、そこにライブラリの`jar`を置くだけでビルドパスを解決してくれます。

もし何らかの要因で`libs`が存在しない、もしくは`libs`にビルドパスが通っていない場合は、`.classpath`に手動で以下の記述を足すことで解決できます。

[code]

    <classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
    
[/code]

# httpmimeをAndroidで使う方法

Android SDKには、Apache
HttpComponentのHttpClientが搭載されていますが、[バージョン4.0の開発途上版](https://hc.apache.org/httpcomponents-
client-4.3.x/android-port.html)で、メンテナンスもされていません。

マルチパートの送信でHttpMimeを利用する場合、4.5.1のHttpMimeですとHttpComponentのバージョン違いによって、`NoClassDefFoundError`が発生します。

  * HttpClient for Android 4.3.5
  * httpmime 4.3.6

の組み合わせであれば、エラーを回避することができます。

* * *

[Android
6以降ではHttpClientが撤去](https://developer.android.com/intl/ja/preview/behavior-
changes.html#behavior-apache-http-
client)されている点にご注意ください（日本語訳だと「削除」になっていますが、ランタイムに存在はしています）。


CC BY-SA 3.0
2015-09-22T12:49:14.397
16852
2015-09-22T12:49:14.397
5337
16778
answer