将Python移植到android环境下(附件Python modules)

硬件环境:华硕thinkerboard (Android os)

首先需要使用NDK进行交叉编译, 编译环境使用ubuntu 14.04 64位, android ndk版本为r14b, python版本为2.7.9

设置编译环境

  • 编译主机版本,创建"Parser/pgen"
  1. ./configure  
  2. . make                 
  3.   make install               
设置编译环境(armeabi)
  1. export ANDROID_NDK="/usr/local/android/android-ndk-r14b"  
  2. export PATH="$ANDROID_NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/:$ANDROID_NDK:$ANDROID_NDK/tools:/usr/local/bin:/usr/bin:/bin:$PATH"  
  3. export ARCH="armeabi"  
  4. export CFLAGS="-DANDROID -mandroid -fomit-frame-pointer --sysroot=$ANDROID_NDK/platforms/android-21/arch-arm"  
  5. export CXXFLAGS="$CFLAGS"  
  6. export CC="arm-linux-androideabi-gcc $CFLAGS"  
  7. export CXX="arm-linux-androideabi-g++ $CXXFLAGS"  
  8. export AR="arm-linux-androideabi-ar"  
  9. export RANLIB="arm-linux-androideabi-ranlib"  
  10. export STRIP="arm-linux-androideabi-strip --strip-unneeded"  
  11. export READELF="arm-linux-androideabi-readelf"  
  12. export MAKE="make -j4 CROSS_COMPILE_TARGET=yes"  
  13. export CONFIG_SITE="config.site"              
  14.                   
设置编译环境(x86)
  1.                             
  2. export ANDROID_NDK="/usr/local/android/android-ndk-r14b"  
  3. export PATH="$ANDROID_NDK/toolchains/x86-4.9/prebuilt/linux-x86_64/bin/:$ANDROID_NDK:$ANDROID_NDK/tools:/usr/local/bin:/usr/bin:/bin:$PATH"  
  4. export ARCH="x86"  
  5. export CFLAGS="-DANDROID -mandroid -fomit-frame-pointer --sysroot=$ANDROID_NDK/platforms/android-21/arch-x86"  
  6. export CXXFLAGS="$CFLAGS"  
  7. export CC="i686-linux-android-gcc $CFLAGS"  
  8. export CXX="i686-linux-android-g++ $CXXFLAGS"  
  9. export AR="i686-linux-android-ar"  
  10. export RANLIB="i686-linux-android-ranlib"  
  11. export STRIP="i686-linux-android-strip --strip-unneeded"  
  12. export READELF="i686-linux-android-readelf"  
  13. export MAKE="make -j4 CROSS_COMPILE_TARGET=yes"  
  14. export CONFIG_SITE="config.site"                  
  15.                   
设置编译环境(x86_64)
  1.      
  2. export ANDROID_NDK="/usr/local/android/android-ndk-r14b"  
  3. export PATH="$ANDROID_NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64/bin/:$ANDROID_NDK:$ANDROID_NDK/tools:/usr/local/bin:/usr/bin:/bin:$PATH"  
  4. export ARCH="x86_64"  
  5. export CFLAGS="-DANDROID -mandroid -fomit-frame-pointer --sysroot=$ANDROID_NDK/platforms/android-21/arch-x86_64"  
  6. export CXXFLAGS="$CFLAGS"  
  7. export CC="x86_64-linux-android-gcc $CFLAGS"  
  8. export CXX="x86_64-linux-android-g++ $CXXFLAGS"  
  9. export AR="x86_64-linux-android-ar"  
  10. export RANLIB="x86_64-linux-android-ranlib"  
  11. export STRIP="x86_64-linux-android-strip --strip-unneeded"  
  12. export READELF="x86_64-linux-android-readelf"  
  13. export MAKE="make -j4 CROSS_COMPILE_TARGET=yes"  
  14. export CONFIG_SITE="config.site"                  
  15.                   
设置编译环境(arm64)
  1.      
  2. export ANDROID_NDK="/usr/local/android/android-ndk-r14b"  
  3. export PATH="$ANDROID_NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/:$ANDROID_NDK:$ANDROID_NDK/tools:/usr/local/bin:/usr/bin:/bin:$PATH"  
  4. export ARCH="arm64"  
  5. export CFLAGS="-DANDROID -mandroid -fomit-frame-pointer --sysroot=$ANDROID_NDK/platforms/android-21/arch-arm64"  
  6. export CXXFLAGS="$CFLAGS"  
  7. export CC="aarch64-linux-android-gcc $CFLAGS"  
  8. export CXX="aarch64-linux-android-g++ $CXXFLAGS"  
  9. export AR="aarch64-linux-android-ar"  
  10. export RANLIB="aarch64-linux-android-ranlib"  
  11. export STRIP="aarch64-linux-android-strip --strip-unneeded"  
  12. export READELF="aarch64-linux-android-readelf"  
  13. export MAKE="make -j4 CROSS_COMPILE_TARGET=yes"  
  14. export CONFIG_SITE="config.site"                  
  15.                   

应用补丁代码

编译

  • 配置(armeabi)
  1. ./configure LDFLAGS="-Wl,--allow-shlib-undefined -llog" CFLAGS="-mandroid -fomit-frame-pointer -Wno-format" --host=arm-linux --build=i686-pc-linux-gnu --enable-shared --prefix="/usr/local/android/install/python279.armeabi" --disable-ipv6  
  2.                   
配置x86)
  1. ./configure LDFLAGS="-Wl,--allow-shlib-undefined -llog" CFLAGS="-mandroid -fomit-frame-pointer -Wno-format" --host=i686-linux --build=i686-pc-linux-gnu --enable-shared --prefix="/usr/local/android/install/python279.x86" --disable-ipv6                  
  2.                   
配置(x86_64)
  1. ./configure LDFLAGS="-Wl,--allow-shlib-undefined -llog" CFLAGS="-mandroid -fomit-frame-pointer -Wno-format" --host=x86_64-linux --build=i686-pc-linux-gnu --enable-shared --prefix="/usr/local/android/install/python279.x86_64" --disable-ipv6                 
  2.                   
配置(arm64)
  1. ./configure LDFLAGS="-Wl,--allow-shlib-undefined -llog" CFLAGS="-mandroid -fomit-frame-pointer -Wno-format" --host=aarch64-linux --build=i686-pc-linux-gnu --enable-shared --prefix="/usr/local/android/install/python279.aarch64" --disable-ipv6  
  2.                   
编译时需要增加python的模块的话,需要 编辑Modules/Setup文件,将其中需要集成的内部模块注释去掉# open jan remove  timemodule # Socket module helper for socket(2) 
    _socket socketmodule.c #timemodule.c

./make

如果出现错误,请拷贝主机版本的"Parser/pgen"到编译目录

./make install
编译会生成 bin 、lib 、include、share文件

 如果需要安装 yaml库

安装PyYaml

下载地址https://github.com/yaml/pyyaml 

 然后将其lib3\yaml包,放在python安装包lib包下,然后命令行监测是否安装成功即可 



参考链接:http://www.srplab.com/cn/files/others/compile/cross_compiling_python_for_android.html

https://blog.csdn.net/ueillemmx/article/details/43955495

https://blog.csdn.net/u013210620/article/details/78618295




猜你喜欢

转载自blog.csdn.net/guoke312/article/details/79771071