mercurial 怎么可能 运行 on android?
How can mercurial be run on android?
这个 page 文档 运行 旧版本 (1.8.4) 的 mercurial 但说
"(later versions need an unavaliable python module named grp)"
这是我使用 Ubuntu 16.04 机器和英特尔 64 位 android 模拟器 运行ning 在 Windows 7、使用mercurial 3.7.3
使用 Ubuntu 系统,按照这些 instructions 创建能够 运行ning hg 的 python 2.7 版本。
将python复制到android设备上的应用程序文件目录中(以便可以执行)
在 windows 主机上
adb push python279.x86_64 /sdcard
adb -e shell
在 android 设备上
cd /data/user/0/$SOMEAPPDIR/files
cp -Rav /scard/python279.x86_64 .
使 python 可执行
chmod +x python279.x86_64/bin/python2.7
设置一些环境变量需要在 android
上制作 python 运行
出口LD_LIBRARY_PATH=/data/user/0/$SOMEAPPDIR/files/python279.x86_64/lib
导出LD_PRELOAD=libffi.so:libbz2.so
导出路径=$路径:/data/user/0/$SOMEAPPDIR/files/python279.x86_64/bin
Python 现在应该可以 运行 和 python2.7
在 Ubuntu 主机上构建 mercurial。
download 水银 3.7.3
uz mercurial-3.7.3.tar.gz
cd mercurial-3.7.3 && make all
主页=$PWD/dist 安装
稍作修改
cd dist/mercurial-3.7.3/dist/lib/python/mercurial
rm *.so
cp 纯/*.py .
编辑 posix.py 并删除“import grp”行。
将 mercurial 复制到 android 设备上
在 windows 主机上
adb push dist /sdcard
adb -e shell
在 android 设备上
cd /data/user/0/$SOMEAPPDIR/files
cp /sdcard/dist .
别名 hg 以便于使用
别名 hg='python2.7 /data/user/0/$SOMEAPPDIR/files/dist/bin/hg'
Hg 现在应该可以在 android 设备上使用了。
甚至可以克隆远程存储库,但我还必须传递 --insecure
标志以绕过 ssl 错误。
“2017 年 2 月 15 日”制作的 工作正常,但有一个相当大的缺点。
这个答案解决了这个缺点,旨在与之前的答案结合使用。
问题
这个程序:
rm *.so
cp pure/*.py .
删除本机库并使用这些库的 python 'pure' 实现。这在处理大型存储库时会导致严重的性能问题,尤其是在速度较慢的 android 设备上。
解决方案
使用 android ndk 交叉编译 mercurial,生成可在 android.
上使用的本机库
我在 mercurial 4.8.2 fork 中添加了一些辅助脚本,使交叉编译更容易。
Linux说明:
克隆存储库
hg clone https://bitbucket.org/hindlemail/hg-stable-android/
更新至 331892efe015
hg update -r 331892efe015
为具有适当值的环境变量设置这些:
提供 android NDK
的位置
ANDROID_NDK="$HOME/Android/android-ndk-r13b"
指定构建架构 - (armeabi, x86, x86_64, arm64)
ARCH="armeabi"
指定目标android sdk版本
PLATFORM="android-22"
指定交叉编译的输出python。
(有关更多信息,请参阅 2017 年 2 月 15 日的回答)
PYTHONDIR="/usr/local/android/install/python279.arm22"
运行 crosscompile.sh
这个 page 文档 运行 旧版本 (1.8.4) 的 mercurial 但说
"(later versions need an unavaliable python module named grp)"
这是我使用 Ubuntu 16.04 机器和英特尔 64 位 android 模拟器 运行ning 在 Windows 7、使用mercurial 3.7.3
使用 Ubuntu 系统,按照这些 instructions 创建能够 运行ning hg 的 python 2.7 版本。
将python复制到android设备上的应用程序文件目录中(以便可以执行)
在 windows 主机上
adb push python279.x86_64 /sdcard
adb -e shell
在 android 设备上
cd /data/user/0/$SOMEAPPDIR/files
cp -Rav /scard/python279.x86_64 .
使 python 可执行
chmod +x python279.x86_64/bin/python2.7
设置一些环境变量需要在 android
上制作 python 运行出口LD_LIBRARY_PATH=/data/user/0/$SOMEAPPDIR/files/python279.x86_64/lib
导出LD_PRELOAD=libffi.so:libbz2.so
导出路径=$路径:/data/user/0/$SOMEAPPDIR/files/python279.x86_64/bin
Python 现在应该可以 运行 和 python2.7
在 Ubuntu 主机上构建 mercurial。
download 水银 3.7.3
uz mercurial-3.7.3.tar.gz
cd mercurial-3.7.3 && make all
主页=$PWD/dist 安装
稍作修改
cd dist/mercurial-3.7.3/dist/lib/python/mercurial
rm *.so
cp 纯/*.py .
编辑 posix.py 并删除“import grp”行。
将 mercurial 复制到 android 设备上
在 windows 主机上
adb push dist /sdcard
adb -e shell
在 android 设备上
cd /data/user/0/$SOMEAPPDIR/files
cp /sdcard/dist .
别名 hg 以便于使用
别名 hg='python2.7 /data/user/0/$SOMEAPPDIR/files/dist/bin/hg'
Hg 现在应该可以在 android 设备上使用了。
甚至可以克隆远程存储库,但我还必须传递 --insecure
标志以绕过 ssl 错误。
“2017 年 2 月 15 日”制作的
问题
这个程序:
rm *.so
cp pure/*.py .
删除本机库并使用这些库的 python 'pure' 实现。这在处理大型存储库时会导致严重的性能问题,尤其是在速度较慢的 android 设备上。
解决方案
使用 android ndk 交叉编译 mercurial,生成可在 android.
上使用的本机库我在 mercurial 4.8.2 fork 中添加了一些辅助脚本,使交叉编译更容易。
Linux说明:
克隆存储库
hg clone https://bitbucket.org/hindlemail/hg-stable-android/
更新至 331892efe015
hg update -r 331892efe015
为具有适当值的环境变量设置这些:
提供 android NDK
的位置ANDROID_NDK="$HOME/Android/android-ndk-r13b"
指定构建架构 - (armeabi, x86, x86_64, arm64)
ARCH="armeabi"
指定目标android sdk版本
PLATFORM="android-22"
指定交叉编译的输出python。
(有关更多信息,请参阅 2017 年 2 月 15 日的回答)
PYTHONDIR="/usr/local/android/install/python279.arm22"
运行
crosscompile.sh