2017-10-26 10 views
1

私はAWS Iotにmqttメッセージを送信できるモバイルアプリケーションを開発していました。それはpaho-mqttライブラリが必要です。これはbuildozer.spec要件に含めることができます。私の問題は、2.7.2であるpython-for-androidで動作しているPythonバージョンに問題があると思われるコードでSSLをインポートする必要があるため、SSL部分にあります。アンドロイド開発用KivyのSSL

コードは以下の通りですが、PCでは問題なく動作しますが、電話機では機能しません。

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() 

buildozer.spec要件にSSLに関連するものを追加することなく、私は次のエラーを取得する:

no module named _ssl 

私は、要件の一つとして、OpenSSLを追加した場合は、その後、私は次のエラーを取得する:

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

特に2.7.2を使用する必要がありますか? KivyはPython 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の両方をサポートしています。Python 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解凍:

      あなたは、Python 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がランニング –

    関連する問題