Andriod版のRestletをzipでダウンロードして解凍する
(またはプロジェクト生成後maven経由で依存関係解決するようにappのbuild.gradleを設定する)
Android Studioで新規プロジェクトをつくる
[New Project] -> [プロジェクト名とかを適当に決める] -> [Blank Activity]
Restletのjarを配置する
~/Downloads/restlet-android-2.3.1/lib/
から
~/AndroidstudioProjects/適当なプロジェクト名/app/libs/
に
org.restlet.ext.json.jar
org.restlet.ext.nio.jar
org.restlet.jar
をコピーする。
Android Studio上で増えたファイルを右クリックして[Add as library]をする。
アプリを編集する
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Component serverComponent = new Component();
serverComponent.getServers().add(Protocol.HTTP, 8081);
final Router router = new Router(serverComponent.getContext().createChildContext());
router.attach("/test", TestResource.class);
serverComponent.getDefaultHost().attach(router);
try {
serverComponent.start();
} catch (Exception e) {
e.printStackTrace();
}
}
TestResource.class
のところでそんなクラスないぞと警告が表示されるはずなので、インスペクタから Create Class:TestResource
をする。
そして以下のようなコードを書く。
TestResource
public class TestResource extends ServerResource {
public TestResource()
{
Set<Method> allowedMethods = new HashSet<Method>();
allowedMethods.add(Method.GET);
allowedMethods.add(Method.PUT);
setAllowedMethods(allowedMethods);
}
@Get
public JsonRepresentation getResource()
{
JSONArray jsonArray = new JSONArray();
jsonArray.put("hoge");
return new JsonRepresentation(jsonArray);
}
@Put("json")
public JsonRepresentation
saveOrUpdateResource(Representation rep)
throws JSONException, IOException
{
JSONArray jsonArray = new JSONArray();
jsonArray.put("hoge");
return new JsonRepresentation(jsonArray);
}
}
マニフェストの設定
<uses-permission android:name="android.permission.INTERNET"/>
がないと起動できない。
動作確認
実機かエミュレーターにインストールして起動完了後にブラウザで http://localhost:8081/test を開く
現実的には
ActivityじゃなくてServiceとしてバックグラウンドで動作するように実装すべきですがとりあえずRestletが本当にまともにAndroidで動くのか確認したかったという話です。