ラベル IS01 の投稿を表示しています。 すべての投稿を表示
ラベル IS01 の投稿を表示しています。 すべての投稿を表示

2012/02/19

Android上で動くgccの導入

2017/11/20 追記
Android 5.0以上ならTermuxでClangを使用できます → Termuxの備忘録
追記ここまで


前からAndroid上で動くgccが欲しいなぁと思っていたのですが、半年以上前にciel氏(@cielavenir)が作成されていました。凄い。

Marijuana氏のツイートを見て、同じくFDcloneをAndroid上で動かしたいな、と思っていたところ、ciel氏がFDcloneをビルドして下さったところから、Android上で動くgccがあることを知りました。

ciel氏のDropboxで共有されているファイルの一覧から以下のファイルをダウンロード。
  • android_gcc_r2a.tar.bz2
  • android_gcc_supplement.tar.bz2
adbでIS01に接続し、/data/local/に「gcc」ディレクトリを作成(パーミッションは775)後、2ファイルを展開。
/data/localのパーミッションが771なので、connect botで操作する時もファイルの一覧が見られるようにパーミッションを775に変更。

普段はconnect botでシェルをbashにしているので、~/.bashrcにgccなどへのパスの設定とライブラリのパスの設定を追加。

PATH=$PATH:/data/local/gcc/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/data/local/gcc/lib
簡単なソースを書き、コンパイルして作成された実行ファイルが動くことを確認。


FDcloneの導入は、Marijuana氏のサイトrattcv氏のブログ(2012/02/17)を参考にして下さい。

IS01ではciel氏のビルドされたFDcloneだと
reloc_library[1302]: 9496 cannot locate 'killpg'...CANNOT LINK EXECUTABLE
となり、動作しなかったので、自分でビルドすることに。
#Android2.xと1.6の差か…

2012/05/19 追記
Android NDKのヘッダーファイルを見るとkillpg()がサポートされているのはAPIレベルが8以上、つまりAndroid 2.2以上のようです。

2012/02/11

Android用のnkfをコンパイル

2017/11/20 追記
Android 5.0以上ならTermuxでnkfをコンパイルして使用できます → Termuxの備忘録
追記ここまで

PerlのEncodeをAndroid用に作成するのは難しいので、nkfをコンパイルすることに。
#JIS, Shift JIS, EUC, UTF-8が扱えればOKなので。

nkfのソースを http://sourceforge.jp/projects/nkf/ から取得。
これを書いている時点での最新バージョンは2.1.2。

ダウンロードしたnkf-2.1.2.tar.gzからコンパイルに必要なファイル
config.h
nkf.c
nkf.h
utf8tbl.c
utf8tbl.h
の5ファイルを~/nkf/jni/ (ディレクトリは前もって作成)にコピー。
Android.mkの内容は、
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := nkf
LOCAL_SRC_FILES := nkf.c utf8tbl.c
include $(BUILD_EXECUTABLE)
で、コンパイル。
$ ~/android-ndk-r6/ndk-build
Compile thumb  : nkf <= nkf.c
In file included from /home/xxxxx/nkf/jni/nkf.c:30:
/home/xxxxx/nkf/jni/nkf.h:166:22: error: langinfo.h: No such file or directory
/home/xxxxx/nkf/jni/nkf.c: In function 'nkf_locale_charmap':
/home/xxxxx/nkf/jni/nkf.c:756: error: 'CODESET' undeclared (first use in this function)
/home/xxxxx/nkf/jni/nkf.c:756: error: (Each undeclared identifier is reported only once
/home/xxxxx/nkf/jni/nkf.c:756: error: for each function it appears in.)
make: *** [/home/xxxxx/nkf/obj/local/armeabi/objs/nkf/nkf.o] エラー 1
langinfo.hが無くてエラーとなっている。

KMC Staff Blog:RubyをAndroid用にビルドする を参考にnkf.hを修正。
$ diff -u nkf.h.org nkf.h

