2017-10-26 11 views
1

AWT Iot에 mqtt 메시지를 보낼 수있는 모바일 앱을 개발하고있었습니다. 그것은 paho-mqtt 라이브러리가 필요합니다. buildozer.spec 요구 사항에 포함될 수 있습니다. 2.7.2 인 python-for-android에서 실행되는 python 버전에 문제가있는 것으로 보이는 코드에서 SSL을 가져와야하므로 내 문제는 SSL 부분에 있습니다.안드로이드 개발을위한 Kivy의 SSL

아래 코드는 PC에서는 잘 작동하지만 전화에서는 작동하지 않습니다. buildozer.spec 요구 사항에 SSL 관련 아무것도 추가하지 않고

from kivy.lang import Builder 
from kivy.app import App 
from kivy.uix.label import Label 


import paho.mqtt.publish as mqtt 
import paho.mqtt.client as mqttclient 
# 


class MqttTest(App): 
    def build(self): 
     topic = "topic1" 
     my_ca_cert = "RootCA.pem" 
     my_pri_cert = "my.cert.pem" 
     my_key_cert = "my.private.key" 


     try: 
      import ssl 
      mqttc = mqttclient.Client("Python_Ex_Pub") 
      mqttc.tls_set(my_ca_cert, 
       certfile=my_pri_cert, 
       keyfile=my_key_cert, 
       cert_reqs=ssl.CERT_REQUIRED, 
       tls_version=ssl.PROTOCOL_TLSv1_2, 
       ciphers=None) 
      mqttc.connect("myaddress", 8883) 
      mqttc.publish(topic, "This is a test pub from Python.") 

      return Label(text="Hi it works!") 
     except Exception as e: 
      import traceback 
      a=traceback.format_exc() 
      try: 
       f1=open("/storage/emulated/0/Download/err.txt","w") 
       f1.write(str(a)) 
       f1.close() 
      except: 
       pass 
      return Label(text=str (a)) 

if __name__ == '__main__': 
    MqttTest().run() 

, 나는 다음과 같은 오류가 발생합니다 :

no module named _ssl 

내가 요구 사항의 하나로서 OpenSSL을 추가하면, 나는 다음과 같은 오류가 발생합니다 :

'module' object has no attribute 'PROTOCOL_TLSv1_2' 
+0

구체적으로 2.7.2를 사용해야합니까? Kivy는 파이썬 2.7과 3을 모두 지원합니다. 그렇죠? 'PROTOCOL_TLSv1_2'가 2.7.9에 추가 된 것처럼 보입니다 (그리고 2.7.13에서 더 이상 사용되지 않습니다). – Michael

+0

아니,하지만 난 단지 kivy와 python 4 android에서 python3을 시도하지 않았다. 그럼 내가 어떻게 할 수 있니? –

+0

Kivy FAQ 에선 "1.8.0 버전에서 Kivy는 동일한 코드베이스에서 Python> = 2.7과 Python> = 3.3을 모두 지원합니다. 파이썬 3은 또한 python-for-android에서도 지원됩니다."_ – Michael

답변

1

PROTOCOL_TLSv1_2은 p4a가 제공하는 것보다 나중에 Python 2 버전에서 추가되었습니다. 당신의 buildozer의 android.ndk_path 포장을 풀고 crystax의 NDK를 가리 키도록 변경 python3crystax

  • 다운로드와

    1. 변경 python2를 교체하여 buildozer의 requirements 라인과 crystax이 here
    2. 을 NDK 압축 :

      당신은 파이썬 3 APK를 구축하는 시도 할 수 있습니다 디렉토리

    3. 실행 buildozer android debug

    운 좋게도 다른 행동없이 Python 3을 사용하여 apk를 빌드 할 수 있습니다.

  • +0

    고마워, 내가 안드로이드에서 python3을 실행하려면이 절차를 따라, 나는 그것이 작동하지만 여전히 거기에 정의 된 SSL 것 같아요. 이 링크를 확인하고이 질문을 추가했습니다 : https://stackoverflow.com/questions/46988365/ssl-in-python3-using-buildozer-for-android 파이썬 버전을 인쇄하여 python3이 달리는 –