本页面记录了在Android上运行旧版本(1.8.4)Mercurial的方法,但是指出:
"(更高版本需要一个不可用的Python模块名叫grp)"
这是我使用Ubuntu 16.04机器和在Windows 7上运行的Intel 64位安卓模拟器,使用mercurial 3.7.3完成的方法(但我仍然很想听听其他替代方法)
在Ubuntu系统上,按照说明创建一个2.7版本的Python,可以运行hg。
将Python复制到Android设备的应用文件目录中(以便执行)
adb push python279.x86_64 /sdcard
adb -e shell
cd /data/user/0/$SOMEAPPDIR/files
cp -Rav /scard/python279.x86_64 .
chmod +x python279.x86_64/bin/python2.7
export LD_LIBRARY_PATH=/data/user/0/$SOMEAPPDIR/files/python279.x86_64/lib
export LD_PRELOAD=libffi.so:libbz2.so
export PATH=$PATH:/data/user/0/$SOMEAPPDIR/files/python279.x86_64/bin
现在可以使用Python2.7运行Python。
在Ubuntu主机上构建mercurial。
下载 mercurial 3.7.3
uz mercurial-3.7.3.tar.gz
cd mercurial-3.7.3 && make all
HOME=$PWD/dist make install
进行小的修改
cd dist/mercurial-3.7.3/dist/lib/python/mercurial
rm *.so
cp pure/*.py .
编辑posix.py并删除"import grp"行。
将mercurial复制到Android设备上
adb push dist /sdcard
adb -e shell
cd /data/user/0/$SOMEAPPDIR/files
cp /sdcard/dist .
alias hg='python2.7 /data/user/0/$SOMEAPPDIR/files/dist/bin/hg'
--insecure
标志以绕过SSL错误。
在“2017年2月15日”发布的答案很好用,但有一个相当大的缺点。这个答案解决了这个缺点,并旨在与之前的答案一起使用。
这个过程:
rm *.so
cp pure/*.py .
移除本地库并使用Python“纯”实现这些库。当处理大型存储库时,特别是在较慢的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="$HOME/Android/android-ndk-r13b"
ARCH="armeabi"
PLATFORM="android-22"
(有关更多信息,请参见2017年2月15日的答案)
PYTHONDIR="/usr/local/android/install/python279.arm22"
运行crosscompile.sh