From 023393848bf02fe6ae14cdce1740670e38eefcb6 Mon Sep 17 00:00:00 2001 From: SOR <3272194354@qq.com> Date: Wed, 2 Sep 2026 11:37:27 +0800 Subject: [PATCH] git init --- .gitattributes | 7 ++ Extra/我做了一个KMP的FFmpeg库.md | 111 +++++++++++++++++++++++++++++++ Learning/基本的UI结构.md | 0 Learning/引入Kotin_Java.md | 57 ++++++++++++++++ Learning/引入Kotlin.md | 27 ++++++++ Learning/进入KMP.md | 8 +++ README.md | 7 ++ 7 files changed, 217 insertions(+) create mode 100644 .gitattributes create mode 100644 Extra/我做了一个KMP的FFmpeg库.md create mode 100644 Learning/基本的UI结构.md create mode 100644 Learning/引入Kotin_Java.md create mode 100644 Learning/引入Kotlin.md create mode 100644 Learning/进入KMP.md create mode 100644 README.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..490f828 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,7 @@ +assets/** filter=lfs diff=lfs merge=lfs -text + +*.png filter=lfs diff=lfs merge=lfs -text +*.ico filter=lfs diff=lfs merge=lfs -text +*.icns filter=lfs diff=lfs merge=lfs -text +*.webp filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text \ No newline at end of file diff --git a/Extra/我做了一个KMP的FFmpeg库.md b/Extra/我做了一个KMP的FFmpeg库.md new file mode 100644 index 0000000..3d082d6 --- /dev/null +++ b/Extra/我做了一个KMP的FFmpeg库.md @@ -0,0 +1,111 @@ +# 我做了一个 KMP 的 FFmpeg 库 + +目前支持: + +| | X86 | X64 | Arm32 | Arm64 | +| ------- | :---: | :---: | :---: | :---: | +| Android | | ✅ | ✅ | ✅ | +| IOS | | | | | +| Windows | | ✅ | | | +| Linux | | ✅ | | | +| MacOS | | | | ✅ | + +## 开源地址 + +https://github.com/SOR2171/FFmpeg-Kit_KMP + +## 经过 + +具体的流程还是很顺畅的,就是 Gralde 的设置卡了我好久。 + +### 各个平台的库文件 + +首先是把 akashskypatel 大佬做的 [FFmpegKit](https://github.com/akashskypatel/ffmpeg-kit-builders) 的库下载下来,这是已经做好包装的,使用起来非常方便。 + +唯一需要注意的一点是 MacOS 的库是没有扩展名的,因为没有也能用,可以自己命名为 `.dylib` + +### 把 Android aar 包一并打包进 assemble 输出 + +按照 Google 的设置,Gradle 打包 aar 时,是不会把所依赖的 aar 一起打包进去的,所里这里要先做一个 `FFmpegKitKmp/ffmpeg-aar-wrapper` 然后在同目录的 `build.gradle.kts` 里面写 + +```kotlin +configurations.maybeCreate("default") +artifacts.add("default", file("libs/bundle-base-shared-lgpl-release.aar")) +``` + +再在 `FFmpegKitKmp/settings.gradle.kts` 中加入一句 `include(":ffmpeg-aar-wrapper")`,再在 `FFmpegKitKmp/shared/settings.gradle.kts` 中的 Android 依赖中加入一句 `implementation(project(":ffmpeg-aar-wrapper"))`,就可以实现把 Android aar 包一并打包进 assemble 输出。 + +### assemble 输出库文件 + +执行 `:shared:assemble` 即可在所示位置拿到输出结果。 + +`FFmpegKitKmp/shared/build/outputs/aar/ffmpeg-kit-kmp.aar` +`FFmpegKitKmp/shared/build/libs/ffmpeg-kit-kmp-jvm-dev.jar` + +### 清理 Gradle 多余依赖 + +因为 Android Studio 的默认配置是给配齐所有的扩展的,但实际的库开发根本用不到那么多东西,需要删掉特别多东西,这里给一下最后留下来的东西。 + +`FFmpegKitKmp/shared/build.gradle.kts` + +```kotlin +plugins { + id("com.vanniktech.maven.publish") version "0.37.0" + alias(libs.plugins.kotlinMultiplatform) + alias(libs.plugins.androidMultiplatformLibrary) +} + +kotlin { + jvm() + + android { + namespace = "io.github.sor2171.ffmpegkitkmp" + compileSdk = libs.versions.android.compileSdk.get().toInt() + minSdk = libs.versions.android.minSdk.get().toInt() + + compilerOptions { + jvmTarget = JvmTarget.JVM_11 + } + androidResources { + enable = true + } + withDeviceTestBuilder { + sourceSetTreeName = "test" + }.configure { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + } + + sourceSets { + androidMain.dependencies { + // https://github.com/akashskypatel/ffmpeg-kit-builders + implementation(project(":ffmpeg-aar-wrapper")) + + //noinspection UseTomlInstead + implementation("net.java.dev.jna:jna:5.19.1@aar") + implementation(libs.androidx.espresso.core) + } + commonMain.dependencies { + } + commonTest.dependencies { + implementation(libs.kotlin.test) + } + jvmMain.dependencies { + implementation(libs.jna) + implementation(libs.slf4j.simple) + } + } +} +``` + +## 目前仍存在的问题 + +如果直接在gradle中添加我的依赖,那么,可能会出现这样的问题 + +```bash +C:\Users\32721\AppData\Local\Temp\ffmpegkit_2621802206663535111.dll: %1 不是有效的 Win32 应用程序。 + at java.base/jdk.internal.loader.NativeLibraries.load(Native Method) + ...... +``` + +目前,我还不知道如何解决,但可以确认的是,拿编译输出的 jar 包直接用作依赖不会出现这样的问题。 \ No newline at end of file diff --git a/Learning/基本的UI结构.md b/Learning/基本的UI结构.md new file mode 100644 index 0000000..e69de29 diff --git a/Learning/引入Kotin_Java.md b/Learning/引入Kotin_Java.md new file mode 100644 index 0000000..e0f884a --- /dev/null +++ b/Learning/引入Kotin_Java.md @@ -0,0 +1,57 @@ +# 引入 Kotlin + +预计时间 1h + +> 如果您会写 Java,那么事情将会**非常**简单。 + +## 基本语法 + +### 顶层函数 + +Kotlin 程序也从 main 函数开始,你可以直接这么写 + +```kotlin +fun main() { + println("Hello World!") +} +``` + +可以看到,它有很多 C++ 与 Python 的特点。 + +### 定义变量 + +这里不会列举所有写法,只写明最常用的写法。 + +#### 普通变量和类成员变量 + +```kotlin +val a: Int // 可以注意到,所有类都以大写开头 +val a = 0 // 支持先声明,再赋值 + +val b = "abc" // 直接赋值省略显式变量类型 + +var c = 3.0f // 可变变量 + +const val STR = "常值变量支持String,推荐大写下划线" +``` + +### 定义普通函数 + +在 Kotlin 里面,cpp 的 void $\Leftrightarrow$ Kotlin 的 Unit + +```kotlin +fun oneFuntion(): Unit { + // do something... +} +``` + +在函数定义明确的时候是不需要指明返回值的,除非是接口或用作 lambda 变量。 + + +### 定义类与接口 + +## 高级一点 + +### lambda变量与复杂函数 + +## 某些独到的 Kotlin 小特性 \ No newline at end of file diff --git a/Learning/引入Kotlin.md b/Learning/引入Kotlin.md new file mode 100644 index 0000000..b7ae128 --- /dev/null +++ b/Learning/引入Kotlin.md @@ -0,0 +1,27 @@ +# 引入 Kotlin + +预计时间 1d + +> 个人认为,Kotlin 是最好的 JVM 语言。 + +## 如果你会写 Java + +请看 [为会写 Java 的朋友们设计的引入](./引入Kotlin_Java.md) + +## 推荐 IDE + +这边推荐 Jetbrains 的 [`IntelliJ IDEA`](https://www.jetbrains.com/idea/download/) + +当然,各种类型的 VS Code,Neo Vim 也是很不错的,这边不提供具体教学。 + +## Hello World! + +先创建一个完全空的 Kotlin 项目/文件,在里面写: + +```kotlin +fun main() { + println("Hello World!") +} +``` + +编译运行。 \ No newline at end of file diff --git a/Learning/进入KMP.md b/Learning/进入KMP.md new file mode 100644 index 0000000..1b4a850 --- /dev/null +++ b/Learning/进入KMP.md @@ -0,0 +1,8 @@ +# 进入KMP + +> Kotlin Multiplatform 是基于 Jetpack Compose 框架的多平台应用编译技术,目前支持 Android,所有 JVM 平台,IOS,JS 网页(已被抛弃),WASM 网页。 + +## 选择一个 IDE + +这可能感觉上很怪,但是 **Android Stuidio 对KMP的支持确实是最好的**。 +如果你不想做 Android 的部分,用 IDEA 也影响不大,而且 IDEA 有官方中文,Android Stuidio 没有。 \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..eb9184a --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# 总体的说明 + +## 项目结构 + +KMP的项目结构一直在变化,但好在公用代码的目录一直是`commonMain`,如果没有特别的说明,那么我就是在说`shared/src/commonMain`的事。 + + \ No newline at end of file