首先,我很抱歉,如果这是一个重复的问题,但我已经花了很多小时在这里寻找答案,并没有找到任何答案(至少可以)。在
我想(理想情况下)将python(3.6/7)脚本编译成android应用程序。我需要在代码中使用外部库,即matplotlib和numpy。在
我的android设备中有Kivy启动器,可以启动正常的(“纯”)Kivy脚本,没问题,它们工作得很好。我的代码包括matplotlib(见下文),但是,立即崩溃,因为我相信这个模块没有包含在Kivy启动器中。在
至于编译apk,我已经从https://kivy.org/#download下载了VM,其中预装并预配置了一个android的Buildozer+python for android。使用它我可以创建.apk文件,只要不包含外部模块,这些文件就可以正常安装和运行。但是,我试图将matplotlib设置为中的一个需求buildozer.spec,编译失败,并返回:Command failed: ./distribute.sh -m "kivy matplotlib" -d "myapp"
现在,我可以使用matplotlib作为pydroid3应用程序中的脚本来运行我的代码,在这里我可以通过pip正常安装模块(kivy,matplotlib,等等)。至于kivy-matplotlib接口,我正在使用kivy garden模块中的matplotlibflower,我通过运行我的代码在本地打包
^{pr2}$
在将代码导出到android设备之前。在
有没有办法把它作为一个本地应用程序运行,或者至少通过Kivy启动程序来运行?我已经读到,到目前为止buildozer不支持matplotlib,但它来自一个半年多前未被引用的评论。如果我可以通过直接修改android的python让它运行matplotlib的.apk也可以,尽管我不知道这是如何工作的。在
最后,我尝试下载numpy和matplotlib源代码,并将这些模块本地添加到我的包中,这样buildozer就不需要下载/关心它们了,但我不知道这样的大型复杂模块是如何做到的(如果可能的话)。在from kivy.garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
import matplotlib.pyplot as plt
plt.plot([1, 23, 2, 4])
plt.ylabel('some numbers')
class MyApp(App):
def build(self):
box = BoxLayout()
box.add_widget(FigureCanvasKivyAgg(plt.gcf()))
return box
MyApp().run()