質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

0回答

1279閲覧

Python kivy Launcer で、SDカード書き込み許可をとりたい

Mr.Prgrmr

総合スコア4

Kivy

Kivyは、Pythonを用いたNUI開発のためのオープンソースフレームワーク。マルチタッチなど多くの入力に対応したNUIアプリなどを開発することができます。多くの環境で動作するクロスプラットフォームです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2022/03/30 04:47

編集2022/05/06 02:18

当方、C++、Object Pascal のWindowsネイティブExeの プログラマーです。
Python kivy Launcher で、Androdスマホ上の外部ストレージの SDカードの書き込みをしたく、
許可をとりたいのですが、

方法1)

ACTIVITY_CLASS_NAME = 'org.renpy.android.PythonActivity' REQUEST_EXTERNAL_STORAGE = 1 mActivity = autoclass(ACTIVITY_CLASS_NAME).mActivity mActivity.requestPermissions(['android.permission.WRITE_EXTERNAL_STORAGE'], REQUEST_EXTERNAL_STORAGE)

とすると、requestPermissionsの実行で、Launcher が終了します。

方法2)
1)とは別に、github にて、permissions.py を入手しましたが、当該コードの中で参照している
ACTIVITY_CLASS_NAMESPACE の中身が分からず

   class _onRequestPermissionsCallback(PythonJavaClass):      """Callback class for registering a Python callback from      onRequestPermissionsResult in PythonActivity.      """      __javainterfaces__ = [ACTIVITY_CLASS_NAMESPACE + '$PermissionsCallback']      __javacontext__ = 'app'      def __init__(self, func):     self.func = func     super(_onRequestPermissionsCallback,self).__init__()

上記クラスの作成時に、
ACTIVITY_CLASS_NAMESPACE + '$PermissionsCallback'
が、ClassName not found になってしまいます。

SDカードの書き込み許可をとりたいのですが、
1)または2)の方法でも実現できず、困り果てています。
1)または2)の解決手段 または、SDカードの書き込み許可を取る方法の
アドバイスをいただけないでしょうか?

【2022/05/06】追記
Launcherで落ちるのは、以下のシンプルなアプリで再現します。

from kivy.app import App from kivy.uix.label import Label class HelloWorldApp(App): def build(self): return Label(text="Hello World") if __name__=='__main__': HelloWorldApp().run()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr.Prgrmr

2022/04/04 01:01

お世話になります。 回答ありがとうございます。 また返信遅くなりまして申し訳ありません。 Launcherは、現在 play store には無いため、他のサイトからインストールしました。 バージョンは、1.9.1.1 です。 > requestPermissionsの実行で、Launcher が終了します。 この時のエラーは、ログを見ても全く出力されませんので困っております。 とりあえず、教えていただきました github の Launcher のインストールから挑戦してみたいと思います。 linux Github 等の環境が全く分かりませんので、一つ一つ勉強して、その結果を報告いたしますので、またよろしくお願いします。
Mr.Prgrmr

2022/04/04 06:32

gottadiveintopy さん、お世話になります。 github より Launcher をダウンロード・インストールしましたが、アプリ起動で、最初の画面すら表示せずに終了してしまいます。 また、これまで見ていたログも出力されなくなりました。 アプリの画面に「show logs」のボタンがありますが、これを押しても行が重なって表示され殆ど見えません。 何がいけないのか不明です。アドバイスいただけませんでしょうか。
gottadiveintopy

2022/04/05 21:01

logcat はadbのサブコマンドで、単にadb logcatとだけ打つと無関係なログも表示されて見辛いので adb logcat *:S python:D としてpython interpreterの吐くログだけに絞ると良いです。
Mr.Prgrmr

2022/04/06 00:53

了解しました。ログ採取を進めてみます。 もう一つ質問よろしいでしょうか? 結論ですが、最新のLauncherを使用すれば、p4aの permissions.py 等は、使用できますでしょうか? もう一つ理解しておりませんのでご教授お願い致します。
gottadiveintopy

2022/04/06 02:10

できます。ただ載せられたコードのような使い方は普通はしないですが。以下のように普通のpython moduleとしてimportするのが一般的ですね。 https://python-for-android.readthedocs.io/en/latest/apis/#runtime-permissions ただ今はログを見れない状況なのでとにかくそれを見られるようにした方が良いと思います。じゃないと明後日の方向に修正しかねないので。
Mr.Prgrmr

2022/04/07 08:01

