何弃疗是什么意思| 什么然而止| 小太阳是什么意思| 甲醛会导致什么病| 猫薄荷对猫有什么作用| 喝茶对身体有什么好处| 固表是什么意思| 38岁属什么生肖| 置换补贴什么意思| 尿道流脓吃什么药| 嗓子哑是什么原因| 西红柿拌白糖又叫什么| 冬枣为什么叫冬枣| 指甲是白色的是什么原因| 故步自封是什么意思| 紫苏有什么功效与作用| 脚面麻木是什么原因| 天天做梦是什么原因| 腰扭伤挂什么科| 什么药治拉肚子| 龟头炎的症状是什么样| 秦皇岛是什么海| 2014年什么年| 氨水是什么| 磁场是什么| 朋友圈提到了我是什么意思| 吃生葵花籽有什么好处和坏处吗| 你什么我什么成语| 28周检查什么项目| 阴虚内热吃什么药好| 人肉搜索是什么| 鬼怕什么东西| 下下签是什么意思| 辩证法是什么| 什么叫做t| 吝啬的意思是什么| 三点水加一个心读什么| 丧偶是什么意思| 口苦尿黄是什么原因| 铁蛋白高挂什么科| 7月17日是什么星座| 5月7号是什么星座| 异国他乡的异是什么意思| 端午节为什么吃粽子| 6月23号是什么星座| 左边后背疼是什么原因| 今年三十属什么| 天意是什么意思| 绿皮鸡蛋是什么品种鸡| 痱子是什么样的| 备孕男性吃什么精子强| 剔除是什么意思| 2024年是属什么生肖| 生育保险是什么| 粉尘螨是什么| 做梦梦到蜘蛛是什么意思| lily是什么牌子| 什么人容易得脑溢血| 穗字五行属什么| 女人吃维生素b有什么好处| 蛇缠腰是什么| 安宫牛黄丸什么时候吃最好| 安慰的意思是什么| 百香果有什么好处功效| 陛下的陛是什么意思| 脸上长黑斑是什么原因引起的| 猫代表什么数字| 吃什么补肾虚| 爱出者爱返福往者福来是什么意思| 什么叫造影| 小孩肚脐眼上面疼是什么原因| 肺栓塞有什么症状| 就不告诉你就不告诉你是什么儿歌| 小便带血什么原因| sy什么意思| 上位者是什么意思| 银屑病用什么药膏| hoho是什么意思| 什么是牛蒡| 蒲公英和玫瑰花一起泡有什么功效| 湿气重去医院挂什么科| 星光是什么意思| 舌头起泡是什么原因| 胳肢窝痒是什么原因| 多吃洋葱有什么好处| 益生菌什么时间段吃效果好| 孕妇梦见狗是什么意思| edenbo是什么牌子| 海粉是什么| 地面铺什么最环保| ca医学上是什么意思| 金代表什么数字| 系带是什么| 拔完牙可以吃什么| 12月15日什么星座| 四级专家是什么级别| 女性肝囊肿要注意什么| 子宫肌壁回声不均匀是什么意思| 醋泡葡萄干有什么功效和作用| 五谷中的菽是指什么| 喝水多尿多是什么原因男性| 辅警政审主要审些什么| 黄芪泡水喝有什么作用| 经常失眠是什么原因| impress是什么意思| 久坐睾丸疼是什么原因| 什么牌空调好用又省电| 双相是什么| 膝盖积液用什么药最好| 老是口腔溃疡是什么原因| 狗狗喝什么水| 魔芋是什么植物| cooc香水是什么牌子的| 代谢是什么| ntr是什么意思| 加拿大用什么货币| 梦见跟妈妈吵架是什么意思| 我是舅舅的什么人| 解禁是什么意思| but什么意思| 老婆饼是什么馅| 怀孕肚子痒是什么原因| 自愈是什么意思| 爆肝是什么意思| 吃什么可以补钙| 消化性溃疡吃什么药好| 分泌物发黄是什么原因| 脑鸣挂什么科| 甲状腺亢进是什么意思| 尿酸查什么| 导盲犬一般是什么品种| da是什么单位| 封神榜是什么意思| 什么工作最赚钱| 嗓子痛吃什么药好得快| 鱼油有什么功效| 颤栗是什么意思| 马蹄是什么| 用红笔写名字代表什么| 离心是什么意思| 陌上花是什么意思| 尿黄是什么原因引起的| 吃什么对眼睛有好处| 什么人不能吃鸡蛋| 自信过头叫什么| 什么歌最好听| 白细胞增多是什么原因| 荷叶泡水喝有什么功效| 强的松又叫什么| 梦到生孩子是什么意思| 打羽毛球有什么好处| 阑尾是什么| 长期喝什么水可以美白| 乘载和核载是什么意思| 肺部有问题一般会出现什么症状| 尿道口发炎用什么药| 吃地瓜叶有什么好处和坏处| 周岁是什么意思| 什么能软化血管| 野生型是什么意思| 草口耳是什么字| 身份证x代表什么| 杏色配什么颜色好看| 梦到丧事场面什么意思| 洗衣机启动不了是什么原因| 白头发有什么方法变黑| 浅紫色配什么颜色好看| 原始分是什么意思| 总感觉自己有病是什么心理病| 金牛座是什么象星座| 什么扑鼻| 看对眼是什么意思| dostinex是什么药| 脑梗死是什么意思| 四面楚歌是什么生肖| 急腹症是什么意思| 戒指上的s925是什么意思| 心脏缺血吃什么药最好| 小孩吃什么有营养| 脸上皮肤痒是什么原因| 拉泡泡屎是什么原因| 皮肌炎是什么症状| www指什么| 头疼什么原因| 精子成活率低吃什么药| 排卵期有什么感觉| 出汗臭是什么原因| 湿气重挂什么科| 黄瓜吃了有什么好处| 喝醋有什么好处| 龙的本命佛是什么佛| 你在纠结什么| 电信积分有什么用| 168红包代表什么意思| 本来无一物何处惹尘埃什么意思| 菠萝蜜是什么季节的水果| 喉咙痛感冒吃什么药| cook是什么意思| 医院验光挂什么科| 舌头热灼是什么原因| 眼睛出现重影是什么原因| 什么感| 次氯酸钠是什么| 巡警是做什么的| 木命的人适合佩戴什么首饰| 自汗恶风是什么意思| 医学是什么| phoebe是什么意思| 例假吃什么水果好| 户籍地址填什么| 清华校长什么级别| 出口伤人是什么生肖| 枸杞配什么壮阳| 汕是什么意思| 威胁是什么意思| 肝低密度灶是什么意思| 16 5是什么码| 类风湿因子高吃什么药| 背疼什么原因| 刘字是什么偏旁| 5.29什么星座| 肌肉拉伤是什么感觉| 高送转是什么意思| 玄色是什么颜色| 拔牙后可以吃什么食物| 子宫内膜不典型增生是什么意思| 打嗝用什么药| b型血为什么叫贵族血| 汛期什么意思| 暗戳戳是什么意思| 7.23什么星座| 保温壶什么内胆最健康| 四大天王是什么生肖| 腿疼膝盖疼是什么原因| 咖啡有什么作用| 霜和乳有什么区别| 梦见老虎是什么预兆| 山梨糖醇是什么| 儿童腮腺炎吃什么药| 乔丹是什么牌子| 小孩出冷汗是什么原因| 什么是尖锐湿疣| 做梦是什么原因| bmi是什么意思啊| 儿童流鼻涕吃什么药| 蜻蜓是什么动物| lop胎位是什么意思| 感冒喉咙痛吃什么药| 门口放什么植物好风水| 康斯坦丁是什么意思| 过期药品属于什么垃圾| 京东自营店是什么意思| 老人头发由白变黑是什么原因| 破壁机是干什么用的| 喉咙看什么科| 小姑子是什么关系| 减肥吃什么坚果| 葛根长什么样子图片| 白案是什么意思| 崩漏是什么意思| 你在左边我紧靠右是什么歌| 无济于事的济是什么意思| 男性婚检都检查什么项目| 孕妇拉肚子是什么原因引起的| 百度 Skip to main content

