Open skarl-api opened 6 months ago
buildozer.spec
android.api = 28
原始邮件
发件人:"skarl-api"< @.*** >;
发件时间:2024/2/20 12:01
收件人:"yingyan005/X-Chess"< @.*** >;
抄送人:"Subscribed"< @.*** >;
主题:[yingyan005/X-Chess] PermissionError: [Errno 13] Permission denied(Issue #1)
from kivy.app import App from jnius import autoclass, cast from kivy.uix.button import Button from kivy.resources import resource_find import subprocess import os from android.permissions import request_permissions, Permission, check_permission from android import mActivity, api_version
class UCIRunnerApp(App):
def build(self): return Button(text='Run UCI Engine', on_release=self.run_uci_engine) def run_uci_engine(self, instance): myPermissions = [("android.permission.RUN_SCRIPT"),("android.permission.MANAGE_EXTERNAL_STORAGE"), ("android.permission.READ_EXTERNAL_STORAGE"),("android.permission.WRITE_EXTERNAL_STORAGE"), ("android.permission.FOREGROUND_SERVICE"),("android.permission.SYSTEM_ALERT_WINDOW"), ("android.permission.SYSTEM_OVERLAY_WINDOW"),("android.permission.VIBRATE"), ("android.permission.EXECUTE_SHELL_COMMAND"),("android.permission.EXECUTE_COMMAND"), ("android.permission.INTERNET"), ("android.permission.MANAGE_ALL_FILES_ACCESS_PERMISSION"),("android.permission.MANAGE_EXTERNAL_STORAGE") ] request_permissions(myPermissions) if api_version > 29: Environment = autoclass("android.os.Environment") if not Environment.isExternalStorageManager(): self.permissions_external_storage() p_w = "android.permission.WRITE_EXTERNAL_STORAGE" if check_permission(p_w): Logger.info('有 WRITE_EXTERNAL_STORAGE 权限') original_engine_path = resource_find('king/assets/uci/CCStockFishArmv8') Logger.info(original_engine_path) self.permission_callback(original_engine_path) def permission_callback(self, original_engine_path): try: PythonActivity = autoclass("org.kivy.android.PythonActivity") context = PythonActivity.mActivity package_name = context.getPackageName() Logger.info(f"package_name:{package_name}") data_directory = f"/data/data/{package_name}/files/app/uci/pikafish" Logger.info(f"Data directory:{data_directory}") cmd = ['chmod', '777', f'{data_directory}'] result = subprocess.run(cmd, stdout=subprocess.PIPE) Logger.info(f"UCIEngine:subprocess.run {cmd},{result.stdout.decode()}") cmd = ['ls', '-la', f'{data_directory}'] result = subprocess.run(cmd, stdout=subprocess.PIPE) Logger.info(f"UCIEngine:subprocess.run {cmd},{result.stdout.decode()}") pro_name = os.path.basename(data_directory) cmd = ['ps', '-ef', '|', 'grep', f'{pro_name}'] result = subprocess.run(cmd, stdout=subprocess.PIPE) Logger.info(f"UCIEngine:subprocess.run {cmd},{result.stdout.decode()}") file_path = os.path.dirname(f'{data_directory}') Logger.info(file_path) process = subprocess.Popen([data_directory], cwd=file_path, stdin=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True) Logger.info(f"UCIEngine:subprocess.Popen {original_engine_path}, pid:{process.pid}") # 与引擎交互 self.write(process, 'uci') self.read(process, "uciok") except Exception as e: Logger.exception(e) def permissions_external_storage(self): PythonActivity = autoclass("org.kivy.android.PythonActivity") Environment = autoclass("android.os.Environment") Intent = autoclass("android.content.Intent") Settings = autoclass("android.provider.Settings") Uri = autoclass("android.net.Uri") if api_version > 29: # If you have access to the external storage, do whatever you need if Environment.isExternalStorageManager(): # If you don't have access, launch a new activity to show the user the system's dialog # to allow access to the external storage pass else: try: activity = mActivity.getApplicationContext() uri = Uri.parse("package:" + activity.getPackageName()) intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, uri) currentActivity = cast( "android.app.Activity", PythonActivity.mActivity ) currentActivity.startActivityForResult(intent, 101) except: intent = Intent() intent.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) currentActivity = cast( "android.app.Activity", PythonActivity.mActivity ) currentActivity.startActivityForResult(intent, 101) def write(self, process, message): try: process.stdin.write(message + "\n") process.stdin.flush() except Exception as e: Logger.exception(e) def read(self, process, keyword): output = [] while True: line = process.stdout.readline() if not line and process.poll() is not None: break Logger.info(line) output.append(line) if line.startswith(keyword): break return output
if name == 'main':
UCIRunnerApp().run()
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>
buildozer.spec # (int) Target Android API, should be as high as possible. android.api = 28
按照这个方式处理了,问题依然存在;PermissionError: [Errno 13] Permission denied: '/data/data/org.abc/files/app/king/assets/uci/pikafish'
不要把pikafish作为assets,再试试
原始邮件
发件人:"skarl-api"< @.*** >;
发件时间:2024/2/20 17:09
收件人:"yingyan005/X-Chess"< @.*** >;
抄送人:"yingyan005"< @. >;"Comment"< @. >;
主题:Re: [yingyan005/X-Chess] PermissionError: [Errno 13] Permissiondenied (Issue #1)
buildozer.spec # (int) Target Android API, should be as high as possible. android.api = 28 按照这个方式处理了,问题依然存在;PermissionError: [Errno 13] Permission denied: '/data/data/org.abc/files/app/king/assets/uci/pikafish'
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you commented.Message ID: @.***>
不要把pikafish作为assets,再试试
PermissionError: [Errno 13] Permission denied: '/data/data/org.abc/files/app/uci/pikafish'
@yingyan005 辛苦帮助看一下
奇怪的是文件权限已经是-rwxrwxrwx的了 但是就是出现问题
实在不行,你试下外置能否调起来
原始邮件
发件人:"skarl-api"< @.*** >;
发件时间:2024/2/22 17:26
收件人:"yingyan005/X-Chess"< @.*** >;
抄送人:"yingyan005"< @. >;"Mention"< @. >;
主题:Re: [yingyan005/X-Chess] PermissionError: [Errno 13] Permissiondenied (Issue #1)
奇怪的是文件权限已经是-rwxrwxrwx的了 但是就是出现问题
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>
实在不行,你试下外置能否调起来
SD CARD?
使用安卓桌面模拟器,版本是34
from kivy.app import App from jnius import autoclass, cast from kivy.uix.button import Button from kivy.resources import resource_find import subprocess import os from android.permissions import request_permissions, Permission, check_permission from android import mActivity, api_version
class UCIRunnerApp(App):
if name == 'main': UCIRunnerApp().run()