--- nkf.h.org   2011-09-08 21:02:30.000000000 +0900
+++ nkf.h       2012-02-10 23:44:10.000000000 +0900
@@ -153,6 +153,10 @@
 # ifndef HAVE_LOCALE_H
 #  define HAVE_LOCALE_H
 # endif
+#elif defined(__ANDROID__)
+# ifndef HAVE_LOCALE_H
+#  define HAVE_LOCALE_H
+# endif
 #else
 # ifndef HAVE_LANGINFO_H
 #  define HAVE_LANGINFO_H
でコンパイルし直し。

Compile thumb  : nkf <= nkf.c
Compile thumb  : nkf <= utf8tbl.c
Executable     : nkf
Install        : nkf => libs/armeabi/nkf
実機で動くことを確認。

2013/05/19追記: Android用のnkfをコンパイル その2 でコンパイルしたものを置いてます。

2011/07/18

Can't locate unicore/PVA.pl

SL4A + Perl でスクリプトを書いていじってたら、日本語(マルチバイト)があった部分で、
Can't locate unicore/PVA.pl in @INC (@INC contains: ~@INCのパス~) at /data/data/com.googlecode.perlforandroid/files/perl/5.10.0/utf8_heavy.pl line 97, line xxx.
というメッセージが出力された。これはhide_o_55氏の
SL4AのPerl for Androidでマルチバイト文字を使う際に落ちる件
に書かれている手順でAndroid.pmのdo_rpc()を修正することで動くようになる。

しかし、日本語をファイルへ出力しようとすると、
Wide character in print at スクリプト名 line xxx, line yyy.
となり内部エンコードのまま出力されている。EncodeがあればいいのだがSL4A + Perl にはない。コンパイルするのも手間がかかりそう。
ということで、unicore/PVA.pl を用意してみる。

SL4AのPerlにはPVA.plを作成するのに必要なモジュールの一部がないので実行はLinux PCで。
SL4AのPerlのバージョンが5.11.0なので、http://www.cpan.org/src/5.0/からPerl 5.11.0のソースをダウンロードして展開。
cd perl-5.11.0/lib/unicore
perl ./mktables
cd ..
と実行してPVA.plが作成されたことを確認。このファイルだけあればOKというわけではないので、unicoreディレクトリをSDカード(/sdcard/com.googlecode.perlforandroid/extras/perl/site_perl/)にコピー。
これで今のところAndroid.pmのdo_rpc()を修正しなくても、うまく動いている模様。

2011/05/23

Androidのターミナルでsl

歌代氏が、sl-jslinux - hatena.utashiro.comでjslinux向けにslを動く用に修正されたソースを公開されていた。
vt100 環境限定となっている。Androidのターミナルでも動くかも。
Android NDKの環境構築も兼ねて、コンパイルしてみる。

まずAndroid NDK | Android Developersから、Linuxでコンパイルするのでandroid-ndk-r5b-linux-x86.tar.bz2をダウンロード。
ダウンロードしたファイルをホームディレクトリで展開。

コンパイル用にディレクトリ(~/sl/jni/)を作成。

slコマンドのソースの
 #include <tcclib.h>
となっている行を
 #include <stdio.h>
に修正し、sl.cとして~/sl/jni/に保存。

~/sl/jni/Android.mk を以下の内容で作成。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := sl
LOCAL_SRC_FILES := sl.c
include $(BUILD_EXECUTABLE)
~/sl/jni/に移動してコンパイル。

$ ~/android-ndk-r5b/ndk-build
と入力すると
Compile thumb  : sl <= sl.c
Executable     : sl
Install        : sl => libs/armeabi/sl
と出力された。~/sl/libs/armeabi/に移動し、

$ file sl
と入力すると、
sl: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
と出力された。これをIS01に送って実行してみる。


slコマンドが動いた。

2011/01/26

Android用のwgetを導入

以前インストールした Busybox for android のwgetでは名前解決ができないので、Android用にコンパイルされたwgetを Jacob Hoffman-Andrews' Android stuff からダウンロードしてIS01にインストール。

