Flutter程序化安装APK时出现解析错误的问题排查
Flutter APK安装报错:解析软件包时出现错误
- 开发一款可安装其他APK的Flutter应用,使用
flutter_app_installer或app_installer包执行安装时,手机弹出“解析软件包时出现错误”提示 - 该APK通过安卓文件管理器可正常安装,排除文件损坏的可能
- 应用已申请并获取
READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE以及REQUEST_INSTALL_PACKAGES权限,更换两个不同包测试仍出现相同错误 - 故意传入错误APK路径时无报错,证明路径正确;已在两台安卓设备测试,Flutter调试控制台无任何报错信息,仅手机端弹出解析错误提示
- 德语设备上的错误截图已附上,经搜索和咨询未获得有效解决方案,目前陷入瓶颈
Flutter代码
import 'dart:io'; import 'package:app_installer/app_installer.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:path/path.dart' as path; import 'package:flutter_app_installer/flutter_app_installer.dart'; import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // Request runtime permission await Permission.storage.request(); await Permission.requestInstallPackages.request(); runApp(const MainApp()); } class MainApp extends StatelessWidget { const MainApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: Center( child: TextButton( onPressed: () async { await AppInstaller.installApk( "storage/emulated/0/Download/test.apk", ); }, child: const Text('Install App'), ), ), ), ); } }
AndroidManifest.xml代码
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.apk_install_test"> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <application android:label="apk_install_test" android:name="${applicationName}" android:icon="@mipmap/ic_launcher"> <activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop" android:theme="@style/LaunchTheme" android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize"> <!-- Specifies an Android theme to apply to this Activity as soon as the Android process has started. This theme is visible to the user while the Flutter UI initializes. After that, this theme continues to determine the Window background behind the Flutter UI. --> <meta-data android:name="io.flutter.embedding.android.NormalTheme" android:resource="@style/NormalTheme" /> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- Provider --> <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileProvider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /> </provider> <!-- Don't delete the meta-data below. This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest>
内容的提问来源于stack exchange,提问作者ostue
相关产品推荐
相关产品推荐

