RePlugin调试时执行Gradle任务rpInstallAndRunPluginDebug失败原因分析

Android Studio版本:Android Studio Electric Eel | 2022.1.1

gradle插件版本:7.4.2

gradle文件:gradle-7.5-all.zip

用Android Studio打开plugin工程,在界面右侧执行gradle任务replugin-plugin执行rpInstallAndRunPluginDebug任务,

预期结果:编译插件并运行插件

实际结果:编译插件但并未运行插件

task执行日志如下:

java 复制代码
> Task :app:rpInstallPluginDebug
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe shell am start -n "com.qihoo360.replugin.sample.host/com.qihoo360.replugin.sample.host.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
< replugin-plugin-v3.1.0 > - Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.qihoo360.replugin.sample.host/.MainActivity }
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe shell am broadcast -a com.qihoo360.replugin.sample.host.replugin.uninstall -e plugin webview
< replugin-plugin-v3.1.0 > - Broadcasting: Intent { act=com.qihoo360.replugin.sample.host.replugin.uninstall flg=0x400000 (has extras) }
< replugin-plugin-v3.1.0 > - Broadcast completed: result=0
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe shell am force-stop com.qihoo360.replugin.sample.host
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe shell am start -n "com.qihoo360.replugin.sample.host/com.qihoo360.replugin.sample.host.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
< replugin-plugin-v3.1.0 > - Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.qihoo360.replugin.sample.host/.MainActivity }
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe push D:\WorkProject2\qihoo\RePlugin-dev\RePlugin-dev\replugin-sample\plugin\plugin-webview\app\build\outputs\apk\debug\app-debug.apk /sdcard/
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe shell pm grant com.qihoo360.replugin.sample.host android.permission.WRITE_EXTERNAL_STORAGE 
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe shell pm grant com.qihoo360.replugin.sample.host android.permission.READ_EXTERNAL_STORAGE 
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe shell sleep 2 
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe shell am broadcast -a com.qihoo360.replugin.sample.host.replugin.install -e path /sdcard/app-debug.apk -e immediately true 
< replugin-plugin-v3.1.0 > - Broadcasting: Intent { act=com.qihoo360.replugin.sample.host.replugin.install flg=0x400000 (has extras) }
< replugin-plugin-v3.1.0 > - Broadcast completed: result=0

> Task :app:rpInstallAndRunPluginDebug
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe shell am broadcast -a com.qihoo360.replugin.sample.host.replugin.start_activity -e plugin webview
< replugin-plugin-v3.1.0 > - Broadcasting: Intent { act=com.qihoo360.replugin.sample.host.replugin.start_activity flg=0x400000 (has extras) }
< replugin-plugin-v3.1.0 > - Broadcast completed: result=0

BUILD SUCCESSFUL in 3s
31 actionable tasks: 2 executed, 29 up-to-date

Build Analyzer results available
18:07:39: Execution finished 'rpInstallAndRunPluginDebug'.

发现一条日志

java 复制代码
< replugin-plugin-v3.1.0 > $ D:\.env\Android\hw-android-sdk\platform-tools\adb.exe push D:\WorkProject2\qihoo\RePlugin-dev\RePlugin-dev\replugin-sample\plugin\plugin-webview\app\build\outputs\apk\debug\app-debug.apk /sdcard/

gradle将生成的新插件push到了设备里面

并且logcat过滤sdcard有如下日志:

java 复制代码
2024-12-03 18:15:25.011  8724-8724  ziparchive              com.qihoo360.replugin.sample.host    W  Unable to open '/sdcard/app-debug.apk': Permission denied
2024-12-03 18:15:25.011  8724-8724  st:GuardService         com.qihoo360.replugin.sample.host    E  Failed to open APK '/sdcard/app-debug.apk': I/O error
2024-12-03 18:15:25.012  8724-8724  PackageManager          com.qihoo360.replugin.sample.host    W  Failure to parse package archive apkFile= /sdcard/app-debug.apk
2024-12-03 18:15:25.012  8724-8724  HostEventCallbacks      com.qihoo360.replugin.sample.host    D  onInstallPluginFailed: Failed! path=/sdcard/app-debug.apk; r=READ_PKG_INFO_FAIL

host宿主apk读取sdcard的新插件失败了,

在host宿主apk添加权限请求

java 复制代码
manifest
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />

java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
	if (!Environment.isExternalStorageManager()) {
		Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
		intent.setData(Uri.parse("package:" + getPackageName()));
		startActivity(intent);
		return;
	}
}

手动授权android.permission.MANAGE_EXTERNAL_STORAGE权限后,执行rpInstallAndRunPluginDebug任务,达到预期结果,成功编译插件并运行插件

注意1:

android.permission.MANAGE_EXTERNAL_STORAGE权限无法通过如下命令获得

adb shell pm grant com.qihoo360.replugin.sample.host android.permission.MANAGE_EXTERNAL_STORAGE

注意2:

plugin项目中至少要有一个activity在manifest中声明了下面这个action才会在执行完rpInstallAndRunPluginDebug任务后打开插件

java 复制代码
<intent-filter>
                <action android:name="android.intent.action.MAIN" />
            </intent-filter>
相关推荐
无限的鲜花18 分钟前
反射(原创推荐)
java·开发语言
IT二叔33 分钟前
Java项目部署-03-teamcity-cicd-docker镜像流水线方式部署
java·ci/cd·持续部署
一路向北he1 小时前
字节钢铁军团--“提供情境,而非控制”
java·开发语言·前端
超级数据查看器1 小时前
超级数据查看器 v10.0 发布
java·大数据·数据库·sqlite·安卓
GitLqr2 小时前
Flutter 3.44 插件内置 Kotlin (KGP) 双向兼容适配指南
android·flutter·dart
折哥的程序人生 · 物流技术专研2 小时前
《Java 100 天进阶之路》第50篇:阻塞队列与并发容器(2026版)
java·面试题·java进阶·blockingqueue·并发容器·集合源码·java100天进阶
ai_coder_ai3 小时前
编写自动化脚本,在自己后端服务中使用Open Api进行设备相关操作
java·运维·自动化
硕风和炜3 小时前
【LeetCode: 2492. 两个城市间路径的最小分数 + DFS】
java·算法·leetcode·深度优先·dfs·bfs·并查集
格子软件3 小时前
2026年GEO贴牌代理:分布式多级分账状态机源码深度解构
java·vue.js·分布式·vue·geo
我是一颗柠檬4 小时前
【Java项目技术亮点】加权轮询负载均衡算法
java·算法·负载均衡