パッチを見ると思ったより修正が必要だな、と。

Zaurusではwgetのバージョンが1.10.2の時にクロスコンパイルをしてみたけど、当時のメモを見るとソースの修正はなく、configure時にいくつかオプションを指定してmakeしていた模様。

GNU関係のソフトをAndroidに入れようとすると、それなりに修正が必要なのかな。

#wgetを入れたのは、LWPを入れるのが大変そうだったので。

2011/01/19

IS01でSL4AのPerlを動かす

SL4AからPerlを起動(という表現でいいのか?)する時にLD_LIBRARY_PATHにK.Takata氏がコンパイルしたlibm.soへのパスを追加できれば動くと思われるので、消極的な方法で動かしてみる。
libm.soはIS01でPerlを動かすを参照。

試してみる方は自己責任で。
必要なもの。
  1. root権限
  2. K.Takata氏がコンパイルしたlibm.so
手順
  1. Perl for Android のperl (/data/data/com.googlecode.perlforandroid/files/perl/perl)を「perl0」にリネーム
  2. libm.soを/data/data/com.googlecode.perlforandroid/lib/にコピーし、パーミッションを755、所有者を元々あったperlと同じにする。
  3. /data/data/com.googlecode.perlforandroid/files/perl/perlを以下の内容で作成し、元々あったperlと同じパーミッション、オーナーにする。
#!/system/bin/sh
LD_LIBRARY_PATH=/data/data/com.googlecode.perlforandroid/lib exec /data/data/com.googlecode.perlforandroid/files/perl/perl0 $*
2.のlibm.soは/data/に置いてもいけるはず。ただし、3.のLD_LIBRARY_PATHをそのように変更する必要あり。
3.のシェルスクリプトは、LD_LIBRARY_PATH ~ perl0 $* の部分は1行で記述。execは
無くてもいいかも。

Android for Perlのインストール時に一緒に入るサンプルのtest.plを動かしてみる。

2011/01/10

ターミナルでのパイプの入力2

ターミナルでのパイプの入力 でパイプの入力に手間がかかる、と書いたのですがAndroid Terminal Emulator 1.0.21でBall + 5 でパイプが入力できるようになったようです。
#SSHを使うので、最近はConnectBotがメインになってますが。

2011/05/17 追記
現在のバージョン1.0.27ではBall + 5では入力できません。
最近使ってなかったので気づかなかった。

2011/10/09 追記
1.0.32ではMENU -> その他 -> 設定 -> Fn key で "Jog ball"を選択してあげればBall + L でパイプが入力できます。

2011/01/09

IS01でPerlを動かす

2011/01/03の IS01ではSL4AのPerlは動かない では、SL4AのPerlは動かなかったが、__aeabi_fadd などを含んだ状態のlibm.soをIS01用にコンパイルして下さった方がいた。

ハングアップの日々 (2010/12) K.Takata氏のページ

2010/12/13 の記事にあるlibm.so (libm.7z)をダウンロードし、IS01にコピー。
adb push libm.so /data
adb shell
$ chmod 755 libm.so
で、Perlを起動してみる。
$ LD_LIBRARY_PATH=/data
$ /data/data/com.googlecode.perlforandroid/files/perl/perl --version
動くことを確認。しかし、K.Takata氏が書かれているとおり、SL4A上からはPerlが動かせない。K.Takata氏のように、SL4AのPerl for Androidをコンパイルし直すか、それとも/system/lib/のlibm.soを差し替えてしまうか。前者はコンパイル環境を構築しないといけないし、後者は、他への影響があるかもしれないし、うーん、迷う。

2011/01/19 追記
消極的な方法でSL4A上から動くようにしてみた
IS01でSL4AのPerlを動かす

# /system/lib/ 配下のファイルのパーミッションが755ではなく、644なのが気になる。

2011/01/04

Rubyをインストール

AndroidでRubyスクリプティング
で、rattcv氏がIS01で動くRubyをコンパイルし公開されていたので、ダウンロードしてインストール。