gottadiveintopy さん、お世話になります。 色々教えていただき Debug 出来るようになりました。 一先ずありがとうございました。 それで、 " request_permissions([Permission.WRITE_EXTERNAL_STORAGE]) " を実行し、 " os.mkdir(tp_recv_dir) " としましたところ、以下のエラーが発生します。 " 04-07 16:45:43.335 23508 23527 I python : File "/storage/emulated/0/kivy/kvtest/main.py", line 204, in process 04-07 16:45:43.335 23508 23527 I python : os.mkdir(tp_recv_dir) 04-07 16:45:43.336 23508 23527 I python : PermissionError: [Errno 13] Permission denied: '/storage/F677-248B/MyData/bb.backup' " まだ正常に許可が得られていないのでしょうか? 当該フォルダはスマホのSDカードです。 因みに、request_permissions の実行では、特に許可の確認操作を聞いてきません。 これは Launcher をインストールか実行した時に、許可を与えたからと勝手に理解しております。 どうぞアドバイスをお願い致します。
gottadiveintopy

2022/04/08 13:10

> これは Launcher をインストールか実行した時に、許可を与えたからと勝手に理解しております。 Android OSが古くない限りはWRITE_EXTERNAL_STORAGEのような危険な権限はインストール時と実行時の両方で許可を得ないといけないはずなのでそれは考えにくいですが、私もそれほど詳しいわけじゃないので...。とりあえずまずインストール時に権限を求めていたかを確かめるのが良いと思います。 後はrequest_permissionsは成否をcallback関数経由で教えてくれるようなのでそこも確かめると良いと思いますよ。 https://github.com/kivy/python-for-android/blob/develop/pythonforandroid/recipes/android/src/android/permissions.py#L536
Mr.Prgrmr

2022/04/12 06:17

gottadiveintopy さん、ごめんください。 WRITE_EXTERNAL_STORAGE を, request_permission でコールバックしても、 check_permission をしても、True になります。 ですから権限としては問題ないように見えます。 そこで、/aaa の直下にフォルダ bbb を作成すべく /aaa の書き込み属性を調べたところ、os.access('/aaa' , os.W_OK) は false となります。 書き込み属性が無いと判断し、書き込み属性を与えるべく os.chmod('/aaa', 0o700) を実行すると、以下の例外が発生します。 Traceback (most recent call last)_ 04-12 11:46:16.739 22066 22086 I python : File "/storage/emulated/0/kivy/kvtest/fmng.py", line 135, in not_found_mkdir 04-12 11:46:16.739 22066 22086 I python : os.chmod(tp_prev_path, 0o700) 04-12 11:46:16.739 22066 22086 I python : PermissionError_ [Errno 1] Operation not permitted_ '/storage/F677-248B/MyData' 色々ググりましたが、Linux 未経験の私には限界があります。 よろしければアドバイスいただけますでしょうか?
gottadiveintopy

2022/04/12 13:21

とりあえず別のディレクトリへ書き込めるか試してみてください。例えばweb browserがファイルを保存する所(/storage/emulated/0/Download)とか。そこも一応外部ストレージに含まれるので。ここに書き込めるようなら外部ストレージへの書き込み権限はちゃんと得られているものの外付けSDカードだけが何らかの理由で書き込めない事になります。そうなったら 1) OSの設定で何か外付けSDへのアクセスを遮っている物がないか 2) SDカードのマウントの仕方を変える (内部ストレージとしてマウント or 外部ストレージとしてマウント) 等を試してみると良いと思います。後エラーを再現する最小限の実行可能なコードを載せてもらえますか?時間ができたらこっちで試したいので。
gottadiveintopy

2022/04/12 13:23

Android OSのversion も教えて欲しいです。
gottadiveintopy

2022/04/12 13:40

web browser がファイルを保存する所は各環境に依ると思うのでそちらの環境では /storage/emulated/0/Download ではないかもしれません。
Mr.Prgrmr

2022/04/13 01:05

gottadiveintopy さん、ごめんください。 まず /storage/emulated/0/Android/Download に xxx はフォルダ作成できました。 ただし、 os.access(' ', os.W_OK) は False と返りますし、 mkdir() では、なぜか no such file or directory とエラーになりますが、 makedirs(' ', exist_ok=True) は正常終了しました。 ここがよく分かりませんが、結果オッケーです。 同じプログラムに、SDカードの /storage/F677-248B/MyData で実行すると、 makedirs(' ', exist_ok=True) は、やはり 04-13 09:47:53.629 21876 21894 I python : [DEBUG ] ### Traceback (most recent call last)$ 04-13 09:47:53.629 21876 21894 I python : File "/storage/emulated/0/kivy/kvtest/main.py", line 213, in process 04-13 09:47:53.629 21876 21894 I python : os.makedirs(tp_xx2, exist_ok=True) 04-13 09:47:53.629 21876 21894 I python : File "/github/workspace/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/os.py", line 223, in makedirs 04-13 09:47:53.629 21876 21894 I python : PermissionError$ [Errno 13] Permission denied$ '/storage/F677-248B/MyData/xxx' となります。 以下はプログラム抜粋です。 # tp_xxx = '/storage/emulated/0/Android/Download' tp_xxx = '/storage/F677-248B/MyData' if os.access(tp_xxx, os.R_OK): cussys.debug_log('attr can read : ' + tp_xxx) else: cussys.debug_log("attr can'nt read : " + tp_xxx) if os.access(tp_xxx, os.W_OK): cussys.debug_log('attr can write : ' + tp_xxx) else: cussys.debug_log("attr can'nt write : " + tp_xxx) try: tp_xx2 = tp_xxx + '/xxx' cussys.debug_log('make dir start : ' + tp_xx2) os.makedirs(tp_xx2, exist_ok=True) # os.mkdir(tp_xx2) cussys.debug_log('make dir end : ' + tp_xx2) except: cussys.debug_log('make dir error!') tp_msg = traceback.format_exc() + '\n' + tp_xx2 cussys.debug_log(tp_msg) 以上、お忙しいところ恐縮ですがどうぞよろしくお願いします。
Mr.Prgrmr

