私は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'
特に2.7.2を使用する必要がありますか? KivyはPython 2.7と3の両方をサポートしていますか? 'PROTOCOL_TLSv1_2'が2.7.9で追加されたようです(そして2.7.13で廃止されました)。 – Michael
いいえ、私はちょうどkivyとpython 4 androidでpython3を試していません。だから私はこれをどのようにすることができますか? –
Kivy FAQによると、バージョン1.8.0以降、Kivyは同じコードベースでPython> = 2.7とPython> = 3.3の両方をサポートしています。Python 3は現在もpython-for-androidでサポートされています。 "_ – Michael