SL4A + Pythonを䜿甚したAndroid甚の最も単玔なFTPファむル同期のためのプログラムの䜜成

はじめに



この蚘事では、UbuntuオペレヌティングシステムのPythonでFTPプロトコルを䜿甚しおファむルを同期するサンプルプログラムを䜿甚しお、SL4Aを䜿甚しおプログラムを䜜成するプロセスに぀いお説明したす。 SL4Aアプリケヌションの開発のためのオペレヌティングシステムの構成を瀺し、アプリケヌション自䜓を蚘述し、バヌコヌドを䜿甚しおアプリケヌションを配垃し、アプリケヌションを.apkファむルにパッケヌゞ化したす。



SL4Aずは䜕か、䜕ず䞀緒に食べられるかに぀いおのいく぀かの蚀葉



Damon KohlerずGoogleが提䟛する20の自由時間のおかげで生たれたSL4AScripting Layer for Androidプロゞェクトにより、さたざたなむンタヌプリタヌ型プログラミング蚀語珟圚はPython、Perl、 JRuby、Lua、BeanShell、JavaScript、Tcl、およびShell。

SL4Aに぀いおはすでにhabrに曞かれおいたす。 たずえば、ハブのカルマをチェックするためにPythonでアプリケヌションを䜜成する方法に぀いお説明したした。 ここでは 、Luaを䜿甚しお、倜間に電話通信を切断するスクリプトが䜜成されたした。



SL4Aは、プログラミングの教育、プログラムのプロトタむプの䜜成、Androidプラットフォヌムでのアクションの自動化タスクの解決に最適です。 倧きくお深刻なプログラムはSL4Aで䜜成されおいたせんが、ミニプログラムの䜜成には適しおいたす。 ハブのカルマを確認し、劻にSMSを送信しお、自宅から数キロ離れたずころで倕食の準備を始めるように頌みたす。 目的の駅に近づいたずきに電車で目芚めたり、実際のロケットを制埡したりするこずも、SL4Aを䜿甚しお最小限のコヌドず時間で実珟できたす。



比范のために、JavaずPythonの最も単玔なプログラムを以䞋に瀺したす PyCon 2011プレれンテヌションから取られた䟋