2022/04/13 01:13

追記します OS は、Android 7.0 です。
Mr.Prgrmr

2022/04/13 01:39

追記します。permission 関係は、以下です。 def android_permission_write_ext_storage(): tp_errmsg = '' tp_permission = Permission.WRITE_EXTERNAL_STORAGE tp_ok = check_permission(tp_permission) if tp_ok: debug_log('check permission ok') else: debug_log('check permission None') debug_log(' permission start') tp_fpmsn = ForPermission() request_permissions([tp_permission], tp_fpmsn.callback) debug_log(' permission end') # 再度点検 tp_ok = check_permission(tp_permission) if tp_ok: debug_log('recheck permission ok') else: debug_log('recheck permission None') tp_errmsg = 'Permission Error : ' + tp_permission return tp_errmsg
gottadiveintopy

2022/04/13 07:54

コメント欄だとmarkdownが効かず読みづらいので最初の質問を書いた部分を編集して載せてもらえますか?それとcussysやForPermissionの定義が見当たらないので実行可能ではないです。debug_logをprint()あるいはprint(..., file=sys.stderr)に置き換えたりrequest_permissions()へ渡すcallback関数も載せるなどして、不要な部分を削ぎ落として、コピペするだけで動く状態のコードを載せて欲しいです。
gottadiveintopy

2022/04/13 11:33

こっちでも試してみたところ、web browserの保存先などへは書き込めますが外付けSDは同様にPermissionErrorになりました。外付けSDへ書き込むには別に何らかの手続きを踏む必要がありそうですが正直それが何なのか私には分かりません。少なくとも上のandroid moduleでは無理そうなのでAndroidのJava API上での手順を調べた上でPyjniusでそれを再現する必要がありそうです。
Mr.Prgrmr

2022/04/13 23:27

すいません。本日コードを修正してアップしようと思っていました。 早速試していただいてありがとうございます。 本件手強いです。私にはハードルが高いですが、諦めたくもありません。 一ステップずつでも、具体的にアドバイスいただければ、挑戦したいと思います。 よろしくお願いします。
gottadiveintopy

2022/04/16 12:40 編集

