我尝试将bs4模块导入到Android应用程序中。 以下是代码:
import kivy
kivy.require('1.10.0')
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
def build(self):
try:
import bs4
result = "Done..."
except:
result = "Failed..."
return Label(text=result)
MyApp().run()
为了导入它,我复制了bs4的配方文件和必需的库(lxml,libxml2,libxslt),这些文件是在这个网站上写的:
https://github.com/yaki29/python-for-android/commit/c4b8969e3104d39535380bc07cf8c1c8f6dcd75a
我在 .buildozer / android / platform / python-for-android-master / pythonforandroid / recipes 目录中为bs4和它的依赖项创建了新的配方文件夹然后我放了__init__.py
根据上述网站将文件发送到这些新文件夹。
我在buildozer.spec文件的要求中添加了这些库。
# (list) Application requirements
# comma seperated e.g. requirements = sqlite3,kivy
requirements = bs4, lxml, libxml2, libxslt, kivy
在编译失败后,我更改了buildozer.spec文件要求部分,如下所示:
# (list) Application requirements
# comma seperated e.g. requirements = sqlite3,kivy
requirements = bs4, lxml, kivy
但是,编译再次失败。
所以,我想知道这些食谱文件是否完整。
例如,我举了一个例子,将html5lib导入android应用程序。
还有任何html5lib食谱文件。因此我写了一个包含以下代码的配方文件:
from pythonforandroid.toolchain import Recipe
class html5libRecipe(Recipe):
version = '0.999999999'
url = 'https://pypi.python.org/packages/17/ee/99e69cdcefc354e0c18ff2cc60aeeb5bfcc2e33f051bf0cc5526d790c445/html5lib-{version}.tar.gz'
md5sum = '8578e4e3a341436cb9743a9e4a299239'
name = 'html5lib'
recipe = html5libRecipe()
这些代码位于__init__.py
文件中。这个__init__.py
文件位于html5lib文件夹中。我将此文件夹放在 .buildozer / android / platform / python-for-android-master / pythonforandroid / recipes 目录中。然后我改变了要求如下:
# (list) Application requirements
# comma seperated e.g. requirements = sqlite3,kivy
requirements = html5lib, kivy
最后,我编译了main.py文件。并创建了一个有效的应用程序。
我还观察到配方文件不一样。有些代码比其他代码多。我想这取决于库类型。例如,libxml2和libxlst是C库。因此,它们的配方文件与html5lib完全不同?
希望你理解我的问题。 任何帮助深表感谢。 提前谢谢。
注意:我使用的是Python2.7,操作系统是Ubuntu 17.04。