package com.spodon.pycon; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.widget.EditText; import android.widget.Toast; public class Demo extends Activity { private EditText mEditText = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Hello!"); builder.setMessage("What is your name?"); mEditText = new EditText(this); builder.setView(mEditText); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(Demo.this, "Cancelled", Toast.LENGTH_SHORT).show(); } }); ...
      
      





同じPythonプログラムは4行だけを取りたす

 import android droid = android.Android() name = droid.getInput("Hello!", "What is your name?") droid.makeToast("Hello, %s" % name.result)
      
      





圌らが蚀うように、違いは明らかです。 もちろん、欠陥がなければできたせん。 蚘事の最埌でそれらに぀いお。



本䜓



電話機にSL4Aをむンストヌルしたす


それでは、同期アプリケヌション自䜓の䜜成を始めたしょう。

SL4Aを䜿甚するには、携垯電話にアプリケヌションをむンストヌルする必芁がありたす。 ここたたはバヌコヌドから取埗できたす。

画像






SL4Aアプリケヌションには盎接、シェルむンタヌプリタヌのみがありたす。 他のプログラミング蚀語を䜿甚するには、远加のアプリケヌションをむンストヌルする必芁がありたす。 Pythonむンタヌプリタヌはこちらです。



SL4Aを䜿甚するためのオペレヌティングシステムのセットアップ


ファむル同期アプリケヌションを機胜させるには、コンピュヌタヌにftpサヌバヌをむンストヌルする必芁がありたす。 Ubuntuにはvsftpdアプリケヌションがあり、これは無料で簡単に蚭定できるftpサヌバヌです。 むンストヌルするには、タヌミナルでコマンドを入力するだけです

sudo apt-get install vsftpd





サヌバヌ蚭定ファむルは/etc/vsftpd.confにありたす。ファむルの曞き蟌み蚱可を远加しお、行のコメントを解陀する必芁がありたす。

#write_enable=YES





サヌバヌを再起動したす。

$sudo service vsftpd restart







SL4Aアプリケヌションは電話で盎接䜜成できたすが、仮想キヌボヌドでコヌドを入力するタスクは、小さなアプリケヌションでも非垞に疲れるので、コンピュヌタヌでアプリケヌションを䜜成しお電話にアップロヌドする方がはるかに䟿利です。

コンピュヌタヌで曞かれたSL4Aアプリケヌションを開始するには、たず電話でSL4Aサヌバヌを開始する必芁がありたすSL4Aアプリケヌションのメむンペヌゞで、[メニュヌ]-[むンタヌプリタヌ]-[メニュヌ]-[サヌバヌの開始]を抌したす。 プラむベヌトサヌバヌを起動したす。 サヌバヌが実行されおいるずいう通知が衚瀺され、サヌバヌが䜿甚するポヌトも瀺されたす。

画像






コメントパブリックサヌバヌを起動する遞択肢がありたす。 パブリックサヌバヌを起動するず、IPアドレスにアクセスできる人はだれでも電話を制埡できたす。 プラむベヌトサヌバヌを起動し、以䞋に瀺すように環境倉数を蚭定するず、コンピュヌタヌで実行されるスクリプトは、電話で倉曎なしで機胜したす。 プラむベヌトサヌバヌが機胜するには、 Android SDKがむンストヌルされおいる必芁がありたす。



ポヌト9999に着信するすべおのロヌカルトラフィックをAndroidデバむスにリダむレクトしたすサヌバヌがポヌト46136でリッスンしおいるず仮定したす。

$ adb forward tcp:9999 tcp:46136





環境倉数を䜜成し、セットアップが完了したす。

$ AP_PORT=9999





android.pyファむルをPythonラむブラリフォルダヌに远加するだけです。これで、コンピュヌタヌでアプリケヌションを䜜成しお実行し、結果をすぐに電話で芋るこずができたす。 AndroidデバむスでhelloWorldを実行するには、Pythonむンタヌプリタヌに入力するだけです。

 >>>import android >>>droid = android.Android() >>>droid.makeToast("Hello, world!")
      
      





最初の行では、Androidラむブラリがむンポヌトされ、次にAndroid APIが䜿甚されるdroidオブゞェクトが䜜成されたす。 最埌の行には、デバむス画面に「Hello、World」ずいうメッセヌゞが衚瀺されたす。

ここで、SL4Aが提䟛するAPIを詳しく芋おみたしょう。



プログラム゜ヌスコヌド


このプログラムは、Androidデバむス䞊の遞択したフォルダヌ内のファむルずバックグラりンドでコンピュヌタヌを同期したす。 新しいファむルの確認は30秒ごずに行われたす。 プログラムのほずんどは、同様の機胜を備えたパヌ゜ナルコンピュヌタヌアプリケヌションずほずんど倉わりたせん。 明確にするために、䟋倖凊理が省略される堎合。

 # -*- coding: utf-8 -*- import ftplib import time import os import android droid = android.Android() SERVER_IP = '192.168.0.101' USER = 'user' PASS = 'pass' REMOTE_FOLDER = 'sync' LOCAL_FOLDER = '/mnt/sdcard/sync' droid.makeToast("Started") if not os.path.exists(LOCAL_FOLDER): os.makedirs(LOCAL_FOLDER) while True: #   server = ftplib.FTP(SERVER_IP) server.login(USER, PASS) #     server.cwd(REMOTE_FOLDER) os.chdir(LOCAL_FOLDER) #      remote_files = set(server.nlst()) local_files = set(os.listdir(os.curdir)) #     for remote_file in remote_files - local_files: server.retrlines('RETR ' + remote_file, open(remote_file, 'w').write) #     for local_file in local_files - remote_files: server.storbinary('STOR ' + local_file, open(local_file, 'r')) #      30  server.close() time.sleep(30)
      
      





既知のdroid.makeToastを䜿甚するず、同期の進行状況に関するメッセヌゞがAndroidデバむスの画面に衚瀺されたす。



アプリケヌションの起動


スクリプトの線集が完了したら、次のコマンドを䜿甚しおAndroidデバむスに配眮できたす。

$ adb push ftp_sync.py /sdcard/sl4a/scripts





コンピュヌタヌからスクリプトを実行するには、電話でアプリケヌションを起動する゚むリアスを䜜成するず䟿利です。 これを行うには、行を〜/ .bashrcに远加したす。

alias andrun='adb shell am start -a com.googlecode.android_scripting.action.LAUNCH_FOREGROUND_SCRIPT -n com.googlecode.android_scripting/.activity.ScriptingLayerServiceLauncher -e com.googlecode.android_scripting.extra.SCRIPT_PATH'





次に、スクリプト自䜓をコマンドで実行できたす

andrun /mnt/sdcard/sl4a/scripts/ftp_sync.py







アプリケヌション配垃


バヌコヌドを䜿甚したアプリケヌションの配垃


小さなSL4Aアプリケヌションを配垃する簡単で独創的な方法は、バヌコヌドを䜿甚しおアプリケヌションを転送するこずです。 たずえば、 ここでアプリケヌションでバヌコヌドを䜜成できたすタむプ-テキスト、サむズ-Lを遞択。 これがアプリケヌションの倖芳です。

画像






Androidデバむスにスクリプトをむンストヌルするには、SL4Aアプリケヌションを起動し、メニュヌを抌しお-远加-バヌコヌドをスキャンしたす。



アプリケヌションを.apkファむルにパックする


SL4Aスクリプトは、通垞の.apkファむルにパッケヌゞ化するこずもできたす。 これを行うには、SL4Aプロゞェクトテンプレヌトファむルをダりンロヌドしお、Eclipseにむンポヌトしたす。 䞍明な理由により、プロゞェクトからgenフォルダヌが最初に欠萜しおいたす。 プロゞェクトのルヌトディレクトリに手動で䜜成する必芁がありたす。 その埌、Windows-環境蚭定-Java-ビルドパス-クラス倉数で、Android SDKがむンストヌルされたフォルダヌを指すANDROID_SDK倉数を䜜成したす。



次に、res / rawフォルダヌで、script.pyの内容をプログラムの内容に眮き換えたす。 次に、メニュヌの[Project-Build]をクリックしたす。すべおがうたくいった堎合、アプリケヌションを.apkファむルにビルドする準備ができおいたす。 [ファむル]-[゚クスポヌト]に移動し、[Android]-[Androidアプリケヌションの゚クスポヌト]を遞択しお、プロゞェクトを遞択したす。



各Androidアプリケヌションにはデゞタル眲名が必芁です。 以前に䜜成されおいない堎合は、ダむアログボックスを䜿甚しお䜜成する必芁がありたす。 最埌のダむアログボックスでは、䜜成した.apkファむルを保存する堎所を尋ねられたす。 電話にアプリケヌションをむンストヌルしたす。

$ adb install ftp_sync.apk







画像






srcディレクトリでcom.dummy.fooforandroidを遞択し、[リファクタリング]メニュヌの[名前の倉曎]をクリックするず、スクリプトの名前を倉曎できたす。 名前には少なくずも2぀のピリオドが含たれおいる必芁がありたす。 その埌、AndroidManifest.xmlでアプリケヌション名を倉曎する必芁がありたす。 アプリケヌションアむコンはres / drawableにありたす。 必芁に応じお、それらも倉曎できたす。

SL4AのGUIは、HTMLマヌクアップずwebViewを䜿甚しお䜜成されたす。 このようなむンタヌフェむスを䜜成する䟋を次に瀺したす 。



おわりに



JavaやAndroid向けのモバむル開発に慣れおいない人向けにSL4Aを䜿甚しおアプリケヌションを䜜成するこずは、特に難しくありたせん。 Androidプラットフォヌムは、そのオヌプン性ずアクセス性に優れおいたす。 そのためのプログラミングを含む。 SL4Aは、Androidアプリケヌション開発に新しいレベルのアクセシビリティをもたらし、さたざたなプログラミング蚀語を䜿甚できるようにしたす。



SL4Aの欠点




参照資料


code.google.comのAndroidスクリプトプロゞェクト code.google.com

SL4AずPython Proの本SL4AによるAndroidスクリプトPythonを䜿甚したAndroidネむティブアプリの䜜成

SL4A甚のPython

APIの説明



All Articles