【跨端框架檢測】使用adb logcat檢測Android APP使用的跨端框架方法總結

目錄

  • Weex 跨端框架
  • 使用了uni-app的情況
    • 區分使用了uni-app還是Weex
  • 判斷使用了Xamarin
  • 判斷使用了KMM框架
  • 判斷使用了 ??Ionic 框架
  • 判斷使用了Cordova框架
  • 判斷使用了Capacitor 框架
  • 使用了React Native框架
  • 使用了QT框架
  • 使用了Cocos框架
  • 使用了Electron 框架
  • 使用了flutter 框架
  • 使用了Taro框架
  • 使用了Tauri框架
  • 使用了MAUI框架

Weex 跨端框架

Logcat 日志過濾
運行應用時,通過 adb logcat 過濾 Weex 相關日志:

adb logcat | grep -iE "weex|WXSDK"
# 示例輸出:
# I/WXSDKEngine: WXSDKEngine initialized.
# D/WeexCore: Load JS Bundle from assets/weex/main.js

使用了uni-app的情況

??Logcat 日志過濾??
運行應用時,通過 adb logcat 過濾 uni-app 相關日志:

adb logcat | grep -iE "dcloud|uni-app"# 示例輸出:
# I/dcloud: [uni-app] JSBundle loaded.
# D/uni-app: App lifecycle: onLaunch

區分使用了uni-app還是Weex

要區分一個應用是基于 uni-app 還是 Weex 開發,可以通過以下 關鍵特征對比 進行判斷:


一、核心差異總結

