Android

[Android Studio] .jar ファイルをインポートする

Android Studio で外部ライブラリ(.jar)をインポートするのに手間取ったのでメモします。インポートしたのは、Asynchronous Http Client という非同期通信を行えるライブラリ。

動作環境:Android Studio (I/O Preview) AI-130.687321

.jar ファイルをインポートする方法

1. libs に .jar ファイルを置く

プロジェクトファイル(プロジェクト名+Project)/プロジェクト名/libs/ に、外部ライブラリを置く。置くと自動的に、Android Studio のプロジェクトから見れるようになる。

2. build.gradle に記述する

build.gradle に、先ほど追加したライブラリへのパスを記述する。build.gradle は、プロジェクトの作成時に2つ生成されるが、プロジェクトファイル(プロジェクト名+Project)/プロジェクト名/build.gradle を編集する。

dependencies に compile files(‘libs/android-async-http-1.4.3.jar’) を記述した。

dependencies {
    compile files('libs/android-support-v4.jar')
    compile files('libs/android-async-http-1.4.3.jar')
}

3. クリーンビルドする

このままでは、ライブラリを見つけてくれないようなので、クリーンビルドを行う。「Sync Project with Gradle Files」と表示されるアイコンをクリックする。ウィンドウが表示されて、処理が走る。

4. ライブラリを使用する

後は、ライブラリをインポートして、処理を書いていく。

package com.example.sampleapplication;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import com.loopj.android.http.*;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AsyncHttpClient client = new AsyncHttpClient();
        client.get("http://rakuishi.com", new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(String response) {
                System.out.println(response);
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

このライブラリの問題だが、何故か Android Studio では onSuccess が呼ばれないようだ。他にオーバーライドできる onStart, onFinish は呼ばれるのに。何故だろう。

参考:Request not callback onSuccess() handler · Issue #86 · loopj/android-async-http · GitHub

追記:AndroidManifest.xml にインターネットの使用許可を出せば、OK でした。

<uses-permission android:name="android.permission.INTERNET"></uses-permission>