Pyjnius: 1.3.0은 Android의 request_permission을 μ€‘λ‹¨ν•©λ‹ˆλ‹€.

에 λ§Œλ“  2020λ…„ 05μ›” 22일  Β·  23μ½”λ©˜νŠΈ  Β·  좜처: kivy/pyjnius

μ‚¬μš©μžκ°€ λ³΄κ³ ν–ˆμŠ΅λ‹ˆλ‹€(λΆˆν™”μ˜ Matrix0206).

from android import request_permission, Permission

request_permissions([Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE])
05-22 20:08:20.301 10976 11090 I python  :  Traceback (most recent call last):
05-22 20:08:20.301 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/app/main.py", line 300, in <module>
05-22 20:08:20.301 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/app.py", line 949, in run
05-22 20:08:20.302 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/app.py", line 919, in _run_prepare
05-22 20:08:20.302 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/app/main.py", line 132, in build
05-22 20:08:20.302 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/uix/relativelayout.py", line 274, in __init__
05-22 20:08:20.303 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/uix/floatlayout.py", line 65, in __init__
05-22 20:08:20.303 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/uix/layout.py", line 76, in __init__
05-22 20:08:20.303 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/uix/widget.py", line 359, in __init__
05-22 20:08:20.304 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/uix/widget.py", line 463, in apply_class_lang_rules
05-22 20:08:20.304 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/lang/builder.py", line 539, in apply
05-22 20:08:20.304 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/lang/builder.py", line 661, in _apply_rule
05-22 20:08:20.304 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/lang/builder.py", line 661, in _apply_rule
05-22 20:08:20.305 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/kivy/lang/builder.py", line 657, in _apply_rule
05-22 20:08:20.305 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/app/screens/main_screen/home.py", line 36, in __init__
05-22 20:08:20.305 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/android/permissions.py", line 570, in request_permissions
05-22 20:08:20.305 10976 11090 I python  :    File "/run/media/matrix/New_Volume/Developments/kivy-music-player/.buildozer/android/platform/build-arm64-v8a/build/python-installs/music_player/android/permissions.py", line 513, in request_permissions
05-22 20:08:20.306 10976 11090 I python  :    File "jnius/jnius_export_class.pxi", line 1134, in jnius.jnius.JavaMultipleMethod.__call__
05-22 20:08:20.306 10976 11090 I python  :  jnius.jnius.JavaException: No methods matching your arguments, requested: (['android.permission.READ_EXTERNAL_STORAGE', 'android.permission.WRITE_EXTERNAL_STORAGE'],), available: []

이것은 1.2.1μ—μ„œ μž‘λ™ν•˜λŠ” λ™μ•ˆ.

λͺ¨λ“  23 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„ 저와 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. ν•΄κ²° 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? buildozer λΉŒλ“œμ—μ„œ 이전 pyjniusλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? 감사 ν•΄μš”!

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„ 저와 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. ν•΄κ²° 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? buildozer λΉŒλ“œμ—μ„œ 이전 pyjniusλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? 감사 ν•΄μš”!

requirements = pyjnius==1.2.1,... λ₯Ό μ‚¬μš©ν•˜μ—¬ 버전을 κ³ μ •ν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

λ‚˜λŠ” Kivy μ‚¬λžŒμ΄ μ•„λ‹ˆμ§€λ§Œ λˆ„κ΅°κ°€κ°€ κ΄€λ ¨ μ†ŒμŠ€ μ½”λ“œμ— λŒ€ν•œ 링크λ₯Ό 뢙여넣을 수 μžˆμŠ΅λ‹ˆκΉŒ?

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„ 저와 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. ν•΄κ²° 방법은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? buildozer λΉŒλ“œμ—μ„œ 이전 pyjniusλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆκΉŒ? 감사 ν•΄μš”!

