Android环境下chromedriver.exe权限错误问题求助(Kivy Buildozer打包应用)
解决Android上ChromeDriver权限及执行问题
核心问题分析
- 驱动格式错误:你用的是Windows平台的
.exe格式ChromeDriver,Android基于Linux内核,无法执行Windows可执行文件。 - 路径权限限制:Android 12的Scoped Storage和SELinux策略限制了外部存储(
/storage/emulated/0/)的文件执行权限,即便修改chmod 777也会被系统阻止。 - 版本匹配问题:ChromeDriver需与Chrome浏览器版本严格对应(主版本一致,小版本尽量匹配),当前你的Chrome版本是103.0.5060.129,建议使用完全匹配的ChromeDriver版本。
具体解决方案
1. 下载正确的Android版ChromeDriver
- 下载与你的Chrome版本(103.0.5060.129)匹配的ARM/ARM64架构ChromeDriver(根据设备架构选择)。
- 解压后去掉
.exe后缀,重命名为chromedriver。
2. 将ChromeDriver打包到应用内部
- 修改
buildozer.spec配置文件,把chromedriver加入资源列表,确保打包时放入应用私有目录:# 在spec文件的assets配置项中添加 assets = chromedriver,./path/to/your/chromedriver - 应用安装后,
chromedriver会被放在应用私有文件目录,避开外部存储的权限限制。
3. 修改代码适配Android环境
- 使用应用内部路径加载驱动,同时添加Android必需的Chrome参数:
from selenium import webdriver import os from kivy.app import App chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('headless') # Android环境必需参数,解决沙箱和内存限制问题 chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') chrome_options.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_UK'}) chrome_options.add_experimental_option('androidPackage', 'com.android.chrome') # 获取应用私有文件目录路径 driver_path = os.path.join(App.get_running_app().user_data_dir, 'chromedriver') # 设置执行权限 os.chmod(driver_path, 0o755) driver = webdriver.Chrome(executable_path=driver_path, options=chrome_options)
4. 权限设置注意事项
- 不要尝试修改外部存储文件的执行权限,Android 12的SELinux策略会阻止这类操作。
- 应用私有目录的文件,应用本身拥有完整的读写执行权限,设置
0o755即可满足要求。
内容的提问来源于stack exchange,提问作者Abdel Saeed
相关产品推荐
相关产品推荐

