LGPL库引入后导致app整体处于全面重适配状态,将会处于长期不可用状态

This commit is contained in:
2026-08-30 21:51:19 +08:00
parent e102e07378
commit 02ca590c65
6 changed files with 78 additions and 18 deletions
+22
View File
@@ -20,20 +20,42 @@ android {
versionCode = flutter.versionCode versionCode = flutter.versionCode
versionName = flutter.versionName versionName = flutter.versionName
// ⭐ 仅打包 arm64-v8a(与你的 jniLibs 目录匹配)
ndk { ndk {
abiFilters.addAll(listOf("arm64-v8a")) abiFilters.addAll(listOf("arm64-v8a"))
} }
} }
// ⭐ 显式指定 jniLibs 源目录(确保 .so 文件被包含)
sourceSets {
getByName("main") {
jniLibs.srcDirs("src/main/jniLibs")
}
}
// ⭐ 关键:打包配置,确保 .so 不被压缩,且处理重复
packagingOptions {
jniLibs {
useLegacyPackaging = true // 兼容 Android 7.0+
}
pickFirsts += "**/*.so" // 如有重复则选第一个
}
buildTypes { buildTypes {
debug { debug {
} }
release { release {
signingConfig = signingConfigs.getByName("debug") signingConfig = signingConfigs.getByName("debug")
// ⭐ 建议开启混淆时保留某些 native 方法(media_kit 会自动处理)
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
} }
} }
} }
kotlin { kotlin {
compilerOptions { compilerOptions {
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17 jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
+3 -2
View File
@@ -13,7 +13,8 @@
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="清听" android:label="清听"
android:usesCleartextTraffic="true" android:usesCleartextTraffic="true"
android:foregroundServiceType="mediaPlayback"> android:foregroundServiceType="mediaPlayback"
android:extractNativeLibs="true"> <!-- ⭐ 强制提取 .so,避免压缩后加载失败 -->
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
@@ -53,7 +54,7 @@
</intent-filter> </intent-filter>
</receiver> </receiver>
<!-- FileProvider for artwork --> <!-- FileProvider for artwork(已配置,保持不变) -->
<provider <provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.fileprovider" android:authorities="${applicationId}.fileprovider"
+33 -7
View File
@@ -28,6 +28,7 @@ void main() async {
debugPrint('⏱️ main 已初始化,跳过重复执行'); debugPrint('⏱️ main 已初始化,跳过重复执行');
return; return;
} }
_appInitialized = true; _appInitialized = true;
stopwatch.start(); stopwatch.start();
@@ -36,18 +37,36 @@ void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
debugPrint('⏱️ T0.5 ensureInitialized: ${stopwatch.elapsedMilliseconds}ms'); debugPrint('⏱️ T0.5 ensureInitialized: ${stopwatch.elapsedMilliseconds}ms');
debugPrint('⏱️ T0.55 before MediaKit.ensureInitialized');
try { try {
MediaKit.ensureInitialized(); MediaKit.ensureInitialized();
debugPrint('⏱️ T0.6 MediaKit 初始化完成'); debugPrint('⏱️ T0.6 MediaKit.ensureInitialized returned');
} catch (e) { } catch (e, st) {
debugPrint('❌ MediaKit 初始化失败: $e'); debugPrint('❌ MediaKit.ensureInitialized failed: $e');
debugPrint('$st');
rethrow;
} }
debugPrint('⏱️ T0.61 before AudioPlayerHandler');
try {
_audioHandler = AudioPlayerHandler(); _audioHandler = AudioPlayerHandler();
debugPrint('⏱️ T0.62 AudioPlayerHandler created');
} catch (e, st) {
debugPrint('❌ AudioPlayerHandler failed: $e');
debugPrint('$st');
rethrow;
}
debugPrint('⏱️ T0.63 before setOnSongChanged');
AudioService().setOnSongChanged((song) { AudioService().setOnSongChanged((song) {
debugPrint( debugPrint(
'📢 [main] song.artwork is ${song.artwork != null ? 'not null' : 'null'}'); '📢 [main] song.artwork is '
'${song.artwork != null ? 'not null' : 'null'}',
);
_audioHandler!.updateNotification( _audioHandler!.updateNotification(
id: song.id, id: song.id,
title: song.title, title: song.title,
@@ -56,6 +75,8 @@ void main() async {
); );
}); });
debugPrint('⏱️ T0.7 before runApp');
runApp( runApp(
MultiProvider( MultiProvider(
providers: [ providers: [
@@ -64,16 +85,21 @@ void main() async {
ChangeNotifierProvider<AppLifecycleManager>( ChangeNotifierProvider<AppLifecycleManager>(
create: (_) => lifecycleManager, create: (_) => lifecycleManager,
), ),
Provider<AudioPlayerHandler>(create: (_) => _audioHandler!), Provider<AudioPlayerHandler>(
create: (_) => _audioHandler!,
),
], ],
child: const QTPlayerApp(), child: const QTPlayerApp(),
), ),
); );
debugPrint('⏱️ T0.8 runApp 完成: ${stopwatch.elapsedMilliseconds}ms'); debugPrint(
'⏱️ T0.8 runApp 完成: '
'${stopwatch.elapsedMilliseconds}ms',
);
// ⭐ 首帧后恢复播放状态
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
debugPrint('⏱️ T1 postFrame');
AudioService().restorePlaybackState(); AudioService().restorePlaybackState();
}); });
} }
+18 -7
View File
@@ -2,20 +2,31 @@ import 'package:media_kit/media_kit.dart';
class PlayerService { class PlayerService {
static final PlayerService _instance = PlayerService._internal(); static final PlayerService _instance = PlayerService._internal();
factory PlayerService() => _instance; factory PlayerService() => _instance;
PlayerService._internal(); PlayerService._internal();
final Player _player = Player(); Player? _player;
void play(String url) { Player get player {
_player.open(Media(url)); return _player ??= Player();
} }
void pause() => _player.pause(); void play(String url) {
void resume() => _player.play(); player.open(Media(url));
void stop() => _player.stop(); }
void dispose() => _player.dispose(); void pause() => player.pause();
void resume() => player.play();
void stop() => player.stop();
void dispose() {
_player?.dispose();
_player = null;
}
// 状态监听... // 状态监听...
} }
+1 -1
View File
@@ -30,7 +30,7 @@ environment:
dependencies: dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
media_kit: ^1.1.10 media_kit: ^1.2.6
#media_kit_libs_audio: ^1.0.7 #media_kit_libs_audio: ^1.0.7
shared_preferences: 2.2.2 shared_preferences: 2.2.2
provider: ^6.1.2 provider: ^6.1.2