特征uni-appWeex
跨端范圍全端(小程序、H5、App、快應用)原生 App(Android/iOS)為主
技術棧基于 Vue.js + 條件編譯類似 Vue.js,但語法更原生化
入口文件main.js + App.vue + pages.jsonmain.js + .we 文件(舊版)
全局對象uni(API 調用)weexWXEnvironment
UI 組件支持小程序組件 + 擴展組件(如 <uni-list>原生組件標簽(如 <div><text>
原生交互通過 uni.requireNativePlugin 調用原生插件通過 weex.requireModule 調用原生模塊
打包后目錄結構assets/apps/__UNI__[APPID]/wwwassets/weex/js/bundle.js
運行時容器基于 WebView(或小程序引擎)原生渲染引擎(無 WebView)

二、具體區分方法
1. 安裝包結構分析
? uni-app:

? 解壓 APK 后,存在以下目錄:

```bash
assets/apps/__UNI__ABCD1234/www/  # 應用核心資源
assets/uni-jsframework.js         # uni-app 運行時庫
```

? 原生庫文件可能包含 libapp.so(uni-app 渲染引擎)。

? Weex:

? 解壓 APK 后,存在以下目錄:

```bash
assets/weex/main.js                # Weex 的 JS Bundle
lib/armeabi-v7a/libweexcore.so     # Weex 原生渲染引擎
```

2. 代碼特征驗證
? uni-app:

? 條件編譯指令:

```javascript
// #ifdef APP-PLUS
console.log('運行在 App 平臺');
// #endif
```

? 全局 API 調用:

```javascript
uni.request({ url: '...' });      // uni-app 的 API 風格
```

? Weex:

? 原生模塊調用:

```javascript
const module = weex.requireModule('stream');
module.fetch({ url: '...' }, callback);
```

? UI 組件標簽:

```html
<div><text class="title">Hello Weex!</text>
</div>
```

3. 運行時檢測
? uni-app:

? WebView 調試:

在 Chrome 控制臺中檢查全局對象:  
```javascript
console.log(window.uni);          // 輸出 uni 對象
console.log(__dcloud_es6_polyfill__); // Polyfill 標識
```

? Weex:

? 全局環境變量:

```javascript
console.log(WXEnvironment.platform); // 輸出 'Android' 或 'iOS'
```

? 無 WebView:

Weex 的 UI 是原生渲染,DOM 元素不可見(無法通過 `document.getElementById` 訪問)。

4. 原生代碼分析
? uni-app:

? 主 Activity 繼承自 io.dcloud.PandoraEntry

```java
public class MainActivity extends io.dcloud.PandoraEntry { ... }
```

? Weex:

? 主 Activity 繼承自 WXActivity

```java
public class MainActivity extends com.taobao.weex.WXActivity { ... }
```

三、混淆場景處理
若應用經過代碼混淆或優化,可通過以下方式進一步驗證:

  1. JS Bundle 特征:
    ? uni-app 的 JS 代碼包含 createAppcreatePage 方法(基于 Vue 實例化)。

    ? Weex 的 JS 代碼包含 definebootstrap 方法(舊版)。

  2. 資源文件哈希值:
    ? uni-app 的 www 目錄下可能有 manifest.json,而 Weex 無此文件。

  3. 網絡請求特征:
    ? uni-app 動態加載的 JS Bundle 可能包含 uni-app 標識。

    ? Weex 可能請求 .we.js 文件(路徑包含 /weex/)。


四、總結判斷步驟

  1. 解壓 APK:檢查 assets/apps/__UNI__(uni-app)或 assets/weex/(Weex)。
  2. 查看代碼:搜索 uni.(uni-app)或 weex.(Weex)。
  3. 反編譯原生代碼:確認主 Activity 的父類(PandoraEntry vs WXActivity)。
  4. 運行時調試:檢查全局對象和環境變量。

通過以上方法,可快速區分應用基于 uni-app 還是 Weex。若仍有疑問,可結合具體業務邏輯和插件調用進一步分析。


判斷使用了Xamarin

?Logcat 日志過濾??
運行應用時,通過 adb logcat 過濾 ??Mono 運行時初始化日志??:

adb logcat | grep -iE "monodroid|MonoRuntime"
# 輸出示例:
# I/monodroid: JNI_OnLoad: mono.android.Runtime.init
# I/MonoRuntime: Initializing Mono runtime...

??進程內存分析??
Xamarin 應用會加載 ??Mono 運行時進程??,可通過以下命令查看:

adb shell ps | grep -i "mono"
# 輸出示例:
# com.myapp  12345  678  0% S  mono.android.app.Application

判斷使用了KMM框架

??Logcat 日志過濾??
運行應用時,通過 adb logcat 過濾 KMM 相關日志(如共享模塊的初始化或跨平臺調用):

adb logcat | grep -iE "KMM|shared|common"
# 示例輸出:
# D/KMM: Initializing shared module...
# I/SharedModule: Fetching data from common logic.

判斷使用了 ??Ionic 框架

Logcat 日志過濾??
運行應用時,通過 adb logcat 過濾 Ionic 相關日志:

adb logcat | grep -iE "Ionic|Cordova|Capacitor"
# 示例輸出:
# I/Ionic: Angular 初始化完成
# D/Capacitor: 插件 com.getcapacitor.camera 已加載

判斷使用了Cordova框架

Logcat 日志過濾??
運行應用時,通過 adb logcat 過濾 Cordova 相關日志:

adb logcat | grep -iE "Cordova|CordovaWebView"
# 示例輸出:
# D/CordovaWebView: CordovaWebView is running on device made by: samsung
# I/CordovaLog: deviceready has not fired after 5 seconds.

判斷使用了Capacitor 框架

Logcat 日志過濾??
運行應用時,通過 adb logcat 過濾 Capacitor 相關日志:

adb logcat | grep -iE "Capacitor|Bridge"
# 示例輸出:
# D/Capacitor: Initializing plugin: Camera
# I/Capacitor: App launched with URL: capacitor://localhost

使用了React Native框架

Logcat 日志過濾??
運行應用時,通過 adb logcat 過濾 React Native 相關日志:

adb logcat | grep -iE "ReactNativeJS|ReactNative"
# 示例輸出:
# I/ReactNativeJS: Running application "MyApp" with appParams
# D/ReactNative: ReactInstanceManager.createReactContext()

使用了QT框架

Logcat 日志過濾??
運行應用時,通過 adb logcat 過濾 Qt 相關日志:

adb logcat | grep -iE "QtCore|Qt GUI|QML"
# 示例輸出:
# D/QtCore: Initializing Qt...
# I/QML: Loading QML file: qml/Main.qml

使用了Cocos框架

Logcat 日志過濾??
運行應用時,通過 adb logcat 過濾 Cocos 相關日志:


adb logcat | grep -iE "Cocos2d|CocosPlay"
# 示例輸出:
# I/Cocos2dxActivity: Cocos2dxActivity initialized
# D/cocos2d-x: Director::setOpenGLView()

使用了Electron 框架

  • ??Logcat 日志過濾??:
    運行應用時,通過 adb logcat 過濾以下關鍵詞:
adb logcat | grep -iE "Electron|Chromium|Node.js"
# 若有輸出,可能為自定義集成(但極罕見)
  • ??進程與線程分析??:
    Electron 桌面應用會啟動 ??主進程 + 渲染進程??,而 Android 應用若模擬此行為,可能包含類似多進程模式:
adb shell ps | grep -i "node"
# 檢查是否存在 Node.js 進程

使用了flutter 框架

1. Logcat 日志過濾
運行應用時,通過 adb logcat 過濾 Flutter 相關日志:

adb logcat | grep -iE "flutter|dart|skia"
# 示例輸出:
# I/flutter: Observatory listening on http://127.0.0.1:12345/
# D/FlutterActivity: FlutterActivity initialized
# I/Skia: Skia graphics engine initialized

2. 進程與線程分析
Flutter 應用啟動后,進程內會創建 UI 線程、GPU 線程 和 I/O 線程,通過以下命令查看:

adb shell ps -T | grep -i "flutter"
# 輸出示例:
# 12345 12345 com.example.app ... io.flutter.embedding.android.FlutterActivity
# 12345 12346 Thread-2        ... Dart Worker


使用了Taro框架

Logcat 日志過濾
運行應用時,通過 adb logcat 過濾 Taro 或 React Native 日志:

adb logcat | grep -iE "Taro|ReactNative"
# 示例輸出:
# I/ReactNativeJS: Taro initialized
# D/TaroRuntime: Loading Taro components...

使用了Tauri框架

Logcat 日志過濾
運行應用時,通過 adb logcat 過濾 Rust 或 Tauri 相關日志:

adb logcat | grep -iE "tauri|rust"
# 示例輸出(假設存在):
# I/rust: Tauri initialized
# D/tauri_mobile: Invoking Rust method: show_message

使用了MAUI框架

? 運行應用時,通過adb logcat過濾MAUI相關日志:

    adb logcat | grep -i "Maui"# 示例輸出:# I/Maui: Initializing Microsoft.Maui.Graphics...```

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81194.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81194.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81194.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

以加減法計算器為例,了解C++命名作用域與函數調用

************* C topic: 命名作用域與函數調用 ************* The concept is fully introducted in the last artical. Please refer to 抽象&#xff1a;C命名作用域與函數調用-CSDN博客 And lets make a calculator to review the basic structure in c. 1、全局函數 A…

AIGC小程序項目

一、文生文功能 &#xff08;1&#xff09;前端部分 使用 Pinia 狀態管理庫創建的聊天機器人消息存儲模塊&#xff0c;它實現了文生文&#xff08;文本生成文本&#xff09;的核心邏輯。 1.Pinia狀態管理 這個模塊管理兩個主要狀態&#xff1a; messages&#xff1a;存儲所…

Axios中POST、PUT、PATCH用法區別

在 Axios 中&#xff0c;POST、PUT 和 PATCH 是用于發送 HTTP 請求的三種不同方法&#xff0c;它們的核心區別源自 HTTP 協議的設計語義。以下是它們的用法和區別&#xff1a; 1. POST 語義&#xff1a;用于創建新資源。 特點&#xff1a; 非冪等&#xff08;多次調用可能產生…

[爬蟲知識] Cookie與Session

相關實戰案例&#xff1a;[爬蟲實戰] 爬取小說標題與對應內容 相關爬蟲專欄&#xff1a;JS逆向爬蟲實戰 爬蟲知識點合集 爬蟲實戰案例 一、引入場景 在http協議中&#xff0c;瀏覽器是無狀態&#xff08;即無記憶&#xff09;的&#xff0c;對于請求與響應的產生數據&#…

怎樣改變中斷優先級?

在STM32中改變中斷優先級可以通過STM32CubeMX配置和代碼中設置兩種方式來實現。以下以STM32F1系列為例進行說明: 使用STM32CubeMX配置 打開工程:在STM32CubeMX中打開你的工程。進入NVIC配置:在Pinout & Configuration選項卡中,點擊NVIC進入中斷向量控制器配置界面。選…

科學計算中的深度學習模型精解:CNN、U-Net 和 Diffusion Models

關鍵要點 模型概述:卷積神經網絡(CNN)、U-Net 和 Diffusion Models 是深度學習中的核心模型,廣泛應用于科學計算任務,如偏微分方程(PDE)求解、圖像分割和數據生成。科學計算應用:CNN 可用于高效求解 PDEs,U-Net 擅長醫學圖像分割和材料分析,Diffusion Models 在生成合…

解決Docker無法拉取鏡像問題:Windows系統配置鏡像加速全指南

問題背景 在使用 Docker 時&#xff0c;你是否遇到過以下報錯&#xff1f; Unable to find image ‘mysql:latest’ locally docker: Error response from daemon: Get “https://registry-1.docker.io/v2/”: dial tcp 128.242.250.155:443: i/o timeout. 這類問題通常是由于…

Spring AI 使用教程

Spring AI 使用教程&#xff08;2025年5月24日更新&#xff09; 一、環境搭建與項目初始化 創建Spring Boot項目 使用IDEA或Spring Initializr創建項目&#xff0c;選擇JDK 17或更高版本&#xff08;推薦21&#xff09;。勾選依賴項&#xff1a;Spring Web、Lombok&#xff0c;…

iOS 直播特殊禮物特效實現方案(Swift實現,超詳細!)

特殊禮物特效是提升直播互動體驗的關鍵功能&#xff0c;下面我將詳細介紹如何在iOS應用中實現各種高級禮物特效。 基礎特效類型 1.1 全屏動畫特效 class FullScreenAnimationView: UIView {static func show(with gift: GiftModel, in view: UIView) {let effectView FullS…

分布式事務之Seata

概述 Seata有四種模式 AT模式&#xff1a;無侵入式的分布式事務解決方案&#xff0c;適合不希望對業務進行改造的場景&#xff0c;但由于需要添加全局事務鎖&#xff0c;對影響高并發系統的性能。該模式主要關注多DB訪問的數據一致性&#xff0c;也包括多服務下的多DB數據訪問…

信息收集與搜索引擎

6.1 常見的搜索引擎&#xff08;一、二&#xff09; 6.1.1 通用搜索引擎 Google/Bing&#xff1a; 用途&#xff1a;基礎信息收集&#xff08;域名、子域名、敏感文件&#xff09;。 高級語法&#xff1a; site:target.com&#xff1a;限定搜索目標域名。 filetype:pdf&am…

【Java項目測試報告】:在線聊天平臺(Online-Chat)

被測試項目已部署&#xff1a;登錄頁面http://123.249.78.82:8080/login.html 一、項目背景 1.1 測試目標 驗證系統功能完整性&#xff0c;確保用戶管理、消息傳輸、好友管理等核心模塊符合需求。 1.2 項目技術棧 后端&#xff1a;Spring Boot/Spring MVC/WebSocket 數據…

RAGFlow與Dify的深度刨析

目錄 一、RAGFlow 框架 二、Dify 框架 三、兩者集成 四、深度對比 1. 核心定位對比 2. 核心功能對比 3. 技術架構對比 4. 部署與成本 5. 適用場景推薦 總結 一、RAGFlow 框架 RAGFlow 是一個專注于深度文檔理解和檢索增強生成&#xff08;RAG&#xff09;技術的框架…

CQF預備知識:一、微積分 -- 1.2.2 函數f(x)的類型詳解

文中內容僅限技術學習與代碼實踐參考&#xff0c;市場存在不確定性&#xff0c;技術分析需謹慎驗證&#xff0c;不構成任何投資建議。 &#x1f4d6; 數學入門全解 本系列教程為CQF(國際量化金融分析師證書)認證所需的數學預備知識&#xff0c;涵蓋所有需要了解的數學基礎知識…

嵌入式工程師常用軟件

1、 Git Git 是公司常用的版本管理工具&#xff0c;人人都要會。在線的 git 教程可以參考菜鳥教程&#xff1a; https://www.runoob.com/git/git-tutorial.html 電子書教程請在搜索欄搜索&#xff1a; git Git 教程很多&#xff0c;常用的命令如下&#xff0c;這些命令可…

TReport組件指南總結

1. TReport 組件簡介 TReport 是一個用于生成和打印報表的組件,通常用于連接數據集(如 TDataSet)并設計復雜的報表布局。它支持動態數據綁定、多頁報表、分組統計、圖表插入等功能。 2. 安裝與配置 安裝:如果使用的是第三方報表工具(如 Rave Reports),需在 Delphi 中通…

spark任務的提交流程

目錄 spark任務的提交流程1. 資源申請與初始化2. 任務劃分與調度3. 任務執行4. 資源釋放與結果處理附:關鍵組件協作示意圖擴展說明SparkContext介紹 spark任務的提交流程 用戶創建一個 Spark Context;Spark Context 去找 Cluster Manager 申請資源同時說明需要多少 CPU 和內…

【C++】C++異步編程四劍客:future、async、promise和packaged_task詳解

C異步編程四劍客&#xff1a;future、async、promise和packaged_task詳解 1. 引言 1.1 異步編程的重要性 在現代C編程中&#xff0c;異步操作是提高程序性能和響應能力的關鍵技術。它允許程序在等待耗時操作&#xff08;如I/O、網絡請求或復雜計算&#xff09;完成時繼續執行…

2021-10-28 C++判斷完全平方數

緣由判斷一個整數是否為完全平方數-編程語言-CSDN問答 整數用平方法小數用5分法逼近。 int 判斷平方數(int n) {//緣由https://ask.csdn.net/questions/7546950?spm1005.2025.3001.5141int a 1;while (a < n / a)if (a*a < n)a;else if (a*a n)return 1;elsereturn 0…

解決weman框架redis報錯:Class “llluminatelRedis\RedisManager“ not found

解決weman框架redis報錯&#xff1a;Class "llluminatelRedis\RedisManager" not found 報錯解決方案 報錯 解決方案 按照手冊執行 composer require psr/container ^1.1.1 illuminate/redis illuminate/events 安裝redis組件 然后restart重啟就行了 php webman s…