i-jetty調査メモ

きっかけ的にはこんな感じで調べてみようという感じで。

でもまあAndroidの中に鯖立てる意味って正直疑問。

  1. なぜなら外部接続はほとんどのプロバイダは許可してないはず
  2. AirDroidみたいなWifi*1接続前提だと微妙じゃね?

と思うところもあるわけですが・・

 まあjenkinsでdxは多分通らないけど
あれはgroovy-all使ってるからなんだよな。。

discobotにしても

  • patch当ててdex可能なjarを作成

って流れでしたから。。。

 巷で流行ってるDSLって書きやすいんだろうけど
静的な世界のお話ではないですからね。。。(汗


公式は

ネット記事を調べていくと

あたり。
どちらも手動でdexやるから面倒っぽい記載が書かれてたり


公式のアプリ経由でのデプロイ手順だと

  1. 作ったwarのdex化が必要
    1. 公式の GitHub - jetty-project/i-jetty: Jetty for Android (moved from code.google.com) 見ると mavenでやれって記述が出てくる
  2. ローカルPCに鯖等を立ててURL越しに指定
  3. ダウンロードさせてデプロイ

という話で、

そこら辺面倒だから

な感じでapkに最初から入れても問題ないっしょ?*2
という記述が出てくる。

利用シーンとして

  • 隣の人とWebSocket辺りで繋ぎたいかな

とか想定するとこれだと不便
=> Android Beam(NFC)やBlutetoohで良くない?

になってしまうかな。。。



以下試行錯誤ログ

 ただ今だと、今回IDEAでAndroidプロジェクトを新規に作ったのですが
結構変わってたので詳細はプロジェクトを参照して頂けると

遣った作業的には

  1. ${sdk.dir}/tools/ant/build.xml => buildtools にコピーして編集
<!--
<target name="-dex" depends="-compile, -post-compile, -obfuscate">
-->
<target name="-dex" depends="-compile, -post-compile, -obfuscate, -jarjar">


<macrodef name="dex-helper">
<!-- //略 --> 
               <else>
                    <path id="out.dex.jar.input.ref">
                        <!-- 
	                        <path refid="project.all.jars.path" />
                         -->
                        <fileset file="${out.absolute.dir}/repackagedclasses.jar" />
                    </path>
                </else>
  1. buildtoolsに jarjar.jar 最新版入れる
  2. -jarjar 辺りのタスクは custom-rules,xml を新規作って記載
    1. Androidビルド - 備忘録 に載ってる話、知りませんでした><
  3. プロジェクト直下のbuild.xmlを編集
<!-- 
    <import file="${sdk.dir}/tools/ant/build.xml"/>
-->
    <import file="buildtools/build.xml"/>
    
    <!--//カスタムタスクは後で呼ばないと ${adb}とかの変数が初期化されてない -->
    <import file="custom_rules.xml" optional="true"/>

  • これは 公式の embeded.jarがおかしいのかな?
  • じゃあローカルでソース落としてコンパイルしなおしてみるか?
  • もっと状況最悪

な感じ。コンパイルバージョンとか指定できないものなのかな?
しかも何気にsudoでないとコンパイルできなかったし。。


でもまあ、アプリ落ちる原因はさいしょ原因がわからなくて

とか色々と試行錯誤を。


05-03 21:39:17.676: E/AndroidRuntime(7822): java.lang.NoClassDefFoundError: org.apache.catalina.core.StandardHost
05-03 21:39:17.676: E/AndroidRuntime(7822): at org.apache.catalina.startup.Tomcat.getHost(Tomcat.java:435)
05-03 21:39:17.676: E/AndroidRuntime(7822): at org.apache.catalina.startup.Tomcat.addWebapp(Tomcat.java:201)
05-03 21:39:17.676: E/AndroidRuntime(7822): at com.example.android_tomcat.tomcatActivity.initServer(tomcatActivity.java:44)
05-03 21:39:17.676: E/AndroidRuntime(7822): at com.example.android_tomcat.tomcatActivity.onCreate(tomcatActivity.java:25)
05-03 21:39:17.676: E/AndroidRuntime(7822): at android.app.Activity.performCreate(Activity.java:5104)
05-03 21:39:17.676: E/AndroidRuntime(7822): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
05-03 21:39:17.676: E/AndroidRuntime(7822): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
05-03 21:39:17.676: E/AndroidRuntime(7822): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
05-03 21:39:17.676: E/AndroidRuntime(7822): at android.app.ActivityThread.access$600(ActivityThread.java:141)
05-03 21:39:17.676: E/AndroidRuntime(7822): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
05-03 21:39:17.676: E/AndroidRuntime(7822): at android.os.Handler.dispatchMessage(Handler.java:99)
05-03 21:39:17.676: E/AndroidRuntime(7822): at android.os.Looper.loop(Looper.java:137)
05-03 21:39:17.676: E/AndroidRuntime(7822): at android.app.ActivityThread.main(ActivityThread.java:5041)
05-03 21:39:17.676: E/AndroidRuntime(7822): at java.lang.reflect.Method.invokeNative(Native Method)
05-03 21:39:17.676: E/AndroidRuntime(7822): at java.lang.reflect.Method.invoke(Method.java:511)
05-03 21:39:17.676: E/AndroidRuntime(7822): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
05-03 21:39:17.676: E/AndroidRuntime(7822): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
05-03 21:39:17.676: E/AndroidRuntime(7822): at dalvik.system.NativeStart.main(Native Method)

じゃわからんよな。。

  • ソースからembeded.jarをコンパイルしなおしてたりとか*3
  • apkをばらして中のクラス確認してたりとか。。(苦笑

Androidはエラーが不親切だよな。。。とかよく思います

とかも参考にしてた

また今度調べそうな気もしたので

に一応調べたプロジェクトは入れてます

*1:同一モバイルルーター無い?

*2:複数のServletは存在することが少ないという想定<組み込み系だと

*3:これがJDK7でコンパイルされてた><