open-uriを使ってhttpでのファイルの取得も問題無しでした。

rattcvの日記。では他にもConnectBotをIS01で使用しやすいように修正したものや、Vimやも公開されています。(2010/10/30の投稿)

2011/01/03

IS01ではSL4AのPerlは動かない

タイトルのとおり、動かなかった。
/data/data/com.googlecode.perlforandroid/files/perl/perl --version
と実行すると
reloc_library[1302]:  2557 cannot locate '__aeabi_fadd'...CANNOT LINK EXECUTABLE
となる。
NDK周りの問題かと思ったので、(IS01のlibm.soの問題。IS01でPerlを動かす、参照)SL4AのページからPerlの最初のリリース時のase_r13.apk (2009/09/22リリース)を入れてperl_r0.zipを入れてみたけど結局動かず。
Android NDK, Revision 2の頃のコンパイルだから動くかな、と思ったけど。残念。

IS01では、SL4Aで動いたのは試した範囲ではLua, Shell、でJRuby, Pythonは動かなかった(その他は試さず)。しかし、一見動いているLuaもhttp通信を行うため
require ("socket.http")
とすると、
error loading module 'mime.core' from file '/data/data/com.googlecode.luaforandroid/files/lua/lib/lua/5.1/mime/core.so':
Symbol not found:
mimeモジュールのところでとエラーがでる。
mimeモジュールを使わないようにsocket.httpを変更してみたけど、
http://www.google.co.jp/ のようなページは取得できるものの、「/」のあとに何かあると、取得できず。
Luaをきちんと勉強していないので、深追いはせず。

2010/10/15

busyboxのlsはbusyboxのashでは問題なく表示できた

今までターミナルで使用してきたコマンド「ls」はbusyboxのlsではなく、最初から入っている/system/bin/lsを使用してた。(アプリケーションのインストール ターミナル編参照)

が、ls -la と打つと
-la: No such file or directory
と表示されちょっと悲しかった。

busyboxのlsを使えば表示されるけど、カラー化の制御コードがなぁ、と思いつつ「ls0」とリネームしていたのを「ls」に戻し実行したら、ls -laで問題なく表示された上に、カラーで表示された。シェルをbusyboxのashに変更してたからか。
もっと早く気づくべきだった。
スクリーンショットでも撮ろうかと思ったらIS01を繋いでいるPCにJavaを入れないといけないのね。
面倒なので諦め。

Android用のbash、どこかに無いかな

2011/01/14追記 Android用のBash
shell bash for android - xda-developers

2010/09/27

いろいろ

2010/09/17で書いた不具合が直ったようなので、アップデート
スマートブック「IS01」の「IS NET」Eメール送受信および販売の再開について | 2010年 | KDDI株式会社

2010/09/18で書いたオールリセットのSIMカードを抜いていると再起動時にGoogleアカウントのパスワードの入力を求められるのは、そういうものらしい。
IS01 まとめ wiki - スペックの「8円運用の方法(9月30日までの契約(一括購入)の場合可能)」の4)の部分。
とりあえずSIMカードは入れて運用してみよう。
使っている人が集まってくる2chの情報、まとめサイトは便利ですな。

2010/09/21

ターミナルでのパイプの入力

Android Terminal Emulatorでのパイプの入力。
  1. MENU -> Toggle soft keyboard を選択。
  2. 「絵・顔・記」ボタンを押す。
  3. 記号リストの中から[半角記号]の「|」(パイプ)を選択(Enter)。
  4. 「戻る」を2回押す。

手間がかかる…もっといい方法は無いものか。

2011/01/10 追記
1.0.21でBall + 5 でパイプが入力できるようになったようです。

2010/09/19

アプリケーションのインストール ターミナル編

