Moh*_*min 7 opencv apk kivy buildozer
我正在尝试使用 kivy、opencv 创建一个简单的照片捕获应用程序。当我尝试使用 buildozer 创建一个 .apk 文件,并将 opencv 放在 .spec 文件的需求中时,我遇到了这个错误
-- Android: fixup -g compiler option from Android toolchain
-- Update variable ANDROID_SDK from environment: /home/livon/.buildozer/android/platform/android-sdk
-- Android SDK Tools: ver. 2.0 (description: 'Android SDK Command-line Tools')
-- Android SDK Build Tools: ver. 30.0.0 (subdir 30.0.0 from 30.0.0)
CMake Error at cmake/android/OpenCVDetectAndroidSDK.cmake:176 (message):
Android SDK Tools: OpenCV requires Android SDK Tools revision 14 or newer.
Use BUILD_ANDROID_PROJECTS=OFF to prepare Android project files without
building them
Call Stack (most recent call first):
CMakeLists.txt:780 (include)
-- Configuring incomplete, errors occurred!
See also "/home/livon/Desktop/Ocv/.buildozer/android/platform/build-armeabi-
v7a/build/other_builds/opencv/armeabi-v7a__ndk_target_21/opencv/build/CMakeFiles/CMakeOutput.log".
See also "/home/livon/Desktop/Ocv/.buildozer/android/platform/build-armeabi-
v7a/build/other_builds/opencv/armeabi-v7a__ndk_target_21/opencv/build/CMakeFiles/CMakeError.log".er
# Command failed: /home/livon/venv/bin/python3 -m pythonforandroid.toolchain create --dist_name=test
--bootstrap=sdl2 --requirements=python3,kivy,opencv --arch armeabi-v7a --copy-libs --color=always --
storage-dir="/home/livon/Desktop/Ocv/.buildozer/android/platform/build-armeabi-v7a" --ndk-api=21
# ENVIRONMENT:
# ANDROIDNDK = '/home/livon/.buildozer/android/platform/android-ndk-r19c'
# ANDROIDAPI = '27'
# ANDROIDMINAPI = '21'
Run Code Online (Sandbox Code Playgroud)
我也尝试更新 ANDROID_SDK,我去了 (/home/livon/.buildozer/android/platform/android-sdk) 这个文件夹并使用更新它
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
但是将其更新为 30.0.0 后没有任何变化,错误保持不变。
我正在使用
我也遇到这个错误,烦恼了很长时间:(
经过大量谷歌搜索后,我找到了一些可能有帮助的解决方案。
至少它可以在我的 Ubuntu 20.04 VM 上运行。
(下载 Android Studio 并复制粘贴目录部分(最后 3 个步骤)的说明可能会解决您的问题,因为我也遇到了与您相同的错误)
第一次更新apt
sudo apt-get update
Run Code Online (Sandbox Code Playgroud)
升级包
sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)
安装 python3 + pip
sudo apt-get install python3 python3-pip
Run Code Online (Sandbox Code Playgroud)
配置默认 Python 版本 ( ref_1 ) ( ref_2 )
sudo update-alternatives --install /usr/bin/python python /usr/bin/python<X.X.X> 1
sudo update-alternatives --config python
Run Code Online (Sandbox Code Playgroud)
<X.X.X>所需的 Python 版本在哪里?
安装开发工具+依赖项
sudo apt-get install build-essential \
libssl-dev \
libffi-dev \
python3-dev \
dh-autoreconf \
autoconf \
libtool \
pkg-config \
zlib1g-dev \
libncurses5-dev \
libncursesw5-dev \
libtinfo5 \
cmake \
ccache
Run Code Online (Sandbox Code Playgroud)
安装基维
通过apt
sudo apt-get install python3-kivy
Run Code Online (Sandbox Code Playgroud)
通过Python pip(我的首选方式)
python3 -m pip install kivy==2.0.0
Run Code Online (Sandbox Code Playgroud)
安装 cython
pip3 install Cython
sudo apt-get install cython
Run Code Online (Sandbox Code Playgroud)
// 我是这样做的
安装javac
sudo apt-get install openjdk-11-jdk openjdk-8-jdk
Run Code Online (Sandbox Code Playgroud)
检查是否java已javac安装
java -version
javac -version
Run Code Online (Sandbox Code Playgroud)
配置。java+ javac(我将其配置为openjdk8-jdk)
sudo update-alternatives --config java
Run Code Online (Sandbox Code Playgroud)
sudo update-alternatives --config javac
Run Code Online (Sandbox Code Playgroud)
安装cmake(我都做了)(参考)
蟒蛇方式
pip3 install cmake
Run Code Online (Sandbox Code Playgroud)
手动方式
cd /tmp
wget https://github.com/Kitware/CMake/releases/download/v3.20.0/cmake-3.20.0.tar.gz
tar -zxvf cmake-3.20.0.tar.gz
cd cmake-3.20.0
./bootstrap
make
sudo make install
Run Code Online (Sandbox Code Playgroud)
安装buildozer(我用官方方式重新安装了)
官方方式
pip3 install --user --upgrade buildozer
Run Code Online (Sandbox Code Playgroud)
通过 git 克隆
sudo apt-get install git
git clone https://github.com/kivy/buildozer.git
cd buildozer
sudo python3 setup.py install
Run Code Online (Sandbox Code Playgroud)
安装Python IDLE(可选)(以下任一)
sudo apt-get install idle3
Run Code Online (Sandbox Code Playgroud)
安装Android Studio
我尝试了不安装 Android Studio 的方法(仅使用 cmdline-tools ),但就是无法弄清楚:(
sudo snap install android-studio --classic
Run Code Online (Sandbox Code Playgroud)
并运行它并让它自己设置一切。
之后,只需关闭它即可
一切设置完毕后:(参考)
打开文件
复制tools位于的目录~/Home/Android/Sdk/
压缩位于那里的原始目录~/Home/.buildozer/android/platform/android-sdk 后将其粘贴到tools那里(通过右键单击-->压缩)(如果您看不到该目录,请确保选中show hidden file文件选项中的复选框)
然后转到~/Home/.buildozer/android/platform/android-sdk/tools/bin终端并打开
./sdkmanager --install "tools"
exit
Run Code Online (Sandbox Code Playgroud)
再次重建项目转到您的项目目录
buildozer init # if you haven't got the buildozer.spec in your project's dir
buildozer android debug
Run Code Online (Sandbox Code Playgroud)
*.apk将在bin
我的buildozer.spec:
title = Screen_Recorder
package.name = screen_recorder
package.domain = org.test
souce.dir = .
source.include_exts = py,png,jpg,kv,atlas
requirements = python3,kivy==2.0.0,android,opencv==4.5.3,numpy,pillow,EasyProcess,entrypoint2,mss,jeepney,plyer,pyscreenshot
osx.python_version = 3
osx.kivy_version = 2.0.0
android.permission = CAMERA,RECORD_AUDIO,WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE
Run Code Online (Sandbox Code Playgroud)
.bashrc文件(就我而言,我没有)bin和dir.buildozerbuildozer <platform> cleanls列出当前目录中的所有文件+文件夹cd <dir> 导航到目录cd .. 导航到上一个目录CAMERA,您需要将其添加到buildozer.spec并permission在您的中添加以下内容*.py以获得android 权限:
from kivy.utils import platform
if platform == "android":
from android.permissions import request_permissions, Permission
request_permissions([ <permissions> ]) # e.g. Permission.WRITE_EXTERNAL_STORAGE , Permission.READ_EXTERNAL_STORAGE , Permission.CAMERA , Permission.RECORD_AUDIO , etc.
Run Code Online (Sandbox Code Playgroud)
(您不需要安装或导入android,只需包含android在buildozer.spec中requirement)希望对您有帮助(如有不正确的地方请指正)