ええ、そういった感じの情報をしらみ潰しに試していくしかないと思います。このteratailにも幾つか情報はあるみたいですし(https://teratail.com/search?q=tag%3Aandroid%20SD%E3%82%AB%E3%83%BC%E3%83%89)。ただ私にはどれが適切な情報かわからないですが。 もし英語ができるのなら stackoverflowはもちろんkivyのdiscord serverのandroid-supportチャンネルや https://www.reddit.com/r/kivy/ で訊くのもありだと思います。 pyjniusの使い方については公式docの他、 https://github.com/kivy/plyer/blob/master/plyer/platforms/android/storagepath.py https://github.com/kivy/python-for-android/blob/2ca492a3be0f2ecd88031672c4b52c646e9a6c51/pythonforandroid/recipes/android/src/android/storage.py#L85-L117 などが参考になるかなと思います。
Mr.Prgrmr

2022/04/19 00:31

gottadiveintopyさん、ごめんください。 SDカードの許可の件でコーディングしております。 基本的なことで恐縮ですが、許可の結果を取るのはコールバック関数ですが、 メインの処理としては、この許可の結果を待って、確認してから次のステップに進めたいです。 これが、どうウェイトすれば良いか分かりません。 アドバイスいただけませんでしょうか?
Mr.Prgrmr

2022/04/19 02:35

gottadiveintopyさん、ごめんください。 すいません。普通のループでできそうです。 お騒がせしました。
Mr.Prgrmr

2022/04/21 00:41

gottadiveintopyさん、ごめんください。 SDカードアクセスの許可が取れるようになりましたが、 やはり、mkDir でPermission エラーとなります。 色々調べましたが、mkDir の様な関数を使用せず、SAF を使用すれば書き込みができるのかと DocumentFile を Launcher で使用したく、 DocumentFile = autoclass('androidx.documentfile.provider.DocumentFile') としますが、 jnius.jnius.JavaException: JVM exception occurred: Didn't find class "androidx.documentfile.provider.DocumentFile" on path: DexPathList[[zip file "/data/app/org.kivy.launcher-1/base.apk"],nativeLibraryDirectories=[/data/app/org.kivy.launcher-1/lib/arm, /data/app/org.kivy.launcher-1/base.apk!/lib/armeabi-v7a, /system/lib, /vendor/lib]] java.lang.ClassNotFoundException となります。 Launcher で、DocumentFile を使用したいのですが、ご教授ねがいますでしょうか?
gottadiveintopy

2022/04/21 09:31 編集

そのlibraryがLauncherには含まれていないようなのでそれが含まれたLauncherを作る必要がありそうです。具体的にはLauncherのrepositoryをforkしてmainの派生branchを作ってbuildozer.specの以下の部分を書き換えて下さい。 https://github.com/kivy/buildozer/blob/ee2b16c3c0fb31568efba631dd6991cc8e9f0093/buildozer/default.spec#L189-L195 多分ですが次のような感じになると思います。 android.gradle_dependencies = "androidx.documentfile:documentfile:1.0.1" android.enable_androidx = True 勿論specファイル内のコメントにあるようにandroid.apiを28以上に引き上げる事も忘れずに。 android.api = 28 書き換えたらGitHubs Actionsの設定ファイルを弄って今作った派生branch上でLauncherのapkが作られるようにしてあげてください。 参考 https://qiita.com/gotta_dive_into_python/items/2c7cacde43e1918c8dd2 https://github.com/gottadiveintopython/kivy-launcher/commit/4cb1ce2925b4cdd1aa23d7caaf64d78759cc14bb
Mr.Prgrmr

2022/04/22 01:29

お世話になります。 すいません。apkを作成したことがないので、まず環境づくりに戸惑っています。 当該環境はWindowsでは無理でしょうか? また、環境づくり・apk作成手順で分かりやすいサイトをご紹介していただけないでしょうか? よろしくお願いします。
Mr.Prgrmr

2022/04/22 07:07

gottadiveintopyさん、ごめんください。 apkの作成方法ですが、以下の記述がシンプルで理解しやすいですが、これで進めるとまずいでしょうか? https://self-development.info/python%E3%81%A7%E3%82%B9%E3%83%9E%E3%83%9B%E3%82%A2%E3%83%97%E3%83%AA%EF%BC%88apk%EF%BC%89%E3%82%92%E9%96%8B%E7%99%BA%E3%81%99%E3%82%8B%E3%80%90buildozer%E3%80%91/ > Launcherのrepositoryをforkしてmainの派生branchを作ってbuildozer.specの以下の部分を書き換えて下さい。 結局は、Launcherの main.py と buildozer.spec をダウンロードして、修正をして、apkを作成する。ではまずいでしょうか? > 書き換えたらGitHubs Actionsの設定ファイルを弄って今作った派生branch上でLauncherのapkが作られるようにしてあげてください。 この記述も敷居が高いです。 ごめんなさい。アドバイスください。 因みにWindowsでのapk作成、逆に面倒そうなので、Ubuntuをインストールすることにしました。
gottadiveintopy

2022/04/23 11:17

私が言っているのはGitHub Actionsに任せるやり方なので自分でapkを作る必要はないです。どうしても自分で作りたいのであればそれでも良いと思いますが、今までapkを作ったことが無くてかつlinuxを触ったことも無いとなると過酷な長旅になるかもしれません。 参考にしようとしている文献ですが、apkの作成手順自体は問題ないですが仮想環境には触れていないので注意してください。載っている手順をそのままsystemのpython上で行うとsystemが汚れてしまいます。OS自体をapk作成専用にするのであればそれでも問題無いかもしれません。 ちなみにMr.Prgrmrさんはforkやbranchのようなgit関連の用語は知っているけどGitHub Actionsは良く知らないって事で合ってますか?
Mr.Prgrmr

2022/04/23 12:16

gottadiveintopy さん、ごめんください。 GitHub Actions を使用するとどうなるかも理解していないです。 apkを作る必要がなくなるのも知りませんでした。 すいません。forkやbranchなど、git関連の用語も分かりませんので、分けも分からず GitHub Actions を使用せずにと申しました。 今回、launcher を作っていただきありがとうございます。 しかし私は、Github 自体も理解していませんので、今後のために git関連の習得をしたいと思います。 手順としては、 1)GitHub を学ぶ 2)GihHub Action を学ぶ でよろしいでしょうか? できれば、自習に適したサイト等を紹介していただければ幸いです。 色々申し訳ありません。
gottadiveintopy

2022/04/24 12:12

git+GitHubの後にGitHub Actionsを学ぶのが良いです。"適したサイト"は私には分かりません。検索結果の中で分かりやすいなと感じた物を選んでください。
Mr.Prgrmr