Python on Android

Note: This post is out of date. If you'd like to run Python on your Android device, please see my Android Scripting Environment project.

Here's an early Christmas present for all those Python fanatics (self included) out there! With a lot of help from my friends (thanks Manuel and Thomas!) I managed to install Python 2.4.5 on my G1. It's still rough around the edges, but I think it's a good start. Klaus Reimer has a nice overview of how to cross-compile Python. My instructions borrow a lot from his.
  • Download and build the Android source. These directions assume that you have installed the source to /android_src.
  • Download and build the Python 2.4.5 source. These directions assume that you have installed the source to /python_src.
  • Make copies of python and pgen for use later in the build process then clean up.
$ cd /python_src
$ cp python hostpython
$ cp Parser/pgen Parser/hostpgen
$ make distclean
  • Apply the following patch to the Python source.
diff -r -c -b Python-2.4.5/Makefile.pre.in Python-2.4.5-android/Makefile.pre.in
*** Python-2.4.5/Makefile.pre.in Sun Oct 8 19:41:25 2006
--- Python-2.4.5-android/Makefile.pre.in Fri Dec 19 10:02:17 2008
***************
*** 166,171 ****
--- 166,172 ----

PYTHON= python$(EXE)
BUILDPYTHON= python$(BUILDEXE)
+ HOSTPYTHON= ./$(BUILDPYTHON)

