Flutter安卓系统构建信息查询插件android_os_build的使用
Flutter 安卓系统构建信息查询插件 android_os_build
的使用
示例代码
import 'dart:convert';
import 'package:android_os_build/android_os_build.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// 这个小部件是你的应用的根。
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Android OS 构建信息',
theme: ThemeData.light(),
darkTheme: ThemeData.dark(),
home: const MyHomePage(title: 'Android OS 构建信息'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
// 这个小部件是你的应用的主页面。它是一个有状态的小部件,意味着
// 它有一个 State 对象(定义在下面)包含影响其外观的字段。
// 这个类是状态的配置。它保存了由父级(在这个例子中是 App 小部件)提供的值(在这个例子中是标题),
// 并且被 State.build 方法使用。Widget 子类中的字段总是标记为 "final"。
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
actions: [
IconButton(
onPressed: () async {
final result = JsonEncoder.withIndent(' ' * 4).convert(
buildMapping.map<String, String>((k, v) => MapEntry(k, v())));
await Clipboard.setData(ClipboardData(text: result));
if (!context.mounted) return;
ScaffoldMessenger.of(context).clearSnackBars();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: const Text('已复制!'),
action: SnackBarAction(label: '确定', onPressed: () {}),
),
);
},
icon: const Icon(Icons.copy_all_rounded),
),
],
),
body: ListTileTheme(
data: ListTileThemeData(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
side: BorderSide(
color: Theme.of(context).colorScheme.outlineVariant,
),
),
contentPadding: const EdgeInsets.only(left: 16),
),
child: ListView.separated(
padding: const EdgeInsets.all(16),
separatorBuilder: (context, index) => const SizedBox(height: 8),
itemBuilder: (context, index) {
final key = buildMapping.keys.elementAt(index);
final value = buildMapping[key]!();
return ListTile(
title: Text(key),
subtitle: Text(value),
trailing: IconButton(
onPressed: () async {
await Clipboard.setData(ClipboardData(text: value));
if (!context.mounted) return;
ScaffoldMessenger.of(context).clearSnackBars();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: const Text('已复制!'),
action: SnackBarAction(label: '确定', onPressed: () {}),
),
);
},
icon: const Icon(Icons.copy_rounded),
),
);
},
itemCount: buildMapping.length,
),
),
);
}
final buildMapping = <String, String Function()>{
'board': () => Build.board,
'bootloader': () => Build.bootloader,
'brand': () => Build.brand,
'device': () => Build.device,
'display': () => Build.display,
'fingerprint': () => Build.fingerprint,
'hardware': () => Build.hardware,
'host': () => Build.host,
'id': () => Build.id,
'manufacturer': () => Build.manufacturer,
'model': () => Build.model,
'odmSku': () => Build.odmSku,
'product': () => Build.product,
'sku': () => Build.sku,
'socManufacturer': () => Build.socManufacturer,
'socModel': () => Build.socModel,
'supported32BitAbis': () => Build.supported32BitAbis.join(','),
'supported64BitAbis': () => Build.supported64BitAbis.join(','),
'supportedAbis': () => Build.supportedAbis.join(','),
'tags': () => Build.tags,
'time': () => Build.time.toIso8601String(),
'type': () => Build.type,
'user': () => Build.user,
'getRadioVersion': () => Build.getRadioVersion(),
'getSerial': () => Build.getSerial(),
'getFingerprintedPartition': () =>
Build.getFingerprintedPartitions().map((e) => e.fingerprint).join(','),
'baseOs': () => Build.version.baseOs,
'codename': () => Build.version.codename,
'incremental': () => Build.version.incremental,
'mediaPerformanceClass': () => Build.version.mediaPerformanceClass.toString(),
'previewSdkInt': () => Build.version.previewSdkInt.toString(),
'release': () => Build.version.release,
'releaseOrCodename': () => Build.version.releaseOrCodename ?? '',
'releaseOrPreviewDisplay': () => Build.version.releaseOrPreviewDisplay ?? '',
'sdkInt': () => Build.version.sdkInt.toString(),
'securityPatch': () => Build.version.securityPatch,
};
}
重要说明
这个包目前是实验性的,可能会在未来以不破坏现有功能的方式进行更改。版本 0.X.X
仍在开发中,可能不适合生产环境使用。
示例安装
运行以下命令来安装示例应用:
cd example
flutter pub get
flutter build apk --target-platform android-arm64
flutter install --release
使用方法
添加包
-
在命令行中运行以下命令:
flutter pub add android_os_build
-
或者在
pubspec.yaml
文件中添加:... dependencies: android_os_build: any ...
获取构建信息
import 'package:android_os_build/android_os_build.dart';
final model = Build.model;
final sdkInt = Build.version.sdkInt;
注意:AndroidBuild.getSerial()
需要 android.permission.READ_PRIVILEGED_PHONE_STATE
权限。如果你想要获取序列号,你需要将此权限添加到你的 AndroidManifest.xml
文件中:
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
......
</manifest>
直接使用生成的 FFI 代码
import 'package:android_os_build/android_os_build_jni.dart';
String getBoard() {
final JString board = Build.BOARD;
/// 返回值并释放字符串对象
return board.toDartString(releaseOriginal: true);
}
开发
你应该先构建 APK 然后运行 jnigen
:
cd example
flutter build apk
cd ..
flutter pub run jnigen --config jnigen.yaml
更多关于Flutter安卓系统构建信息查询插件android_os_build的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安卓系统构建信息查询插件android_os_build的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
android_os_build
是一个 Flutter 插件,用于查询 Android 设备上的构建信息,如设备型号、制造商、系统版本、硬件信息等。这个插件可以帮助开发者在 Flutter 应用中获取 Android 设备的硬件和系统相关的详细信息。
以下是如何在 Flutter 项目中使用 android_os_build
插件的步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 android_os_build
插件的依赖:
dependencies:
flutter:
sdk: flutter
android_os_build: ^0.1.0 # 请使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 导入插件
在需要使用插件的 Dart 文件中导入 android_os_build
:
import 'package:android_os_build/android_os_build.dart';
3. 使用插件获取构建信息
你可以使用 AndroidOsBuild
类提供的方法来获取 Android 设备的构建信息。以下是一些常用的方法:
-
获取设备型号:
String model = await AndroidOsBuild.model; print('Device Model: $model');
-
获取设备制造商:
String manufacturer = await AndroidOsBuild.manufacturer; print('Manufacturer: $manufacturer');
-
获取系统版本:
String release = await AndroidOsBuild.release; print('Android Version: $release');
-
获取 SDK 版本:
int sdkInt = await AndroidOsBuild.sdkInt; print('SDK Version: $sdkInt');
-
获取设备硬件信息:
String hardware = await AndroidOsBuild.hardware; print('Hardware: $hardware');
4. 示例代码
以下是一个完整的示例,展示如何获取并打印 Android 设备的构建信息:
import 'package:flutter/material.dart';
import 'package:android_os_build/android_os_build.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Android OS Build Info'),
),
body: Center(
child: BuildInfoDisplay(),
),
),
);
}
}
class BuildInfoDisplay extends StatefulWidget {
[@override](/user/override)
_BuildInfoDisplayState createState() => _BuildInfoDisplayState();
}
class _BuildInfoDisplayState extends State<BuildInfoDisplay> {
String model = 'Unknown';
String manufacturer = 'Unknown';
String release = 'Unknown';
int sdkInt = 0;
String hardware = 'Unknown';
[@override](/user/override)
void initState() {
super.initState();
loadBuildInfo();
}
Future<void> loadBuildInfo() async {
String deviceModel = await AndroidOsBuild.model;
String deviceManufacturer = await AndroidOsBuild.manufacturer;
String androidVersion = await AndroidOsBuild.release;
int androidSdkVersion = await AndroidOsBuild.sdkInt;
String deviceHardware = await AndroidOsBuild.hardware;
setState(() {
model = deviceModel;
manufacturer = deviceManufacturer;
release = androidVersion;
sdkInt = androidSdkVersion;
hardware = deviceHardware;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Device Model: $model'),
Text('Manufacturer: $manufacturer'),
Text('Android Version: $release'),
Text('SDK Version: $sdkInt'),
Text('Hardware: $hardware'),
],
);
}
}