2022/04/26 02:48

gottadiveintopy さん、ごめんください。 途中経過を報告いたします。 作成していただいた launcher で行けるところまで進めました。 結論としては、Andriud 6以降 厳しくなり、SDカードの書き込みは、mkdir 等の関数ではアクセスできず、DocumentFileクラスを使用しなければいけないと理解し、とりあえずファイル作成までできるようになりました。 今後もDocumentFileクラスを使用して進めて行きたいと思います。(構想している事ができるかは不明ですが) ただ、また新たなクラスが必要になりましたので、launcherの作成をしなければいけません。 ようやく、git関連を一から学びはじめたいと思います。 すいません。不明なところがあればお聞きするかも思いますが、よろしくお願いします。
Mr.Prgrmr

2022/04/28 08:14

gottadiveintopy さん、ごめんください。 要約、派生branch sdcard_access をpushし、apk作成を実行しましたが、以下のエラーがでます。 どう解決すればよろしいでしょうか? [DEBUG]: > Task :processDebugResources FAILED [DEBUG]: [DEBUG]: FAILURE: Build failed with an exception. [DEBUG]: [DEBUG]: * What went wrong: [DEBUG]: Execution failed for task ':processDebugResources'. サイトは以下です。 https://github.com/nattokukun/kivy-launcher/runs/6206882499?check_suite_focus=true
gottadiveintopy

2022/04/28 13:42

# を取り忘れている行がありますね
Mr.Prgrmr

2022/05/02 07:44

gottadiveintopyさん、ごめんください。 また、途中報告です。 今回のapk作成エラーですが、ご指摘のコメントミスだけでは解決せず、 結論として、追加するバッケージのバージョンがまずいようでした。 android.gradle_dependencies = "androidx.core:core:1.7.0" が、NGで、 android.gradle_dependencies = "androidx.core:core:1.1.0" が、OKとなりました。 何故かは不明です。 次のステップに進みます。ありがとうございました。
Mr.Prgrmr

2022/05/06 00:43

gottadiveintopy さん、ごめんください。 同様に、 [android.gradle_dependencies] "androidx.documentfile:documentfile:1.0.1" "androidx.core:core:1.7.0" としたところ、apk作成が成功しました。 ただ、処理時間が8分ほど多くかかり、作成モジュールサイズも2倍になりました。 さらに、pyアプリを実行すると、以下のログを出し即落ちてしまいます。 05-06 09:26:18.974 26082 26102 I python : starting activity 05-06 09:26:19.164 26082 26102 I python : creating intent 05-06 09:26:19.166 26082 26102 I python : ready to start intent <java.lang.String at 0xc7bbe550 jclass=java/lang/String jself=<LocalRef obj=0x20180e at 0xc7c7a7f0>> <java.lang.String at 0xc7c9a370 jclass=java/lang/String jself=<LocalRef obj=0x1017fa at 0xc7bb6f10>> 05-06 09:26:19.177 26082 26102 I python : activity started どうしたものでしょうか? アドバイス宜しくお願いします。 https://github.com/nattokukun/kivy-launcher/actions/runs/2278900899
gottadiveintopy

2022/05/07 20:55 編集

> ただ、処理時間が8分ほど多くかかり、作成モジュールサイズも2倍になりました。 出来上がったapkのファイル名を見ると arm64-v8a と armeabi-v7a の二つのABIが入っているので、どうやらapkには二種類分のnative codeが詰め込まれてしまったようです。これに関してはちょっとこっちで調べてみます。 > さらに、pyアプリを実行すると、以下のログを出し即落ちてしまいます。 python interpreterの吐くログだけだと手がかりを得られない状況のようなので全ログから原因を探してみて下さい。(例: adb logcat | grep un_official_launcher) <- windowsにはgrepコマンドがないようなので別のやり方で "un_official_launcher" を含む行だけが出力されるように選別する。 後、アプリのコードを載せてもらえますか?このコメント欄ではなく最初に質問を書いた部分に。
Mr.Prgrmr

2022/05/06 04:07

お世話になります。以下でよろしいでしょうか? [ro.product.cpu.abi]: [arm64-v8a] [ro.product.cpu.abilist]: [arm64-v8a,armeabi-v7a,armeabi] [ro.product.cpu.abilist32]: [armeabi-v7a,armeabi] [ro.product.cpu.abilist64]: [arm64-v8a]
gottadiveintopy

2022/05/06 10:05

ええ、それです。 現在buildozer.spec にて android.arch = armeabi-v7a としているはずなのに armeabi-v7a と arm64-v8a の両方がapkに含まれてしまっているので一旦ここを android.archs = armeabi-v7a,arm64-v8a として故意に両方含めてみてください(archsと複数形なのに注意)。
Mr.Prgrmr

