准备进入新的测试阶段,先做一个snapshot(此版本下不可用)
This commit is contained in:
@@ -7,6 +7,10 @@
|
||||
|
||||
# The following line activates a set of recommended lints for Flutter apps,
|
||||
# packages, and plugins designed to encourage good coding practices.
|
||||
analyzer:
|
||||
exclude:
|
||||
- build/**
|
||||
- android/**
|
||||
include: package:flutter_lints/flutter.yaml
|
||||
|
||||
linter:
|
||||
|
||||
@@ -20,25 +20,31 @@ android {
|
||||
versionCode = flutter.versionCode
|
||||
versionName = flutter.versionName
|
||||
|
||||
// ⭐ 仅打包 arm64-v8a(与你的 jniLibs 目录匹配)
|
||||
// 仅打包 arm64-v8a
|
||||
ndk {
|
||||
abiFilters.addAll(listOf("arm64-v8a"))
|
||||
}
|
||||
}
|
||||
|
||||
// ⭐ 显式指定 jniLibs 源目录(确保 .so 文件被包含)
|
||||
// 显式指定 jniLibs 源目录
|
||||
sourceSets {
|
||||
getByName("main") {
|
||||
jniLibs.srcDirs("src/main/jniLibs")
|
||||
}
|
||||
}
|
||||
|
||||
// ⭐ 关键:打包配置,确保 .so 不被压缩,且处理重复
|
||||
tasks.withType<Copy> {
|
||||
if (name.startsWith("merge") && name.endsWith("JniLibFolders")) {
|
||||
from("src/main/jniLibs")
|
||||
into("$buildDir/intermediates/merged_jni_libs/debug/out")
|
||||
}
|
||||
}
|
||||
// 打包配置
|
||||
packagingOptions {
|
||||
jniLibs {
|
||||
useLegacyPackaging = true // 兼容 Android 7.0+
|
||||
useLegacyPackaging = true
|
||||
}
|
||||
pickFirsts += "**/*.so" // 如有重复则选第一个
|
||||
pickFirsts += "**/*.so"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -47,7 +53,6 @@ android {
|
||||
|
||||
release {
|
||||
signingConfig = signingConfigs.getByName("debug")
|
||||
// ⭐ 建议开启混淆时保留某些 native 方法(media_kit 会自动处理)
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-rules.pro"
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -4,17 +4,41 @@ import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import androidx.core.content.FileProvider
|
||||
import com.ryanheise.audioservice.AudioServiceActivity
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
import java.io.File
|
||||
|
||||
class MainActivity : AudioServiceActivity() {
|
||||
class MainActivity : FlutterActivity() {
|
||||
|
||||
private val CHANNEL = "com.lxh.qingting_player/file_provider"
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
// ⭐ 强制加载 libmediakitandroidhelper.so,触发 JNI_OnLoad,缓存 JavaVM
|
||||
try {
|
||||
System.loadLibrary("mediakitandroidhelper")
|
||||
Log.d("MainActivity", "✅ libmediakitandroidhelper loaded")
|
||||
} catch (e: UnsatisfiedLinkError) {
|
||||
Log.e("MainActivity", "❌ libmediakitandroidhelper load failed", e)
|
||||
}
|
||||
|
||||
// ⭐ 可选:预加载 libmpv.so(让系统 linker 也可见,增强兼容性)
|
||||
try {
|
||||
System.loadLibrary("mpv")
|
||||
Log.d("MainActivity", "✅ libmpv loaded")
|
||||
} catch (e: UnsatisfiedLinkError) {
|
||||
Log.e("MainActivity", "❌ libmpv load failed", e)
|
||||
}
|
||||
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
setHighRefreshRate()
|
||||
}
|
||||
|
||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||
super.configureFlutterEngine(flutterEngine)
|
||||
|
||||
// FileProvider MethodChannel for sharing artwork via content:// URI
|
||||
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL)
|
||||
.setMethodCallHandler { call, result ->
|
||||
if (call.method == "getContentUri") {
|
||||
@@ -46,20 +70,6 @@ class MainActivity : AudioServiceActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
// 🔥 测试 libmpv.so 能否被系统加载
|
||||
try {
|
||||
System.loadLibrary("mpv")
|
||||
Log.e("MPV_TEST", "🔥 libmpv LOAD SUCCESS")
|
||||
} catch (e: Throwable) {
|
||||
Log.e("MPV_TEST", "🔥 libmpv LOAD FAILED", e)
|
||||
}
|
||||
|
||||
setHighRefreshRate()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
setHighRefreshRate()
|
||||
@@ -77,17 +87,4 @@ class MainActivity : AudioServiceActivity() {
|
||||
Log.e("QTPlayer", "设置高刷失败: ${e.message}")
|
||||
}
|
||||
}
|
||||
|
||||
private fun clearRefreshRate() {
|
||||
try {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
val params = window.attributes
|
||||
params.preferredRefreshRate = 0f
|
||||
window.attributes = params
|
||||
Log.d("QTPlayer", "恢复默认刷新率")
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e("QTPlayer", "恢复默认刷新率失败: ${e.message}")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ pluginManagement {
|
||||
plugins {
|
||||
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
||||
id("com.android.application") version "9.0.1" apply false
|
||||
id("org.jetbrains.kotlin.android") version "1.9.0" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.2.20" apply false
|
||||
}
|
||||
|
||||
include(":app")
|
||||
|
||||
@@ -46,7 +46,8 @@ class GlobalMiniPlayer extends StatelessWidget {
|
||||
child: InkWell(
|
||||
onTap: () {
|
||||
// ⭐ 使用 Navigator.of(context) 替代 navigatorKey
|
||||
Navigator.of(context).pushNamed('/player');
|
||||
Navigator.of(context, rootNavigator: true)
|
||||
.pushNamed('/player');
|
||||
},
|
||||
// ⭐ 替换弃用的 withOpacity 为 withValues
|
||||
highlightColor: Colors.white.withValues(alpha: 0.05),
|
||||
|
||||
+49
-9
@@ -332,10 +332,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: dc0b7dc7651697ea4ff3e69ef44b0407ea32c487a39fff6a4004fa585e901861
|
||||
sha256: "31bd099b47c10cd1aeb55146a2d46ce0277630ecef3f7dae54ad7873f36696cd"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "0.12.19"
|
||||
version: "0.12.20"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -353,21 +353,61 @@ packages:
|
||||
source: hosted
|
||||
version: "1.2.6"
|
||||
media_kit_libs_android_audio:
|
||||
dependency: "direct main"
|
||||
dependency: transitive
|
||||
description:
|
||||
name: media_kit_libs_android_audio
|
||||
sha256: "8f8f9759e537e12d66f08bc4d5279eb1bb21a0ccc519ff3442c68a9f3b6dd68b"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "1.3.8"
|
||||
media_kit_libs_audio:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: media_kit_libs_audio
|
||||
sha256: "81bf506c234e81e3ec536ba72f8f700a928543c14c345220210cae0411636316"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "1.0.7"
|
||||
media_kit_libs_ios_audio:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: media_kit_libs_ios_audio
|
||||
sha256: "78ccf04e27d6b4ba00a355578ccb39b772f00d48269a6ac3db076edf2d51934f"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "1.1.4"
|
||||
media_kit_libs_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: media_kit_libs_linux
|
||||
sha256: "2b473399a49ec94452c4d4ae51cfc0f6585074398d74216092bf3d54aac37ecf"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "1.2.1"
|
||||
media_kit_libs_macos_audio:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: media_kit_libs_macos_audio
|
||||
sha256: "3be21844df98f286de32808592835073cdef2c1a10078bac135da790badca950"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "1.1.4"
|
||||
media_kit_libs_windows_audio:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: media_kit_libs_windows_audio
|
||||
sha256: c2fd558cc87b9d89a801141fcdffe02e338a3b21a41a18fbd63d5b221a1b8e53
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "1.0.9"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: "1741988757a65eb6b36abe716829688cf01910bbf91c34354ff7ec1c3de2b349"
|
||||
sha256: "307249ce4ff29d58a18e97f6345f539382eb9c9c29ecda628900f31de0443dd9"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "1.18.0"
|
||||
version: "1.19.0"
|
||||
mime:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -729,10 +769,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: test_api
|
||||
sha256: "949a932224383300f01be9221c39180316445ecb8e7547f70a41a35bf421fb9e"
|
||||
sha256: "2a122cbe059f8b610d3a5415f42e255b6c17b1f21eee1d960f31080237fb4f11"
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "0.7.11"
|
||||
version: "0.7.12"
|
||||
typed_data:
|
||||
dependency: transitive
|
||||
description:
|
||||
@@ -769,10 +809,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vector_math
|
||||
sha256: d530bd74fea330e6e364cda7a85019c434070188383e1cd8d9777ee586914c5b
|
||||
sha256: f36f9f3be64c6198714492bb455c11056e33e2f85d9a0b676a48301e44fdcf47
|
||||
url: "https://pub.flutter-io.cn"
|
||||
source: hosted
|
||||
version: "2.2.0"
|
||||
version: "2.4.2"
|
||||
vm_service:
|
||||
dependency: transitive
|
||||
description:
|
||||
|
||||
+2
-1
@@ -31,7 +31,8 @@ dependencies:
|
||||
flutter:
|
||||
sdk: flutter
|
||||
media_kit: 1.2.6
|
||||
media_kit_libs_android_audio: 1.3.8
|
||||
media_kit_libs_audio: ^1.0.7
|
||||
#media_kit_libs_android_audio: 1.3.8
|
||||
shared_preferences: 2.2.2
|
||||
provider: ^6.1.2
|
||||
dio: ^5.4.0 # HTTP 客户端
|
||||
|
||||
Reference in New Issue
Block a user