トラブルシューティング¶
デバッグ出力¶
python-for-androidコマンドに``–debug`` オプションを追加すると、コンパイルとパッケージングのステップで使用されるすべての外部ツールの出力を含む完全なデバッグ出力が表示されます。
電子メールまたはircで問題を報告する場合は、通常、この完全なログを含めると便利です。 pastebin または Github gist。
ヘルプの利用¶
python-for-androidはKivy Organizationによって管理されています。Kivyと同じチャネルを使用しているすべての問題については、Kivyのヘルプが得られます:
kivy-users Google group のEmailで
irc.freenode.netの#kivy roomのircで
バグを発見した場合は、python-for-android Github ページ に問題を投稿できます。
Androidでのデバッグ¶
Python-for-android APKが動作しないときは、しばしばアプリが閉じるという唯一の兆候があります。 何が問題になったのかを知ることが重要です。
python-for-androidはPythonのstdoutとstderrをAndroid logcatストリームにリダイレクトします。 これは、Androidデバイスで開発者モードを有効にし、デバイス上でadbを有効にし、PCに接続して(USBデバッグが接続されていることがわかるはずです)、adb logcat
を実行して確認できます。adbがあなたのPATHにない場合は /path/to/Android/SDK/platform-tools/adb
で見つけるか、またはpython-for-androidでショートカットを使ってアクセスしてください:
python-for-android logcat
または:
python-for-android adb logcat
logcatコマンドを実行するとAndroidの動作に関する多くの情報が得られます。 重要な行はlogcatの組み込み機能を使って python
タグの行だけを表示する(またはこれをgrepする)ことができます。
アプリケーションがクラッシュすると、Pythonの通常のトレースバックと、アプリケーションが実行するprintステートメントなどの出力が表示されます。 通常の問題を調査するには、これらを使用します。
adbコマンドはその引数を直接adbに渡すので、python-for-android adb devices
などのデバッグタスクを実行して、接続されているデバイスのリストを取得することもできます。
APKのアンパック¶
特に、python-for-android自体をデバッグする際に、内部に何が入っているかを確認するために、パッケージジングされたAPKを解凍すると便利なことがあります。
APKはzipファイルなので簡単にコンテンツを抽出できます:
unzip YourApk.apk
トップレベルでは、常に同じファイルセットが含まれます:
$ ls
AndroidManifest.xml classes.dex META-INF res
assets lib YourApk.apk resources.arsc
Pythonディストリビューションはassetsフォルダにあります:
$ cd assets
$ ls
private.mp3
private.mp3
は実際にパッケージ化されたすべてのデータとPythonディストリビューションを含むtarballです。 抽出します::
$ tar xf private.mp3
これによりすべてのPython関連ファイルが表示されます:
$ ls
android_runnable.pyo include interpreter_subprocess main.kv pipinterface.kv settings.pyo
assets __init__.pyo interpreterwrapper.pyo main.pyo pipinterface.pyo utils.pyo
editor.kv interpreter.kv lib menu.kv private.mp3 widgets.pyo
editor.pyo interpreter.pyo libpymodules.so menu.pyo settings.kv
これらのファイルの大半はユーザーが含んでいます(この場合は自分のアプリケーションのものです)、残りはPythonディストリビューションに関連しています。
Python2系ではPythonのインストールはほとんどは lib
フォルダにあります。 Python3系( python3crystax
レシピを使用)では、Pythonインストールは crystax_python
という名前のフォルダにあります。
一般的なエラー¶
以下はユーザーが報告した一般的な問題と解決方法です。
AttributeError: ‘AnsiCodes’ object has no attribute ‘LIGHTBLUE_EX’¶
これは使用しているバージョンのcoloramaが低すぎる場合に発生します。バージョン0.3.3以上をインストールします。
python-for-androidをpipまたはsetup.pyを使ってインストールする場合はこの依存関係は自動的に処理されます。
AttributeError: ‘Context’ object has no attribute ‘hostpython’¶
これは、一部のリリースでは既知のバグです。この問題を回避するにはPythonのrequirementを明示的に追加します。(例: --requirements=python2,kivy
)。これはbuildozerを使用する場合にも当てはまります。この場合、buildozer.spec の requirements にpython2を追加します。
linkname too long¶
これは通常は起こりませんが、p4aディレクトリにビルドから除外されていない.buildozerディレクトリが含まれていると誤って実行される可能性がある非常に長いファイル名を含めると発生します。ディレクトリを削除すると問題が解決するはずですが、APKには必要ないためこのディレクトリを使用しないことをお勧めします
Exception in thread “main” java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0¶
これはJavaバージョンの不一致が原因で発生します。Java 8(Ubuntu上のopenjdk-8-jdkパッケージなど)をインストールして修正する必要があります。
JNI DETECTED ERROR IN APPLICATION: static jfieldID 0x0000000 not valid for class java.lang.Class<org.renpy.android.PythonActivity>¶
このエラーは、新しいツールチェーン内から org.renpy.android.PythonActivity
にアクセスしようとすると、logcatログに表示されます。 これを修正するには代わりに org.renpy.android.PythonActivity
を参照するようにコードを変更してください。
websocket-client: if you see errors relating to ‘SSL not available’¶
Kivyはpython2.7.xをターゲットにしているため、buildozerのrequirementにbackports.ssl-match-hostnameというパッケージがあることを確認してください
ホストの検証に関連するエラーが発生した場合は、ws.run_forever() のパラメータとしてsslopt={“cert_reqs”: ssl.CERT_NONE} が必要です。