2022/05/09 00:16

> android.archs = armeabi-v7a,arm64-v8a > として故意に両方含めてみてください これで作成しましたが、apk サイズは前回と同じです。
Mr.Prgrmr

2022/05/09 00:26

このドキュメントによると android.request_permissions() は必ずApp.build()内で一度だけ呼ばないといけないようですが アプリの中に実行ボタンがあり、その実行ボタンを押すごとに、android.request_permissions() を呼んでおりますが、これが原因で mkdi rが使用できないのでしょうか? 後、私は、DocumentFile 等の SAF からしかSDカードにアクセスできないものと理解し、DocumentFile を使用してアプリ構築を考えておりますが、 以下のサイト通り、SDカード直下にファイルの作成はできますが、SDカード直下フォルダ MyData フォルダ内のファイルは作成できず限界を感じております。 https://qiita.com/kksk/items/35c16e50466485e11ddc 具体的には作成するファイル名を、MyData/xxx としても 直下にMyData_xxx と言うファイルが出来てしまいます。本件も何とか お力をお借りできませんでしょうか?
gottadiveintopy

2022/05/09 01:19 編集

> これで作成しましたが、apk サイズは前回と同じです。 故意に含めたのでサイズが増えたままなのは想定通りです。その状態でアプリが正常に動くかどうか確かめてみたらどうですか という提案でした。説明が足りなくてごめんなさい。 > アプリの中に実行ボタンがあり、その実行ボタンを押すごとに、android.request_permissions() を呼んでおりますが、これが原因で mkdirが使用できないのでしょうか? いやわからないです。ただ上記の文献で "App.build()内で一度だけ呼ばないといけない" と言っているので試す価値があるかもと思って言いました。 > 具体的には作成するファイル名を、MyData/xxx としても 直下にMyData_xxx と言うファイルが出来てしまいます。本件も何とか お力をお借りできませんでしょうか? 実際のコードを上の部分に追記してもらえますか?
Mr.Prgrmr

2022/05/09 02:09

申し訳ありません。沢山質問いたしましたが、とりあえず、 > その状態でアプリが正常に動くかどうか確かめてみたらどうですか 状況は前回と変わりません。アプリ起動時に落ちます。ログも同じです。
Mr.Prgrmr

2022/05/09 02:37