# === Definitions added by makesetup ===

***************
*** 192,197 ****
--- 193,199 ----
##########################################################################
# Parser
PGEN= Parser/pgen$(EXE)
+ HOSTPGEN= $(PGEN)

POBJS= \
Parser/acceler.o \
***************
*** 324,331 ****
# Build the shared modules
sharedmods: $(BUILDPYTHON)
case $$MAKEFLAGS in \
! *-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py -q build;; \
! *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' ./$(BUILDPYTHON) -E $(srcdir)/setup.py build;; \
esac

# buildno should really depend on something like LIBRARY_SRC
--- 326,333 ----
# Build the shared modules
sharedmods: $(BUILDPYTHON)
case $$MAKEFLAGS in \
! *-s*) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(HOSTPYTHON) -E $(srcdir)/setup.py -q build;; \
! *) $(RUNSHARED) CC='$(CC)' LDSHARED='$(BLDSHARED)' OPT='$(OPT)' $(HOSTPYTHON) -E $(srcdir)/setup.py build;; \
esac

# buildno should really depend on something like LIBRARY_SRC
***************
*** 455,461 ****


$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
! -$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

$(PGEN): $(PGENOBJS)
$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
--- 457,463 ----


$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
! -$(HOSTPGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

$(PGEN): $(PGENOBJS)
$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)
***************
*** 748,767 ****
done; \
done
$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
! PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! ./$(BUILDPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
-d $(LIBDEST) -f \
-x 'badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
! PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! ./$(BUILDPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
-d $(LIBDEST) -f \
-x 'badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! ./$(BUILDPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
-d $(LIBDEST)/site-packages -f \
-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! ./$(BUILDPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
-d $(LIBDEST)/site-packages -f \
-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages

--- 750,769 ----
done; \
done
$(INSTALL_DATA) $(srcdir)/LICENSE $(DESTDIR)$(LIBDEST)/LICENSE.txt
! -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! $(HOSTPYTHON) -Wi -tt $(DESTDIR)$(LIBDEST)/compileall.py \
-d $(LIBDEST) -f \
-x 'badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
! -PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! $(HOSTPYTHON) -Wi -tt -O $(DESTDIR)$(LIBDEST)/compileall.py \
-d $(LIBDEST) -f \
-x 'badsyntax|site-packages' $(DESTDIR)$(LIBDEST)
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! $(HOSTPYTHON) -Wi -t $(DESTDIR)$(LIBDEST)/compileall.py \
-d $(LIBDEST)/site-packages -f \
-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages
-PYTHONPATH=$(DESTDIR)$(LIBDEST) $(RUNSHARED) \
! $(HOSTPYTHON) -Wi -t -O $(DESTDIR)$(LIBDEST)/compileall.py \
-d $(LIBDEST)/site-packages -f \
-x badsyntax $(DESTDIR)$(LIBDEST)/site-packages

***************
*** 856,862 ****
# Install the dynamically loadable modules
# This goes into $(exec_prefix)
sharedinstall:
! $(RUNSHARED) ./$(BUILDPYTHON) -E $(srcdir)/setup.py install \
--prefix=$(prefix) \
--install-scripts=$(BINDIR) \
--install-platlib=$(DESTSHARED) \
--- 858,864 ----
# Install the dynamically loadable modules
# This goes into $(exec_prefix)
sharedinstall:
! $(RUNSHARED) $(HOSTPYTHON) -E $(srcdir)/setup.py install \
--prefix=$(prefix) \
--install-scripts=$(BINDIR) \
--install-platlib=$(DESTSHARED) \
diff -r -c -b Python-2.4.5/Modules/pwdmodule.c Python-2.4.5-android/Modules/pwdmodule.c
*** Python-2.4.5/Modules/pwdmodule.c Wed Sep 27 21:17:32 2006
--- Python-2.4.5-android/Modules/pwdmodule.c Fri Dec 19 10:26:14 2008
***************
*** 77,83 ****
#ifdef __VMS
SETS(setIndex++, "");
#else
! SETS(setIndex++, p->pw_gecos);
#endif
SETS(setIndex++, p->pw_dir);
SETS(setIndex++, p->pw_shell);
--- 77,83 ----
#ifdef __VMS
SETS(setIndex++, "");
#else
! SETS(setIndex++, "");//p->pw_gecos);
#endif
SETS(setIndex++, p->pw_dir);
SETS(setIndex++, p->pw_shell);
diff -r -c -b Python-2.4.5/Modules/socketmodule.c Python-2.4.5-android/Modules/socketmodule.c
*** Python-2.4.5/Modules/socketmodule.c Tue Oct 10 18:20:41 2006
--- Python-2.4.5-android/Modules/socketmodule.c Fri Dec 19 17:51:36 2008
***************
*** 61,66 ****
--- 61,67 ----

*/

+ #define INET_ADDRSTRLEN 16
#ifdef __APPLE__
/*
* inet_aton is not available on OSX 10.3, yet we want to use a binary
diff -r -c -b Python-2.4.5/Objects/fileobject.c Python-2.4.5-android/Objects/fileobject.c
*** Python-2.4.5/Objects/fileobject.c Tue Jan 23 16:09:19 2007
--- Python-2.4.5-android/Objects/fileobject.c Fri Dec 19 16:47:32 2008
***************
*** 1,5 ****
--- 1,6 ----
/* File object implementation */

+ #include "/android_src/bionic/libc/stdio/clrerr.c"
#include "Python.h"
#include "structmember.h"

diff -r -c -b Python-2.4.5/Python/pystrtod.c Python-2.4.5-android/Python/pystrtod.c
*** Python-2.4.5/Python/pystrtod.c Tue Jun 8 20:52:54 2004
--- Python-2.4.5-android/Python/pystrtod.c Fri Dec 19 10:18:11 2008
***************
*** 54,61 ****

fail_pos = NULL;

! locale_data = localeconv();
! decimal_point = locale_data->decimal_point;
decimal_point_len = strlen(decimal_point);

assert(decimal_point_len != 0);
--- 54,61 ----

fail_pos = NULL;

! //locale_data = localeconv();
! decimal_point = '.';//locale_data->decimal_point;
decimal_point_len = strlen(decimal_point);

assert(decimal_point_len != 0);
***************
*** 218,225 ****

PyOS_snprintf(buffer, buf_len, format, d);

! locale_data = localeconv();
! decimal_point = locale_data->decimal_point;
decimal_point_len = strlen(decimal_point);

assert(decimal_point_len != 0);
--- 218,225 ----

PyOS_snprintf(buffer, buf_len, format, d);

! //locale_data = localeconv();
! decimal_point = '.';//locale_data->decimal_point;
decimal_point_len = strlen(decimal_point);

assert(decimal_point_len != 0);
diff -r -c -b Python-2.4.5/setup.py Python-2.4.5-android/setup.py
*** Python-2.4.5/setup.py Sun Oct 8 19:41:25 2006
--- Python-2.4.5-android/setup.py Fri Dec 19 17:26:29 2008
***************
*** 15,21 ****
from distutils.command.install_lib import install_lib

# This global variable is used to hold the list of modules to be disabled.
! disabled_module_list = []

def add_dir_to_list(dirlist, dir):
"""Add the directory 'dir' to the list 'dirlist' (at the front) if
--- 15,33 ----
from distutils.command.install_lib import install_lib

# This global variable is used to hold the list of modules to be disabled.
! disabled_module_list = [
! '_ctypes',
! '_curses',
! '_curses_panel',
! '_locale',
! '_ssl',
! 'crypt',
! 'linuxaudiodev',
! 'nis',
! 'ossaudiodev',
! 'readline',
! 'zlib',
! ]

def add_dir_to_list(dirlist, dir):
"""Add the directory 'dir' to the list 'dirlist' (at the front) if
***************
*** 199,204 ****
--- 211,218 ----
self.announce('WARNING: skipping import check for Cygwin-based "%s"'
% ext.name)
return
+ if os.environ.get('CROSS_COMPILE') == 'yes':
+ return
ext_filename = os.path.join(
self.build_lib,
self.get_ext_filename(self.get_ext_fullname(ext.name)))
  • Download agcc.
  • Make a copy of agcc called ag++ and apply the following patch.
*** agcc 2025-08-08 18:22:48.000000000 +0100
--- ag++ 2025-08-08 21:19:21.000000000 +0100
***************
*** 32,41 ****

# Dance around to find the actual android toolchain path (it's very
# deep, so links on $PATH are going to be common.
! my $GCC = `which arm-eabi-gcc`;
$GCC = qx(cd `dirname $GCC`; /bin/pwd);
chomp $GCC;
! die "bad arm-eabi-gcc path" if $GCC !~ /(.*)\/prebuilt\//;
my $DROID = $1;

my $ALIB = "$DROID/out/target/product/generic/obj/lib";
--- 32,41 ----

# Dance around to find the actual android toolchain path (it's very
# deep, so links on $PATH are going to be common.
! my $GCC = `which arm-eabi-g++`;
$GCC = qx(cd `dirname $GCC`; /bin/pwd);
chomp $GCC;
! die "bad arm-eabi-g++ path" if $GCC !~ /(.*)\/prebuilt\//;
my $DROID = $1;

my $ALIB = "$DROID/out/target/product/generic/obj/lib";
***************
*** 174,180 ****
if($have_src and $mode ne "-E") { $need_cpp = $need_compile = 1; }

# Assemble the command:
! my @cmd = ("arm-eabi-gcc");
if($mode ne "DEFAULT") { @cmd = (@cmd, $mode); }
if(defined $out) { @cmd = (@cmd, "-o", $out); }
if($need_cpp) { @cmd = (@cmd, @include_paths, @preprocess_args); }
--- 174,180 ----
if($have_src and $mode ne "-E") { $need_cpp = $need_compile = 1; }

# Assemble the command:
! my @cmd = ("arm-eabi-g++");
if($mode ne "DEFAULT") { @cmd = (@cmd, $mode); }
if(defined $out) { @cmd = (@cmd, "-o", $out); }
if($need_cpp) { @cmd = (@cmd, @include_paths, @preprocess_args); }
  • Add agcc and ag++ to your path.
  • Add /android_src/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin to your path (the Android toolchain).
  • Add /android_src/out/host/linux-x86/bin to your path (the Android development tools).
  • Reconfigure Python for Android.
$ CROSS_COMPILE=yes CXX=ag++ CC=agcc AR=arm-eabi-ar \
RANLIB=arm-eabi-ranlib LD=arm-eabi-ld AS=arm-eabi-as \
STRIP=arm-eabi-strip ./configure --host=linux --build=arm-linux --prefix=/data
  • Remove the posix module from the Makefile and from /python_src/Modules/config.c using the following patch.
*** Python-2.4.5/Makefile Fri Dec 19 22:21:20 2008
--- Python-2.4.5-android/Makefile Fri Dec 19 22:23:50 2008
***************
*** 21,27 ****

# === Variables set by makesetup ===

! MODOBJS= Modules/threadmodule.o Modules/signalmodule.o Modules/posixmodule.o Modules/errnomodule.o Modules/pwdmodule.o Modules/_sre.o Modules/_codecsmodule.o Modules/zipimport.o Modules/symtablemodule.o Modules/xxsubtype.o
MODLIBS= $(LOCALMODLIBS) $(BASEMODLIBS)

# === Variables set by configure
--- 21,27 ----

# === Variables set by makesetup ===

! MODOBJS= Modules/threadmodule.o Modules/signalmodule.o Modules/errnomodule.o Modules/pwdmodule.o Modules/_sre.o Modules/_codecsmodule.o Modules/zipimport.o Modules/symtablemodule.o Modules/xxsubtype.o
MODLIBS= $(LOCALMODLIBS) $(BASEMODLIBS)

# === Variables set by configure
*** Python-2.4.5/Modules/config.c Fri Dec 19 22:21:20 2008
--- Python-2.4.5-android/Modules/config.c Fri Dec 19 22:26:06 2008
***************
*** 21,27 ****

extern void initthread(void);
extern void initsignal(void);
! extern void initposix(void);
extern void initerrno(void);
extern void initpwd(void);
extern void init_sre(void);
--- 21,27 ----

extern void initthread(void);
extern void initsignal(void);
! //extern void initposix(void);
extern void initerrno(void);
extern void initpwd(void);
extern void init_sre(void);
***************
*** 40,46 ****

{"thread", initthread},
{"signal", initsignal},
! {"posix", initposix},
{"errno", initerrno},
{"pwd", initpwd},
{"_sre", init_sre},
--- 40,46 ----

{"thread", initthread},
{"signal", initsignal},
! // {"posix", initposix},
{"errno", initerrno},
{"pwd", initpwd},
{"_sre", init_sre},
  • Build and install Python to a local directory.
$ make install prefix=./python-android HOSTPYTHON=./hostpython \
HOSTPGEN=./Parser/hostpgen BLDSHARED="agcc -shared" CROSS_COMPILE=yes
  • Remove some unnecessary files and push Python to your G1 or emulator.
$ cd ./python-android
$ rm -rf man include lib/python2.4/test
$ find . -name '*.pyc' -exec rm {} \;
$ find . -name '*.pyo' -exec rm {} \;
$ find . -type d -not -name '.' | perl -pe 's,\./,/data/,' | xargs -L1 adb shell mkdir
$ adb push . data
And here it is.


Update
I've uploaded the python2.4 binary I built for Android. It's missing lots of libraries, but it runs :) I haven't corrected the build instructions yet, but I'll hopefully get to that soon.

Popular posts from this blog

Bot Commander r1 Released

I just published Bot Commander , the code for my Lego NXT rover . There's a lot left to be done, but release early and often, right? Currently it provides a UI for controlling the direction and speed of all three motor ports on the NXT brick. You can link motors together to adjust their speed in unison. In addition, you can enable "Tilt Control" for a steering-wheel-type experience. To use tilt control: Hook up motor A and B to be the left and right wheels of your vehicle. Hold the phone sideways (i.e. landscape). Tilt the phone forward and backward to drive forward and backward. Turn the phone right and left (like a steering wheel) to steer right and left. As you tilt the phone, you'll see the UI update the slider controls for the speed of motors A and B. I plan to expand the UI to provide a lot more than just motor control. Before that, though, I'll push a JAR to make it easy to integrate control of Lego NXT robots into your own Android project. The code...
Read more

Email Injection

Not so long ago, I ran a wiki called SecurePHP. On that wiki, there was one particular article about email injection that received a lot of attention. Naturally, with all the attention came lots of spam. As a result, I disabled editing of the wiki and content stagnated. Still, the email injection article remained popular. About a year later, the server that hosted SecurePHP died and I never had a chance to hook it all back up. I saved the article though and I'm reposting it now. It may be a bit old (I've been away from PHP for a long time), and I didn't write all of it, so feel free to leave comments about needed updates and corrections. Though this article focuses on PHP, it provides a lot of general information regarding email injection attacks. The PHP mail() Function There are a lot of ways to send anonymous emails, some use it to mass mail, some use it to spoof identity, and some (a few) use it to send email anonymously. Usually a web mailform using the mail() funct...
Read more
钊字五行属什么 松子吃多了有什么害处 头晕耳鸣是什么原因引起的 什么叫三焦 猪八戒的真名叫什么
六月初一是什么日子 脸上爱出汗是什么原因 什么的色彩 男人梦见蛇是什么预兆 反弹是什么意思
番茄酱可以做什么菜 叶酸片有什么功效 梦见自己出轨是什么意思 甘油三酯高吃什么药好 腱鞘炎贴什么膏药
教师节送老师什么礼物最好 脖子淋巴结肿大是什么原因 女人烂桃花多说明什么 小孩子不吃饭是什么原因引起的 pc什么意思
瘖什么意思hcv7jop6ns6r.cn 梦见死人的场面是什么兆头hcv8jop0ns4r.cn 手指尖疼是什么原因hcv9jop6ns1r.cn 什么发抖hcv8jop5ns2r.cn 3月28号是什么星座xinmaowt.com
代谢不好是什么原因dayuxmw.com 6岁儿童为什么会长腿毛hanqikai.com 肾尿盐结晶是什么意思hcv8jop5ns3r.cn 高密度脂蛋白胆固醇是什么意思hcv9jop5ns6r.cn 痛风要吃什么药好得快hcv8jop5ns2r.cn
例假推迟是什么原因引起的tiangongnft.com 一个三点水一个及念什么hcv9jop7ns0r.cn 3.1415926是什么意思hcv7jop5ns5r.cn 直肠癌是什么症状hcv8jop1ns0r.cn 腹泻拉稀水是什么原因hcv9jop2ns5r.cn
萘普生是什么药hcv8jop7ns8r.cn 似是而非是什么意思hcv9jop6ns0r.cn apm是什么牌子hcv9jop4ns4r.cn 家庭烧烤准备什么食材hcv9jop2ns6r.cn 什么是肺纤维化hcv8jop9ns4r.cn
百度