目标

上一篇Flutter应用已经能在iOS,macOS和,chrome环境下正常运行了,这次把Android跑通。

环境

macOS 15.4.1

Visual Studio Code 1.99.3

Flutter 3.29.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision ea121f8859 (11 days ago) • 2025-04-11 19:10:07 +0000
Engine • revision cf56914b32
Tools • Dart 3.7.2 • DevTools 2.42.3

JDK 17
Gradle 8.10.2

环境搭建

Flutter的Android的工具链

  • Android SDK Platform, API 35.0.2
  • Android SDK Command-line Tools – 包括 ProGuard 等基本工具
  • Android SDK Build-Tools – 包含构建 Android 应用的工具(可以下多个)
  • Android SDK Platform-Tools – 包含 Android 平台所需的各种工具,包括 adb 工具。
  • Android Emulator – 模拟器

阅读更多

环境

macOS 15.4.1

Xcode Version 16.3 (16E140)

Visual Studio Code 1.99.3

Flutter 3.29.3 • channel stable • https://github.com/flutter/flutter.git
Framework • revision ea121f8859 (11 days ago) • 2025-04-11 19:10:07 +0000
Engine • revision cf56914b32
Tools • Dart 3.7.2 • DevTools 2.42.3

iPhone iOS(13.4.1)

iPhone iOS(18.0.1)

网络配置

网络原因对镜像做的一些处理

1
2
$ export PUB_HOSTED_URL="https://pub.flutter-io.cn"
$ export FLUTTER_STORAGE_BASE_URL="https://storage.flutter-io.cn"

下载后SDK镜像,我是放到/usr/local,所以在终端执行下面的代码

阅读更多

环境

JDK 13
IDEA Build #IC-243.26053.27, built on March 16, 2025

Demo

MP3Parser

MP3

MP3全称为MPEG Audio Layer 3,它是一种高效的计算机音频编码方案,它以较大的压缩比将音频文件转换成较小的扩展名为.mp3的文件,基本保持源文件的音质,MP3是ISO/MPEG标准的一部分,

ISO/MPEG标准描述了使用高性能感知编码方案的音频压缩,此标准一直在不断更新以满足“质高量小”的追求,现已形成MPEG Layer1、Layer2、Layer3三种音频编解码方案,分别对应MP1、MP2、MP3 这三种声音文件

阅读更多

编译

环境

macOS Ventrua 13.4
ffmpeg 7.7.1
Visual Studio Code Version: 1.99.0 (Universal)

操作

FFmpeg 下载源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cd ffmpeg-x.y.z
$ ./configure
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.

If you think configure made a mistake, make sure you are using the latest
version from Git. If the latest version fails, report the problem to the
ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.libera.chat.
Include the log file "ffbuild/config.log" produced by configure as this will help
solve the problem.

# 听劝 + 考虑到后面需要调试
$ mkdir build
$ ./configure --prefix=./build --disable-x86asm --enable-debug --disable-stripping
$ make

阅读更多

声音

物体在一定的振动频率下产生了声音。声音可以被分解为不同频率不同强度正弦波的叠加。

声音三要素

声调

音调: 由发声体振动的频率决定,频率越高(振动越快)则音调越高,听起来就越“刺耳”,反之音调越低、听起来就越低沉。

声音的音调,即音频频率或每秒的变化次数

阅读更多

Transition

<Transition> 会在一个元素或组件进入和离开 DOM 时应用动画。本章节会介绍如何使用它。

内置组件可以在任意的组件中被使用,无需注册。它可以将进入和和离开动画应用到传递给它的元素或组件上

进入或离开的触发条件

  • 由 v-if 所触发的切换
  • 由 v-show 所触发的切换
  • 由特殊元素 切换的动态组件
  • 改变特殊的 key 属性
1
2
3
4
<button @click="show = !show">Toggle</button>
<Transition>
<p v-if="show">hello</p>
</Transition>

阅读更多

介绍

插件 (Plugins) 是一种能为 Vue 添加全局功能的工具代码

1
2
3
4
5
6
7
import { createApp } from 'vue'

const app = createApp({})

app.use(myPlugin, {
/* 可选的选项 */
})

一个插件可以是一个拥有 install() 方法的对象,也可以直接是一个安装函数本身。安装函数会接收到安装它的应用实例和传递给 app.use() 的额外选项作为参数:

对象的写法

1
2
3
4
5
const myPlugin = {
install(app, options) {
// 配置此应用
}
}

阅读更多

学完互动教程,已经有个基本印象,再看看文档,基础部分有涉及了,所以看深入组件那部分文档

注册

全局注册

可以使用 Vue 应用实例的 .component() 方法,让组件在当前 Vue 应用中全局可用

1
2
3
4
5
6
7
8
9
10
11
12
import { createApp } from 'vue'

const app = createApp({})

app.component(
// 注册的名字
'MyComponent',
// 组件的实现
{
/* ... */
}
)

如果使用单文件组件,你可以注册被导入的 .vue 文件:

1
2
3
import MyComponent from './App.vue'

app.component('MyComponent', MyComponent)

.component() 方法可以被链式调用:

全局注册的组件可以在此应用的任意组件的模板中使用

阅读更多

互动教程(Vue3)

列表渲染

条件语句后是循环操作,也是基本操作

可以使用 v-for 指令来渲染一个基于源数组的列表

1
2
3
4
5
<ul>
<li v-for="todo in todos" :key="todo.id">
{{ todo.text }}
</li>
</ul>

这里的 todo 是一个局部变量,表示当前正在迭代的数组元素。它只能在 v-for 所绑定的元素上或是其内部访问,就像函数的作用域一样。

注意,我们还给每个 todo 对象设置了唯一的 id,并且将它作为特殊的 key attribute 绑定到每个 <li>key 使得 Vue 能够精确地移动每个

  • ,以匹配对应的对象在数组中的位置。

  • 阅读更多

    为了快速熟悉Vue,学习下互动教程。

    早上出门有事情,没学完,学到哪算哪

    互动教程(Vue3)

    声明式渲染

    Vue 的核心功能是声明式渲染:通过扩展于标准 HTML 的模板语法,我们可以根据 JavaScript 的状态来描述 HTML 应该是什么样子的。当状态改变时,HTML 会自动更新。

    能在改变时触发更新的状态被认为是响应式的。在 Vue 中,响应式状态被保存在组件中。

    小结

    1. 使用 data 组件选项来声明响应式状态,该选项应该是一个返回对象的函数
    2. 使用双花括号”状态值“渲染文本(双大括号写法又名:mustache语法)
    3. 双花括号中的内容并不只限于标识符或路径——我们可以使用任何有效的 JavaScript 表达式

    阅读更多

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×