requirements = pyjnius==1.2.1,... λ₯Ό μ‚¬μš©ν•˜μ—¬ 버전을 κ³ μ •ν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ νš¨κ³Όκ°€ μžˆμ—ˆμŠ΅λ‹ˆλ‹€!

Pyjnius 버전을 1.2.1둜 κ³ μ •ν•˜λ©΄ 이 μž‘μ—…μ΄ κ°€λŠ₯ν•˜μ§€λ§Œ v1.2.1μ—λŠ” λ‹€λ₯Έ μ œν•œ 사항이 μžˆμœΌλ―€λ‘œ μ΄μƒμ μœΌλ‘œλŠ” μ•žμœΌλ‘œ ν•΄κ²°ν•΄μ•Ό ν•©λ‹ˆλ‹€....

κ±°κΈ°μ—μžˆμ„ κ²ƒμž…λ‹ˆλ‹€ https://github.com/kivy/python-for-android/blob/develop/pythonforandroid/recipes/android/src/android/permissions.py#L513 μ£„μ†‘ν•©λ‹ˆλ‹€. μ‘°κΈˆλ„.

Activity 클래슀 이름이 무엇인지 μ‰½κ²Œ μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— μ–΄λ ΅κ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

python_activity.requestPermissions λŠ” 비정적 방법인 것 κ°™μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 마치 정적 인 κ²ƒμ²˜λŸΌ ν˜ΈμΆœλ©λ‹ˆλ‹€. μ–΄λ–€ 이유둜 이전 λ²„μ „μ˜ pyjniusμ—μ„œ μž‘μ—…ν•˜λŠ” 데 μ‚¬μš©λ˜μ—ˆμŠ΅λ‹ˆλ‹€. λŒ€μ‹  python_activity.mActivity.requestPermissions λ₯Ό μ‚¬μš©ν•˜λ©΄ 1.3.0μ—μ„œ μž‘λ™ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

λ”°λΌμ„œ p4a의 android λΌμ΄λΈŒλŸ¬λ¦¬μ— μžˆλŠ” 버그인 것 κ°™μŠ΅λ‹ˆλ‹€.

쒋은 자리. λ¬Όλ‘ ; Javaμ—μ„œμ™€ 같이 정적 κ°œμ²΄μ—μ„œ 비정적 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 μ»΄νŒŒμΌλŸ¬μ—μ„œ ν—ˆμš©λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. @obfusk https://github.com/kivy/python-for-android/issues/2304λ₯Ό μ—…λ°μ΄νŠΈν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

Pyjnius 였λ₯˜κ°€ 더 λͺ…ν™•ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 즉, λ©”μ„œλ“œ 이름을 찾을 수 μ—†κ³  μ–΄λ–€ κ°œμ²΄μ—μ„œ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€!

λ‚˜λŠ” 이것이 νš¨κ³Όκ°€ μžˆμ—ˆλ‹€λŠ” 것에 였히렀 λ†€λžλ‹€. ~μ–΄λ–€ κ²½μš°μ— ν˜ΈμΆœλ˜μ—ˆμŠ΅λ‹ˆκΉŒ? 널 포인터? μ•„λ‹ˆλ©΄ 클래슀의 μ‹€μ œ μΈμŠ€ν„΄μŠ€?~

Pyjnius 였λ₯˜κ°€ 더 λͺ…ν™•ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 즉, λ©”μ„œλ“œ 이름을 찾을 수 μ—†κ³  μ–΄λ–€ κ°œμ²΄μ—μ„œ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€!

:+1:

Pyjnius 였λ₯˜κ°€ 더 λͺ…ν™•ν•  수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 즉, λ©”μ„œλ“œ 이름을 찾을 수 μ—†κ³  μ–΄λ–€ κ°œμ²΄μ—μ„œ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€!

πŸ‘

PR 전솑 - #558 μ°Έμ‘°.

κ·Έλž˜μ„œ μ•žμœΌλ‘œ 이 글을 μ½λŠ” λˆ„κ΅°κ°€λ₯Ό μœ„ν•œ μš”μ•½:

