怎么判断一个Android APP使用了flutter 这个跨端框架

要判断一个 Android 应用是否使用了 Flutter 跨端框架,可以通过以下方法逐步验证:


一、安装包结构分析
1. 解压 APK

.apk 文件重命名为 .zip 并解压,检查以下特征文件:

lib/ 目录:

Flutter 的核心引擎库文件位于 armeabi-v7aarm64-v8a 等子目录中,例如:

libflutter.so(Flutter 引擎核心库)

libapp.so(编译后的 Dart 代码)

libskia.so(Skia 图形渲染引擎)

assets/flutter_assets/ 目录:

Flutter 应用的资源文件,包括:

kernel_blob.bin(Dart 代码的二进制格式)

AssetManifest.json(资源清单文件)

FontManifest.json(字体清单文件)

• 图片、字体、配置文件等(如 MaterialIcons-Regular.ttf)。

res/raw/ 目录:

可能包含 Flutter 的 flutter_assets 资源包的符号链接。


二、代码特征验证
1. 反编译 Java 代码

使用工具(如 JADX)检查以下标识:

• 主 Activity 继承自 FlutterActivity

java 复制代码
public class MainActivity extends FlutterActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Flutter 引擎初始化
    }
}

• Flutter 核心包路径:

代码中引用 io.flutter 包下的类,例如:

java 复制代码
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.plugins.GeneratedPluginRegistrant;

2. 检查 Dart 代码特征

虽然 Dart 代码会被编译为机器码(libapp.so),但以下特征可辅助判断:

• 资源文件中的标识:

AssetManifest.json 包含 Flutter 特有资源路径,例如:

json 复制代码
{"assets/fonts/MaterialIcons-Regular.ttf": "d1a8a5d5e7e3b0c7"}

• Flutter 插件依赖:

若应用使用原生插件(如 camerashared_preferences),AndroidManifest.xml 中会声明相关权限和服务:

xml 复制代码
<uses-permission android:name="android.permission.CAMERA" />
<service android:name="io.flutter.plugins.camera.CameraService" />

三、运行时检测
1. Logcat 日志过滤

运行应用时,通过 adb logcat 过滤 Flutter 相关日志:

bash 复制代码
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 线程,通过以下命令查看:

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

四、与其他框架的区分

特征 Flutter React Native Cordova
核心库文件 libflutter.solibskia.so libreactnativejni.soindex.android.bundle cordova.jsassets/www/
资源目录 assets/flutter_assets/ assets/index.android.bundle assets/www/
UI 渲染方式 自绘引擎(Skia) 原生组件(通过 JS 桥接) WebView 渲染

五、快速验证脚本

通过命令行工具快速检测 APK 是否包含 Flutter 特征:

bash 复制代码
# 解压 APK 并检查关键文件
unzip -l your_app.apk | grep -E "libflutter.so|flutter_assets"
# 若输出包含 libflutter.so 或 flutter_assets 目录,则为 Flutter 应用

六、总结步骤

  1. 解压 APK:检查 lib/ 目录下的 libflutter.soassets/flutter_assets/
  2. 反编译代码:确认主 Activity 继承自 FlutterActivity 并包含 io.flutter 包路径。
  3. 运行时验证:通过日志和进程信息确认 Flutter 引擎初始化。

若满足上述 至少两项,即可确认应用基于 Flutter 开发。

相关推荐
安东尼肉店3 小时前
Android compose屏幕适配终极解决方案
android
2501_916007473 小时前
HTTPS 抓包乱码怎么办?原因剖析、排查步骤与实战工具对策(HTTPS 抓包乱码、gzipbrotli、TLS 解密、iOS 抓包)
android·ios·小程序·https·uni-app·iphone·webview
feiyangqingyun4 小时前
基于Qt和FFmpeg的安卓监控模拟器/手机摄像头模拟成onvif和28181设备
android·qt·ffmpeg
用户2018792831679 小时前
ANR之RenderThread不可中断睡眠state=D
android
煤球王子9 小时前
简单学:Android14中的Bluetooth—PBAP下载
android
小趴菜82279 小时前
安卓接入Max广告源
android
齊家治國平天下9 小时前
Android 14 系统 ANR (Application Not Responding) 深度分析与解决指南
android·anr
ZHANG13HAO9 小时前
Android 13.0 Framework 实现应用通知使用权默认开启的技术指南
android
【ql君】qlexcel9 小时前
Android 安卓RIL介绍
android·安卓·ril
写点啥呢9 小时前
android12解决非CarProperty接口深色模式设置后开机无法保持
android·车机·aosp·深色模式·座舱