ログフィルターしてみました。 05-09 11:13:28.402 3629 3629 I Timeline: Timeline: Activity_launch_request id:org.kivy.un_official_launcher time:1173095 05-09 11:13:28.405 2141 2866 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=org.kivy.un_official_launcher/org.kivy.android.PythonActivity bnds=[804,372][1068,654]} from uid 10132 on display 0 05-09 11:13:28.449 2141 17816 I ActivityManager: Start proc 22930:org.kivy.un_official_launcher/u0a373 for activity org.kivy.un_official_launcher/org.kivy.android.PythonActivity 05-09 11:13:28.518 22930 22945 V pythonutil: Unpacking /data/app/org.kivy.un_official_launcher-1/lib/arm64/libpybundle app 05-09 11:13:28.518 22930 22945 V pythonutil: Extracting /data/app/org.kivy.un_official_launcher-1/lib/arm64/libpybundle assets. 05-09 11:13:28.585 2141 2193 I ActivityManager: Displayed org.kivy.un_official_launcher/org.kivy.android.PythonActivity: +154ms 05-09 11:13:28.646 2141 2193 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{e91a309 u0 org.kivy.un_official_launcher/org.kivy.android.PythonActivity t27306} time:1173338 05-09 11:13:28.772 2141 2193 I WindowManager: Destroying surface Surface(name=Starting org.kivy.un_official_launcher) called by com.android.server.wm.WindowStateAnimator.destroySurface:2024 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:890 com.android.server.wm.WindowState.destroyOrSaveSurface:2144 com.android.server.wm.AppWindowToken.destroySurfaces:363 com.android.server.wm.WindowStateAnimator.finishExit:569 com.android.server.wm.WindowStateAnimator.stepAnimationLocked:495 com.android.server.wm.WindowAnimator.updateWindowsLocked:303 com.android.server.wm.WindowAnimator.animateLocked:704 05-09 11:13:29.290 22930 22930 V pythonutil: Library loading error: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/org.kivy.un_official_launcher-1/base.apk"],nativeLibraryDirectories=[/data/app/org.kivy.un_official_launcher-1/lib/arm64, /data/app/org.kivy.un_official_launcher-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libpython3.5m.so" 05-09 11:13:29.291 22930 22930 V pythonutil: Library loading error: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/org.kivy.un_official_launcher-1/base.apk"],nativeLibraryDirectories=[/data/app/org.kivy.un_official_launcher-1/lib/arm64, /data/app/org.kivy.un_official_launcher-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libpython3.6m.so" 05-09 11:13:29.291 22930 22930 V pythonutil: Library loading error: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/org.kivy.un_official_launcher-1/base.apk"],nativeLibraryDirectories=[/data/app/org.kivy.un_official_launcher-1/lib/arm64, /data/app/org.kivy.un_official_launcher-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libpython3.7m.so" 05-09 11:13:29.294 22930 22930 V pythonutil: Library loading error: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/org.kivy.un_official_launcher-1/base.apk"],nativeLibraryDirectories=[/data/app/org.kivy.un_official_launcher-1/lib/arm64, /data/app/org.kivy.un_official_launcher-1/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]] couldn't find "libpython3.9.so" 05-09 11:13:29.326 22930 22949 V SDL : Running main function SDL_main from library /data/app/org.kivy.un_official_launcher-1/lib/arm64/libmain.so 05-09 11:13:29.327 22930 22949 I python : /data/user/0/org.kivy.un_official_launcher/files/app 05-09 11:13:29.327 22930 22949 I python : /data/user/0/org.kivy.un_official_launcher/files/app/_python_bundle/stdlib.zip:/data/user/0/org.kivy.un_official_launcher/files/app/_python_bundle/modules 05-09 11:13:29.345 2141 2193 I Timeline: Timeline: Activity_windows_visible id: ActivityRecord{e91a309 u0 org.kivy.un_official_launcher/org.kivy.android.PythonActivity t27306} time:1174038 05-09 11:13:29.347 2141 2193 I WindowManager: Destroying surface Surface(name=org.kivy.un_official_launcher/org.kivy.android.PythonActivity) called by com.android.server.wm.WindowStateAnimator.destroyDeferredSurfaceLocked:919 com.android.server.wm.WindowStateAnimator.destroyPreservedSurfaceLocked:667 com.android.server.wm.WindowManagerService.destroyPreservedSurfaceLocked:8936 com.android.server.wm.WindowAnimator.animateLocked:792 com.android.server.wm.WindowAnimator.-wrap0:-1 com.android.server.wm.WindowAnimator$1.doFrame:140 android.view.Choreographer$CallbackRecord.run:869 android.view.Choreographer.doCallbacks:683 05-09 11:13:29.389 22930 22949 I python : Android path ['.', '/data/user/0/org.kivy.un_official_launcher/files/app/_python_bundle/stdlib.zip', '/data/user/0/org.kivy.un_official_launcher/files/app/_python_bundle/modules', '/data/user/0/org.kivy.un_official_launcher/files/app/_python_bundle/site-packages'] 05-09 11:13:29.390 22930 22949 I python : os.environ is environ({'PATH': '/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin', 'ANDROID_BOOTLOGO': '1', 'ANDROID_ROOT': '/system', 'ANDROID_ASSETS': '/system/app', 'ANDROID_DATA': '/data', 'ANDROID_STORAGE': '/storage', 'EXTERNAL_STORAGE': '/sdcard', 'ASEC_MOUNTPOINT': '/mnt/asec', 'BOOTCLASSPATH': '/system/framework/core-oj.jar:/system/framework/core-libart.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/apache-xml.jar:/system/framework/org.apache.http.legacy.boot.jar:/system/framework/tcmiface.jar:/system/framework/telephony-ext.jar:/system/framework/WfdCommon.jar:/system/framework/oem-services.jar', 'SYSTEMSERVERCLASSPATH': '/system/framework/services.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar', 'ANDROID_SOCKET_zygote': '11', 'ANDROID_ENTRYPOINT': 'main.pyc', 'ANDROID_ARGUMENT': '/data/user/0/org.kivy.un_official_launcher/files/app', 'ANDROID_APP_PATH': '/data/user/0/org.kivy.un_official_launcher/files/app', 'ANDROID_PRIVATE': '/data/user/0/org.kivy.un_official_launcher/files', 'ANDROID_UNPACK': '/data/user/0/org.kivy.un_official_launcher/files/app', 'PYTHONHOME': '/data/user/0/org.kivy.un_official_launcher/files/app', 'PYTHONPATH': '/data/user/0/org.kivy.un_official_launcher/files/app:/data/user/0/org.kivy.un_official_launcher/files/app/lib', 'PYTHONOPTIMIZE': '2', 'P4A_BOOTSTRAP': 'SDL2', 'PYTHON_NAME': 'python', 'P4A_IS_WINDOWED': 'True', 'P4A_ORIENTATION': 'sensor', 'P4A_NUMERIC_VERSION': 'None', 'P4A_MINSDK': '21', 'LC_CTYPE': 'C.UTF-8'}) 05-09 11:13:30.150 22930 22949 I python : [INFO ] [Logger ] Record log in /data/user/0/org.kivy.un_official_launcher/files/app/.kivy/logs/kivy_22-05-09_5.txt 05-09 11:13:30.151 22930 22949 I python : [INFO ] [Kivy ] Installed at "/data/user/0/org.kivy.un_official_launcher/files/app/_python_bundle/site-packages/kivy/__init__.pyc" 05-09 11:13:34.590 22930 22949 I Timeline: Timeline: Activity_launch_request id:org.kivy.un_official_launcher time:1179283 05-09 11:13:34.591 2141 4355 I ActivityManager: START u0 {cmp=org.kivy.un_official_launcher/org.kivy.android.PythonActivity (has extras)} from uid 10373 on display 0 05-09 11:13:34.641 2141 2511 I WindowManager: WIN DEATH: Window{51a210f u0 SurfaceView - org.kivy.un_official_launcher/org.kivy.android.PythonActivity} 05-09 11:13:34.642 2141 2511 I WindowManager: Destroying surface Surface(name=SurfaceView - org.kivy.un_official_launcher/org.kivy.android.PythonActivity) called by com.android.server.wm.WindowStateAnimator.destroySurface:2024 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:890 com.android.server.wm.WindowState.removeLocked:1477 com.android.server.wm.WindowManagerService.removeWindowInnerLocked:2587 com.android.server.wm.WindowManagerService.removeWindowLocked:2545 com.android.server.wm.WindowState$DeathRecipient.binderDied:1808 android.os.BinderProxy.sendDeathNotice:688 <bottom of call stack> 05-09 11:13:34.642 2141 3476 I ActivityManager: Process org.kivy.un_official_launcher (pid 22930) has died 05-09 11:13:34.642 2141 3476 W ActivityManager: Force removing ActivityRecord{e91a309 u0 org.kivy.un_official_launcher/org.kivy.android.PythonActivity t27306}: app died, no saved state 05-09 11:13:34.644 2141 4355 I WindowManager: WIN DEATH: Window{2a40527 u0 org.kivy.un_official_launcher/org.kivy.android.PythonActivity} 05-09 11:13:34.644 2141 4355 I WindowManager: Destroying surface Surface(name=org.kivy.un_official_launcher/org.kivy.android.PythonActivity) called by com.android.server.wm.WindowStateAnimator.destroySurface:2024 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:890 com.android.server.wm.WindowState.removeLocked:1477 com.android.server.wm.WindowManagerService.removeWindowInnerLocked:2587 com.android.server.wm.WindowManagerService.removeWindowLocked:2545 com.android.server.wm.WindowState$DeathRecipient.binderDied:1808 android.os.BinderProxy.sendDeathNotice:688 <bottom of call stack>
gottadiveintopy