νŒ¨μΉ˜κ°€ λ³‘ν•©λ˜μ—ˆμŠ΅λ‹ˆλ‹€

아직; ν•˜μ§€λ§Œ μŠΉμΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€ :)

λ‚˜λŠ” κ·Έ FIXME κ°€ μ‹€μ œλ‘œ 관련이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. __get__ λŠ” λ°”μΈλ”©λœ λ©”μ„œλ“œλ₯Ό λ°˜ν™˜ν•˜λŠ” λŒ€μ‹  j_self λ₯Ό μ„€μ •ν•˜κ³  μΈμŠ€ν„΄μŠ€ λŒ€μ‹  ν΄λž˜μŠ€μ—μ„œ 호좜될 λ•Œ λ‹¨μˆœνžˆ self λ₯Ό λ°˜ν™˜ν•˜λ―€λ‘œ ν΄λž˜μŠ€μ—μ„œ 비정적 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ 호좜된 λ§ˆμ§€λ§‰ μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€(μžˆλŠ” 경우). λ¬Όλ‘  ν΄λž˜μŠ€μ—μ„œ 비정적 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 ν—ˆμš©λ˜μ–΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€(더 이상 ν—ˆμš©λ˜μ§€ μ•ŠμŒ).

λ‚˜λŠ” κ·Έ FIXME κ°€ μ‹€μ œλ‘œ 관련이 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. __get__ λŠ” λ°”μΈλ”©λœ λ©”μ„œλ“œλ₯Ό λ°˜ν™˜ν•˜λŠ” λŒ€μ‹  j_self λ₯Ό μ„€μ •ν•˜κ³  μΈμŠ€ν„΄μŠ€ λŒ€μ‹  ν΄λž˜μŠ€μ—μ„œ 호좜될 λ•Œ λ‹¨μˆœνžˆ self λ₯Ό λ°˜ν™˜ν•˜λ―€λ‘œ ν΄λž˜μŠ€μ—μ„œ 비정적 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ 호좜된 λ§ˆμ§€λ§‰ μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€(μžˆλŠ” 경우). λ¬Όλ‘  ν΄λž˜μŠ€μ—μ„œ 비정적 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것은 ν—ˆμš©λ˜μ–΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€(더 이상 ν—ˆμš©λ˜μ§€ μ•ŠμŒ).

더 κ°„λ‹¨ν•œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό 보여주고 μƒˆλ‘œμš΄ 이슈λ₯Ό λ§Œλ“€μ–΄ λ³ΌκΉŒμš”?

더 κ°„λ‹¨ν•œ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό 보여주고 μƒˆλ‘œμš΄ 이슈λ₯Ό λ§Œλ“€μ–΄ λ³ΌκΉŒμš”?

1.2.1:

>>> from jnius import autoclass
>>> s = autoclass("java.lang.String")
>>> s.toString()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "jnius/jnius_export_class.pxi", line 755, in jnius.JavaMethod.__call__
  File "jnius/jnius_export_class.pxi", line 699, in jnius.JavaMethod.ensure_method
jnius.JavaException: Unable to find a None method!
classname: None, definition: ()Ljava/lang/String;
>>> s("foo").toString()
'foo'
>>> s.toString()
'foo'

1.3.0:

>>> from jnius import autoclass
>>> s = autoclass("java.lang.String")
>>> s("foo").toString()
'foo'
>>> s.toString()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "jnius/jnius_export_class.pxi", line 1134, in jnius.JavaMultipleMethod.__call__
jnius.JavaException: No methods matching your arguments, requested: (), available: []

