aosp15上winscope离线html如何使用?

背景:

aosp15上的如何使用Winscope前面已经有分享过相关的blog,这块其实和aosp14没啥大的差别,具体可以看如下2个文章:
手把手教你aosp14编译Winscope
安卓aosp15手机上如何离线获取winscope文件

文章中也说明在aosp15如果直接使用编译好的离线html是有问题的,无法正常显示抓取的Winscope文件。针对这样一个问题对于有些同学来说还是很不友好,因为很可能他们不想搭建node相关的环境,那么针对 aosp15上Winscope离线的html是否真的不可以使用呢?

这个问题的解决还得感谢我们有前端背景学员朋友“小周佩奇i”提供的相关方案,下面来分享一下aosp15上winscope离线html如何使用。

无法使用离线html原因

1、直接文件方式打开html
在这里插入图片描述
2、导入对应Winscope包发现画面没有反应,其实是报错了,具体报错情况如下:
在这里插入图片描述

'Worker': Script at 'file:///media/test/49a0eb6b-f410-4eed-9e0a-952e3c75d2b2/home/test/aosp15/development/tools/winscope/dist/prod/engine_bundle.js' cannot be accessed from origin 'null'.
    at initWasm (wasm_engine_proxy.ts:24:20)
    at parser_factory_ParserFactory.initializeTraceProcessor (parser_factory.ts:131:7)
    at parser_factory_ParserFactory.createParsers (parser_factory.ts:63:39)
    at TracePipeline.loadUnzippedArchive (trace_pipeline.ts:210:57)
    at async TracePipeline.loadFiles (trace_pipeline.ts:72:37)
    at async Mediator.loadFiles (mediator.ts:238:7)
    at async mediator.ts:123:43
    at async AppFilesUploaded.visit (winscope_event.ts:71:21)
    at async Mediator.onWinscopeEvent (mediator.ts:119:67)
    at async AppComponent.onFilesUploaded (app_component.ts:531:25)

报错大概原因(引用学员朋友写的):
就是sf layer 是bp的方式存储,js使用bp应该是要通过wasm来,可以理解为js通过一个标准接口来执行native代码,类似jni

不过我们可能不关心原因,因为这块毕竟属于前端的知识,我们更关心应该怎么解决

解决html直接导入Winscope文件报错

1、用npm安好http-server

npm install -g http-server

2、然后到cd到html目录执行http-server
例如我们到development/tools/winscope/dist/prod目录下执行http-server

test@test:~/aosp15/development/tools/winscope/dist/prod$ http-server 
Starting up http-server, serving ./

http-server version: 14.1.1

http-server settings: 
CORS: disabled
Cache: 3600 seconds
Connection Timeout: 120 seconds
Directory Listings: visible
AutoIndex: visible
Serve GZIP Files: false
Serve Brotli Files: false
Default File Extension: none

Available on:
  http://127.0.0.1:8080
  http://192.168.31.142:8080
Hit CTRL-C to stop the server

3、进入浏览器,访问http://127.0.0.1:8080地址既可以
在这里插入图片描述
这个时候再进行导入Winscope相关文件,或者在线抓取也可以,最后可以看到如下图所示的成功画面:

在这里插入图片描述
更多framework实战相关干货,请关注下面“千里马学框架”

### 定义和授予系统级权限的步骤 在 Android Open Source Project (AOSP) 中定义和授予系统级权限需要对框架层、应用配置文件以及构建脚本进行修改。以下详细描述了如何实现这一目标。 #### 1. 在 `frameworks/base/core/res/AndroidManifest.xml` 中声明权限 系统级权限必须在 Android 框架的全局清单中注册,以确保 PackageManager 能够识别并解析该权限。例如: ```xml <permission android:name="com.example.permission.MY_SYSTEM_PERMISSION" android:protectionLevel="signature|privileged" /> ``` 此权限使用 `signature|privileged` 保护级别,表示只有与系统签名一致的应用或位于 `/system/priv-app` 目录下的应用才能获得此权限[^1]。 #### 2. 在应用的 `AndroidManifest.xml` 文件中请求权限 要让特定应用程序获得上述权限,需在其 `AndroidManifest.xml` 文件中添加 `<uses-permission>` 声明: ```xml <manifest package="com.example.myapp"> <uses-permission android:name="com.example.permission.MY_SYSTEM_PERMISSION" /> </manifest> ``` #### 3. 将应用编译为系统特权应用 为了使应用具有访问系统级权限的能力,必须将其编译为系统特权应用。这可以通过在模块的 `Android.mk` 或 `Android.bp` 文件中设置 `LOCAL_PRIVILEGED_MODULE := true` 来实现: ```makefile LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := MyApp LOCAL_PRIVILEGED_MODULE := true LOCAL_CERTIFICATE := platform include $(BUILD_PACKAGE) ``` 此配置将应用放置在 `/system/priv-app/MyApp` 目录下,并使用平台签名密钥签署该应用,从而允许其获得系统权限[^1]。 #### 4. 配置 SELinux 策略(如适用) 如果启用了 SEAndroid,则还需更新 SELinux 策略,以允许应用访问受保护的系统资源。例如,在 `device/<manufacturer>/<device>/sepolicy` 目录下的 `.te` 文件中添加如下规则: ```te allow myapp_appdomain system_app:servicemanager find; ``` 此外,可参考 SEforAndroid 页面了解如何获取源码并配置安全策略[^1]。 #### 5. 构建并部署 AOSP 完成以上配置后,重新构建整个 AOSP 并刷入设备。此时,指定的应用应能够成功获得所请求的系统权限,并执行相应操作。 --- ### 示例代码片段 以下是一个完整的 `AndroidManifest.xml` 示例,展示如何声明系统级权限并请求其使用: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <uses-permission android:name="com.example.permission.MY_SYSTEM_PERMISSION" /> <application android:allowBackup="true" android:label="@string/app_name"> <activity android:name=".MainActivity" android:theme="@style/AppTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> ``` --- ### 注意事项 - **签名一致性**:确保应用使用的签名证书与 AOSP 构建环境中的 `build/target/product/security/platform` 密钥一致。 - **权限最小化原则**:避免过度申请权限,防止潜在的安全漏洞。 - **兼容性测试**:不同版本的 Android 对系统权限的处理方式可能不同,建议进行充分的兼容性验证。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值