Python请求模块错误,在Kivy Android应用程序中出现“名称解析临时失败”。

3
使用buildozer构建,使用以下技术: Python 2.7.12 Kivy 1.10.0 Cython 0.25.2
我的应用程序是一个简单的测试应用程序,不断检查我使用AWS API-Gateway / lambda创建的API中返回值的更改,并向我发出警报。
该程序在我的ubuntu和Mac桌面上使用kivy运行良好,我可以毫无问题地调用API,但是一旦apk构建并放在我的手机上,当我按下按钮触发api检查时,它就无法正常工作并立即终止。 我已经在两部手机上测试过,分别是Android 6和7。
以下是检查示例,我没有做任何疯狂的事情,就像我说的那样,它可以从我的桌面计算机上工作。(我已经混淆了下面的API地址)
api = 'https://34kjh545df.execute-api.us-east-1.amazonaws.com/test/dar_status'
getApi = requests.get(darUI.api)
check = getApi.text
return check

使用adb logcat,我捕获了按下按钮时的日志输出。

这是指出DNS问题的行,但我可以在手机浏览器上成功访问API。

02-04 10:31:32.995 14079 14094 I python  :  requests.exceptions.ConnectionError: HTTPSConnectionPool(host='34kjh545df.execute-api.us-east-1.amazonaws.com', port=443): Max retries exceeded with url: /test/dar_status (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0xdeb44ff0>: Failed to establish a new connection: [Errno 2] temporary failure in name resolution.',))

那段时间周围的日志。
02-04 10:31:32.987 14079 14094 I python  :    File "/work/dar/.buildozer/android/app/main.py", line 96, in my_callback
02-04 10:31:32.988 14079 14094 I python  :    File "/work/dar/.buildozer/android/app/main.py", line 79, in api_check
02-04 10:31:32.988 14079 14094 I python  :    File "/work/dar/.buildozer/android/platform/build/dists/testApp/private/lib/python2.7/site-packages/requests/api.py", line 70, in get
02-04 10:31:32.988 14079 14094 I python  :    File "/work/dar/.buildozer/android/platform/build/dists/testApp/private/lib/python2.7/site-packages/requests/api.py", line 56, in request
02-04 10:31:32.993 14079 14094 I python  :    File "/work/dar/.buildozer/android/platform/build/dists/testApp/private/lib/python2.7/site-packages/requests/sessions.py", line 488, in request
02-04 10:31:32.994 14079 14094 I python  :    File "/work/dar/.buildozer/android/platform/build/dists/testApp/private/lib/python2.7/site-packages/requests/sessions.py", line 609, in send
02-04 10:31:32.994 14079 14094 I python  :    File "/work/dar/.buildozer/android/platform/build/dists/testApp/private/lib/python2.7/site-packages/requests/adapters.py", line 487, in send
02-04 10:31:32.995 14079 14094 I python  :  requests.exceptions.ConnectionError: HTTPSConnectionPool(host='34kjh545df.execute-api.us-east-1.amazonaws.com', port=443): Max retries exceeded with url: /test/dar_status (Caused by NewConnectionError('<requests.packages.urllib3.connection.VerifiedHTTPSConnection object at 0xdeb44ff0>: Failed to establish a new connection: [Errno 2] temporary failure in name resolution.',))
02-04 10:31:33.058 14079 14094 I python  : Python for android ended.
02-04 10:31:33.062  2815  2839 V WindowManager: Changing focus from Window{a4f9629 u0 testApp.darapp.testApp/org.kivy.android.PythonActivity} to null Callers=com.android.server.wm.WindowManagerService.setFocusedApp:4299 com.android.server.am.ActivityManagerService.setFocusedActivityLocked:2934 com.android.server.am.ActivityStackSupervisor.moveHomeStackTaskToTop:538 com.android.server.am.ActivityStack.adjustFocusedActivityLocked:2868
02-04 10:31:33.062  2815  2839 D ActivityTrigger: ActivityTrigger activityPauseTrigger
02-04 10:31:33.062  2815  2932 I WindowManager: Losing focus: Window{a4f9629 u0 testApp.darapp.testApp/org.kivy.android.PythonActivity}
02-04 10:31:33.062  2815  2839 I ActivityManager: startPausingLocked.updateThumbnail is run here
02-04 10:31:33.063 14079 14079 V SDL     : onWindowFocusChanged(): false
02-04 10:31:33.072  2815  2839 D PowerManagerNotifier: onWakeLockAcquired: flags=1, tag="*launch*", packageName=android, ownerUid=1000, ownerPid=2815, workSource=WorkSource{10235}
02-04 10:31:33.073 14079 14079 V PythonActivity: onPause()
02-04 10:31:33.073 14079 14079 V SDL     : onPause()
02-04 10:31:33.073 14079 14079 V SDL     : nativePause()
02-04 10:31:33.073 14079 14079 F libc    : Fatal signal 11 (SIGSEGV), code 1, fault addr 0x4 in tid 14079 (testApp)

我想知道是否需要在buildozer构建中包含其他模块或文件?

requirements = kivy, requests, openssl

目前我不知道它可能是什么,如果有人有任何想法,我将感激不尽。

谢谢。

1个回答

2

我发现了问题,是因为我没有在buildozer中给应用程序授予访问互联网的权限。

在buildozer.spec中,我取消了下面这行代码的注释。

# (list) Permissions
android.permissions = INTERNET

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接