Zaurusではターミナル、Perl、q2chなどなど使っていたので、それに該当するアプリケーションをIS01にインストール。

  1. まずはターミナルがないと不便なのでAndroid Terminal Emulatorをマーケットからダウンロード。
    Android Terminal Emulator
  2. で、そのままでは不便なので、BusyBoxをインストールする。
    MobileHackerz再起動日記: au IS01をデバッグモードで接続しbusyboxをインストールする
  3. 上記サイトを参考に、ホストとなるWindows PCにUSBドライバをシャープのページからダウンロードし、手順どおりにインストール(3. IS01用ADB USBドライバのところ)、設定を行う。
    SH Developers Square - ドライバ
  4. 次にAndroid SDK | Android DevelopersからAndroid SDKをダウンロードし、適当なディレクトリへ展開。adbコマンドを使うだけならJavaは不要。
  5. 続いてBusybox for androidから「binary available」をクリックしBusyBoxのバイナリをダウンロード。ダウンロードしたファイルは、Android SDKを展開したディレクトリ内のtoolsディレクトリにコピー。
  6. PCとIS01をUSBで繋いで、コマンドプロンプトから先ほど展開したAndroid SDKのtoolsに移動し、
adb shell mkdir /data/busybox
adb push busybox /data/busybox/
adb shell
$ cd /data/busybox
$ chmod 755 busybox
$ ./busybox --install
でインストール完了。ただし、suコマンドがあるとワンセグが起動しないなど不都合なことがあるらしいのと、lsコマンドがカラー対応しているらしく制御コードを出力するので、
mv su su0
mv ls ls0
としておく(lsは最初から入っているのを使用)。

続いてAndroid Terminal Emulatorの設定。
毎回パスの設定をするのは面倒なので、Android Terminal Emulatorの起動後、メニューを押して「Preferences」->「Initial command」を
export PATH=/data/local/bin:$PATH
から
export PATH=/data/busybox:$PATH
に変更。ついでにシェルも「Preferences」->「Command line」で
/system/bin/sh -
から
/data/busybox/ash -
に変更しておく。

しばらく使ってみて…「|」(パイプ)の入力方法が分からない。
追記: とりあえず分かったのでメモ ターミナルでのパイプの入力

パケット数

auお客様サポートでの今月の通話料・通信料照会
9/17まで 264パケット
9/18まで 1,938パケット
SIMを抜いて、無線LAN経由でGoogleアカウントの設定ができてた可能性が高いなぁ

2010/09/18

オールリセット

結局Android Marketに繋がらないので、オールリセット。
しかし、オールリセット後も繋がらない。SIMカードを入れて何度かやってみたら繋がった。
#最初はSIMカードを入れないで繋がってたような気がしたんだけどなぁ。

しかし、繋がったら繋がったで、今度はIS01がGoogleアカウントのパスワードを覚えてくれない。IS01を再起動するたびにパスワード入力を求められる。こういうものなのか?

追記: SIMカードを入れていないとパスワードを覚えてくれないみたいです。10/09/27の投稿

サーバーへの安定したデータ接続を確立できません。

昨日まではAndroid Marketに接続できていたのに、接続時に使用するアカウントを変更してみたり、アプリケーションの管理でいろんなソフトの「データを消去」や「キャッシュを削除」をやっていたせいか、Android Marketに繋がらなくなってしまった。
Googleアカウントを入力してログインボタンをおしてしばらくすると、
「一時的な問題か、SIMカードがデータサービスに対応していない可能性があります。引き続き
問題が発生する場合は、お客様サポートにお問い合わせください。」
さてどうするか。

追記: 結局、オールリセットしました。

2010/09/17

不具合

IS01にメール送信の不具合があった模様。
スマートブック「IS01」のメール送信不具合について | 2010年 | KDDI株式会社

メールは全く使ってないので、今のところ不都合は無し。

2010/09/16

IS01買った

auのIS01(正確にはIS01X : @ezweb.ne.jpの対応済み)を買ってきた。
5年以上使っているZaurus + Kwinsの変わりになればいいなぁ。
本体のバージョンが1.00.05だったので、1.00.06にアップデート。

アップデートの内容
ケータイアップデートのお知らせ | ケータイアップデート | au by KDDI

auお客様サポートの新規登録をしようとしたら、契約書にお客様コードが書かれてない(--;)