嗨!我有一个写在kivy和python3上的现成项目。这个计划 适用于所有桌面操作系统(Windows,Linux,MacOS),但之后 编译成.apk文件,UrlRequest对我不起作用。我是什么 只是没有做,在buildozer;
-- requirements = pyopenssl,openssl,docutils,android,python3crystax,kivy
并在
-- android.permissions = INTERNET, ACCESS_NETWORK_STATE
在android上安装.apk文件并按下按钮后 刮去网站页面,程序产生错误
**name 'HTTPSConnection' is not defined**
这是使用UrlRequest的代码的一部分:
def get_html(self, link):
try:
from kivy.network.urlrequest import UrlRequest
if isinstance(link, bytes):
link = link.decode('utf-8')
reg = UrlRequest(link, debug=True,
on_success=self.suc, on_error=self.err)
while not reg.is_finished:
sleep(0.5)
Clock.tick()
except HTTPError:
pass
def suc(self, reg, result):
self.add_widget(Label(
text=str(result), font_size='15sp', color=(0, 0, 0, 1)
))
def err(self, reg, error):
class Error(App):
def build(self):
win_report = BugReporter(txt_report=str(error))
return win_report
Error().run()
变量(链接)中的插入来自字典的链接。
dict_links = dict({
"userful_programs": "https://pcompstart.com/?view=cat&category=1",
"advice_on_computer": "https://pcompstart.com/?view=cat&category=2",
"user_windows": "https://pcompstart.com/?view=cat&category=3",
"articles_in_theme": "https://pcompstart.com/?view=cat&category=4",
"popular_program": "https://pcompstart.com/?view=cat&category=5",
"other": "https://pcompstart.com/?view=cat&category=6"})
我的buildozer.spec的完整文件日志,其中包含log_level = 2 这个链接; https://15530009509605697547.googlegroups.com/attach/38c18b633925d/logcat.txt?part=0.1&view=1&vt=ANaJVrFE1tvgVU8m0abaquknNDEzcXf_tgIMDdxEzo1tMSLUhqzNrto84pYWSc4sPxksIpmwEkAWhL_2IO2dptE2TLwFKzKJ535Vct_CDD_BgCz1M2G7u50
谢谢!
或者如果在同一个文件中我将执行 -
from http.client import HTTPSConnection
然后在android上编译后我得到错误 -
ImportError: cannot import name 'HTTPSConnection'
或者如果我将执行 -
import ssl
然后在android上编译后我得到错误 -
ImportError: No module named '_ssl'
可能没有SSL支持的kivy编译。这是错误还是我错了?
答案 0 :(得分:0)
不确定这是否会有所帮助,我是新手,但最近几天我经历了非常相似的磨难。
本质上我正在努力处理简单的HTTPS请求。我已经尝试了所有可能的库,如urllib,urllib2,请求和kivy的UrlRequest,但没有运气。起初我已经尝试过python3(和你一样),然后切换到python2,因为它似乎一般产生的错误较少(不确定那是否真的如此)。
最后,我最终得到了同样的错误“HTTPSconnection未定义”,尝试了数百件事情,最后将“httplib2”放入需求(buildozer.spec)做了伎俩,并最终完成了相同的方式在桌面上。编译httplib时出现了一些错误(我已经将其解读为编码问题),但无论如何编译都有效。
我的buildozer.spec重要的行是:
"main": "src/app.js"
pyopenssl是多余的我猜
requirements = kivy, android, openssl, pyopenssl, httplib2
我的测试应用的main.py导入:
android.permissions = INTERNET, ACCESS_NETWORK_STATE
希望这会有所帮助,祝你好运