2022/05/14 03:31

android.request_permissions()を呼ぶ場所をApp.build()に移して試したんですが同じ様にPermissionErrorでした。pyjnius を用いてandroid apiを叩く部分は私にとって未知の領域なので力にはなれないです。なので自力でなんとか開拓してください。わからない時はKivyタクやpythonタグを付けずに純粋にandroidの質問としてここで訊くのもいいんじゃないかと思います。 最後に現在の状況に合わせて質問を編集した方が良いと思います。 1. python2は使ってないので「Python2.7」タグを「Python」タグに変える。 2. MyData/xxx としても 直下にMyData_xxx と言うファイルが出来てしまう というコードを載せる
Mr.Prgrmr

2022/05/14 12:41

お世話になります。 > 以下のサイト通り、SDカード直下にファイルの作成はできますが、SDカード直下フォルダ MyData フォルダ内のファイルは作成できず限界を感じております。 報告遅れました。 本件は少し進み、SDカード直下のフォルダ以外でも書き込み可能となりました。 DocumentFileクラスの使用方法に、私の見落としがあったようです。 ネット検索で、使用例が要約見つかり、それがヒントになりました。 もう少し進めてみます。 後 Launcher の件ですが、手も足も出ないので、今は、 android.gradle_dependencies = "androidx.core:core:1.1.0" の状態で、アプリテストを進めています。 以上、現状報告です。
gottadiveintopy

2022/05/14 12:58

現状のコードを載せてくれますか?こういった質問サイトで訊く時は回答者が問題を再現できるように載せるのが普通ですよ。
Mr.Prgrmr

2022/05/14 13:34

常識が無く申し訳ありません。 SDカードの書きこみの件は、まだ不十分なので、載せるべきではないと思いますし、これから更に進めていきます。 また、これまでの私の質問の仕方に具体性がない(コードを載せろ)とのお叱りでしたら、反省いたします。 申し訳ありません。以後気を付けます。
Mr.Prgrmr

2022/07/04 07:45

gottadiveintopyさん、ごめんください。 お陰様で、色々他のことをやりながらで時間がかかりましたが、 本日ようやく目標としておりましたLauncherアプリが完成しました。 大変おせになり感謝申し上げます。 ついては本質問のセッションですが、このまま放置しておいてよろしいでしょうか? アドバイスいただけますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問