下载numpy-1.22.4 修改setup.py 找到
import numpy.distutils.command.sdist
import setuptools
修改为
#import numpy.distutils.command.sdist
import setuptools
import numpy.distutils.command.sdist
from numpy.distutils.core import numpy_cmdclass
然后可能需要修改一下前面提到的env.sh 或者自己临时性的设置CFLAGS="-lm"一样也可以的.然后安装
python3 setup.py install
本来准备opencv了,但是在这之前,我们还需要cmake,前面从termux拷贝过cmake.但是只有root 权限才能使用,主要是termux的cmake中有硬编码的@termux@/bin/sh调用,这在android中需要termux的私有帐户。所以我们需要先自己搞个cmake.
主要的内容来源于:https://github.com/termux/termux-packages/blob/master/packages/cmake/build.sh
有两处都是sh的问题Source/cmLocalUnixMakefileGenerator3.cxx
和Source/cmExecProgramCommand.cxx
有一处是交叉编译的问题Modules/Platform/Android-GNU.cmake 在前文栏目中都有patch
另一个问题不知道是不是我个人的问题,检测abi会失败,所以我硬编码改成了arm64-v8a
文件: Modules/Platform/Android-GNU.cmake
找到
include(Platform/Android/abi-${CMAKE_ANDROID_ARCH_ABI}-GNU)
硬性指定
include(Platform/Android/abi-arm64-v8a-GNU)
这样cmake的源码就修改完成了
然后准备在termux的cmake中再造一个cmake自己用,因为命令行太长,在手机中输入太难,手机打开termux会进入cmake源码目录,创建build子目录并进入
然后主机命令行输入好长好长(假设adb已经连接并只连接了一个机器)
adb shell input text $(echo "cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=28 -DSPHINX_MAN=OFF -DCMAKE_MAN_DIR=share/man -DCMAKE_DOC_DIR=share/doc/cmake -DCMAKE_USE_SYSTEM_CURL=ON -DCMAKE_USE_SYSTEM_EXPAT=ON -DCMAKE_USE_SYSTEM_FORM=ON -DCMAKE_USE_SYSTEM_JSONCPP=ON -DCMAKE_USE_SYSTEM_LIBARCHIVE=ON -DCMAKE_USE_SYSTEM_LIBRHASH=ON -DCMAKE_USE_SYSTEM_LIBUV=ON -DCMAKE_USE_SYSTEM_ZLIB=ON -DBUILD_CursesDialog=ON .." | sed -e 's/ /\%s/g')
然后手机上回车,执行。等待。这个我手机慢,要十分钟左右
然后继续在termux中执行cmake --build .
完成后在build/bin下会生成cmake等文件。就是我们需要的内容了,
然后回到adb shell
我拷贝bin到$HOME/python3/usr/bin下了。还有个问题是modules.拷贝到$HOME/usr/share/cmake-3.28下了
修改我们前面的env.sh,添加两个环境变量
export CMAKE_ROOT=$HOME/python3/cmake-3.28
export CMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake
然后开始测试cmake,找个目录,建立一个main.cpp,内容为hello world
#include <iostream>
int main(int argc, char** argv){
std::cout << "Hello World" << std::endl;
return 0;
}
建立一个CMakeLists.txt,内容如下
project(HelloWorld)
SET(CMAKE_CXX_FLAGS "-fPIC -Wall -Wno-unused-function -Wno-unused-parameter -std=c++11 ")
add_executable(hello_world main.cpp)
然后测试
mkdir build
cd build
cmake ..
make
./hello_world