トラブルシューティング

デバッグ出力

python-for-androidコマンドに``–debug`` オプションを追加すると、コンパイルとパッケージングのステップで使用されるすべての外部ツールの出力を含む完全なデバッグ出力が表示されます。

電子メールまたはircで問題を報告する場合は、通常、この完全なログを含めると便利です。 pastebin または Github gist

ヘルプの利用

python-for-androidはKivy Organizationによって管理されています。Kivyと同じチャネルを使用しているすべての問題については、Kivyのヘルプが得られます:

バグを発見した場合は、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 などのデバッグタスクを実行して、接続されているデバイスのリストを取得することもできます。

詳細については、 adb のAndroidドキュメントと特に logcat を参照してください。

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} が必要です。