adb报错解决方案

在使用adb检查app的启动时间时遇到权限拒绝错误,经过排查发现是由于启动页面设置错误导致。具体报错信息涉及到Intent和权限问题,最终修正启动页面后问题得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在使用adb命令查看app某款软件的冷热启动时间的时候一直在报错,不知道是哪里出了问题,后来我又拿微信和淘宝实现了一下结果没有出错,此时我更加郁闷了,不知到是哪里出了问题,通过一下午的努力,终于找到了问题的根源,原来是将启动页面整错了,

报错代码

Starting: Intent { act=android.intent.action.MAIN cmp=com.dragon.read/.pages.main.MainFragmentActivity }
Security exception: Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.dragon.read/.pages.main.MainFragmentActivity } from null (pid=11623, uid=2000) not exported from uid 10397

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=com.dragon.read/.pages.main.MainFragmentActivity } from null (pid=11623, uid=2000) not exported from uid 10397
at com.android.server.wm.ActivityStackSupervisor.checkStartAnyActivityPermission(libmapleservices.so:1215412)
at com.android.server.wm.ActivityStarter.startAc

### 使用 Vue3 和 Element Plus 构建后台管理系统 #### 项目初始化与环境搭建 为了创建一个基于 Vue3 和 Element Plus 的后台管理系统,首先需要安装必要的依赖项并设置开发环境。这可以通过 Vue CLI 或 Vite 来快速完成。 ```bash npm init vite@latest my-vue-app --template vue cd my-vue-app npm install element-plus pinia axios ``` 上述命令会建立一个新的 Vue 应用程序,并安装 `element-plus` 组件库以及用于状态管理和 HTTP 请求的工具包[^2]。 #### 引入 Element Plus 及配置 为了让整个应用程序能够访问到 Element Plus 提供的各种 UI 控件,在项目的入口文件 main.js 中全局注册该插件: ```javascript import { createApp } from 'vue' import App from './App.vue' import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' const app = createApp(App) app.use(ElementPlus) app.mount('#app') ``` 这样就完成了对 Element Plus 的基本集成工作。 #### 创建布局组件 Layouts 一个好的后台管理平台通常会有固定的顶部导航栏、侧边菜单区和主要内容区域。可以新建几个基础性的 layout 文件夹来组织这些部分的内容结构。 - **Header.vue**: 负责显示网站Logo及用户信息等; - **Sidebar.vue**: 展现左侧的功能列表链接; - **MainContent.vue**: 动态渲染各个页面视图的位置; 通过组合以上三个子组件形成完整的页面框架[^3]。 #### 实现 Tab 页面切换功能 针对多标签页浏览的需求场景,可以在路由守卫里监听路径变化事件,从而控制是否重新加载当前激活选项卡的数据还是仅更新 URL 地址而不触发服务端交互行为。 ```javascript // router/index.js router.beforeEach((to, from, next) => { const toFullPath = to.fullPath; let openTabs = JSON.parse(sessionStorage.getItem('openTabs')) || []; if (!openTabs.find(item => item.path === toFullPath)) { openTabs.push({ title: to.meta.title, path: toFullPath }); sessionStorage.setItem('openTabs', JSON.stringify(openTabs)); } store.commit('SET_CURRENT_TAB', toFullPath); next(); }); ``` 这段逻辑实现了当用户点击不同的菜单项自动保存已打开过的标签记录至浏览器本地存储中,并同步更新选中的Tab索引位置。 #### 数据缓存机制 为了避免频繁发起网络请求造成资源浪费,对于那些不会经常变动的信息(如字典表),可以选择将其暂存在内存变量或是 Local Storage 内部一段间内重复利用。 ```javascript async function fetchDictionaryData() { try { const cachedData = localStorage.getItem('dictionary'); if (cachedData &amp;&amp; Date.now() - parseInt(localStorage.getItem('cacheTime'), 10) < CACHE_EXPIRATION_TIME) { return JSON.parse(cachedData); } const response = await api.get('/api/dictionary'); localStorage.setItem('dictionary', JSON.stringify(response.data)); localStorage.setItem('cacheTime', String(Date.now())); return response.data; } catch(error){ console.error("Failed to load dictionary data", error); } } ``` 这里展示了如何判断是否存在有效期内的有效副本,若有则直接返回之;反之才向服务器获取最新的版本并写回持久化层以便下次调用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值