ν΄λž˜μŠ€μ—μ„œ 비정적 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것이 더 이상 μž‘λ™ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λ¬Έμ œκ°€ 이미 μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
이제 μš°λ¦¬λŠ” 문제의 원인을 μ΄ν•΄ν•©λ‹ˆλ‹€.
λ”°λΌμ„œ μƒˆλ‘œμš΄ λ¬Έμ œκ°€ ν•„μš”ν•˜μ§€ μ•Šλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

λ˜λŠ”: 이것이 1.3.0μ—μ„œ μ–΄λ–»κ²Œ μˆ˜μ •λ˜μ—ˆλŠ”μ§€ 아무도 λͺ¨λ₯΄λŠ” 것 κ°™κΈ° λ•Œλ¬Έμ—, μš°λ¦¬λŠ” 미래의 이전 λ™μž‘μœΌλ‘œ νšŒκ·€ν•˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” μœ„μ˜ 경우 μ˜ˆμ™Έλ₯Ό κΈ°λŒ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

그러면 FIXMEλ₯Ό μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

λ˜λŠ”: 이것이 1.3.0μ—μ„œ μ–΄λ–»κ²Œ μˆ˜μ •λ˜μ—ˆλŠ”μ§€ 아무도 λͺ¨λ₯΄λŠ” 것 κ°™κΈ° λ•Œλ¬Έμ—, μš°λ¦¬λŠ” 미래의 이전 λ™μž‘μœΌλ‘œ νšŒκ·€ν•˜λŠ” 것을 λ°©μ§€ν•˜κΈ° μœ„ν•΄ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μΆ”κ°€ν•©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λŠ” μœ„μ˜ 경우 μ˜ˆμ™Έλ₯Ό κΈ°λŒ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이제 그것을 μ‹€μ œλ‘œ μ•Œμ•„ λƒˆμŠ΅λ‹ˆλ‹€. 그리고 λ¬Έμ œλŠ” λΆ€λΆ„μ μœΌλ‘œλ§Œ μˆ˜μ •λ˜μ—ˆμŠ΅λ‹ˆλ‹€ :sweat_ smile:. #567 μ°Έμ‘°

그러면 FIXMEλ₯Ό μ œκ±°ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

아직은 μ•„λ‹ˆλΌκ³  μƒκ°ν•©λ‹ˆλ‹€. #563을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€.

참고둜, λ‚΄ p4 λΆ„κΈ°λ₯Ό '개발'둜 λ³€κ²½ν–ˆμ§€λ§Œ μ—¬μ „νžˆ 이 λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄ .buildozer 폴더λ₯Ό μ§€μš°κ³  λ‹€μ‹œ λΉŒλ“œν–ˆλŠ”λ° 'develop' λΆ„κΈ°κ°€ 링크 였λ₯˜ 없이 μƒˆλ‘œ λΉŒλ“œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(2020-12-13, 16:22 -0500) (νŽΈμ§‘: μ£„μ†‘ν•©λ‹ˆλ‹€. 이것은 λ‹€λ₯Έ λ¬Έμ œμ˜€μŠ΅λ‹ˆλ‹€. I μ§€κΈˆμœΌλ‘œμ„œλŠ” λ‚΄ μ‹œμŠ€ν…œμ—μ„œ buildozerλ₯Ό μ„±κ³΅μ μœΌλ‘œ μ‹€ν–‰ν•  수 μ—†λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.)

ν΄λΌμ΄μ–ΈνŠΈ μ•±μ—μ„œ 이 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 방법은 μˆ˜λ™μœΌλ‘œ pyjniusλ₯Ό ν˜ΈμΆœν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œλ² μ΄μŠ€κ°€ λ‹€λ₯Έ λ²„μ „μ—μ„œλ„ λ˜‘κ°™μ΄ 잘 μž‘λ™ν•˜λ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. λΆ„λͺ…νžˆ 이것을 μˆ˜μ •ν•˜λŠ” λ¦΄λ¦¬μŠ€κ°€ μ—¬κΈ°μ—μ„œ μ ˆμ‹€νžˆ ν•„μš”ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