写点什么

跨平台动漫应用 Ani - 多平台支持的开源项目

作者:qife
  • 2025-07-07
    福建
  • 本文字数:1740 字

    阅读完需:约 6 分钟

项目标题与描述

Ani 是一个跨平台的动漫应用项目,采用现代 Kotlin 和 Jetpack Compose 技术构建。项目支持多平台部署,包括:


  • Windows (x64)

  • macOS (x64 和 aarch64)

  • Android (多种架构)

  • iOS


项目采用 GNU AGPLv3 开源协议,代码托管在 GitHub 上。

功能特性

  • 多平台支持:一套代码可构建多个平台的应用程序

  • 本地化支持:内置多语言支持,包括简体中文、繁体中文等

  • 现代化 UI:基于 Jetpack Compose 构建的响应式用户界面

  • 拖拽排序功能:支持列表项的拖拽重新排序

  • 多媒体支持:集成 libvlc 进行视频播放

  • 多数据源:支持 Bangumi.tv 和 Ikaros 等动漫数据源

安装指南

系统要求

  • JDK 11 或更高版本

  • Android SDK (用于 Android 构建)

  • Xcode (用于 iOS 构建)

  • Kotlin Multiplatform 环境

安装步骤

  1. 克隆仓库:


   git clone https://github.com/open-ani/ani.git
复制代码


  1. 安装依赖项:


   # macOS   brew install cmake ninja llvm swig openssl      # Linux (Debian/Ubuntu)   apt install android-sdk unzip curl
复制代码


  1. 设置 Android SDK:


   export ANDROID_HOME=/usr/lib/android-sdk   export ANDROID_SDK_ROOT=$ANDROID_HOME
复制代码


  1. 构建项目:


   ./gradlew build
复制代码

使用说明

基础使用

项目使用 Kotlin Multiplatform 和 Compose 构建,主要代码位于 common 模块中。

拖拽排序示例

@Composablefun VerticalReorderList() {    val data = remember { mutableStateOf(List(100) { "Item $it" }) }    val state = rememberReorderableLazyListState(onMove = { from, to ->        data.value = data.value.toMutableList().apply {            add(to.index, removeAt(from.index))        }    })    LazyColumn(        state = state.listState,        modifier = Modifier        .reorderable(state)        .detectReorderAfterLongPress(state)    ) {        items(data.value, { it }) { item ->            ReorderableItem(state, key = item) { isDragging ->                val elevation = animateDpAsState(if (isDragging) 16.dp else 0.dp)                Column(                    modifier = Modifier                        .shadow(elevation.value)                        .background(MaterialTheme.colors.surface)                ) {                    Text(item)                }            }        }    }}
复制代码

本地化支持

项目支持多语言本地化,字符串资源位于:


app-lang/src/androidMain/res/values/strings.xmlapp-lang/src/androidMain/res/values-zh-rCN/strings.xmlapp-lang/src/androidMain/res/values-zh-rTW/strings.xml
复制代码


在代码中使用本地化字符串:


stringResource(Lang.xxx)  // Compose 中使用getString(Lang.xxx)      // 非 Compose 代码中使用
复制代码

核心代码

拖拽排序状态管理

/** * 记住并创建可重排序的懒列表状态 * @param onMove 当项目移动时的回调函数 */@Composablefun rememberReorderableLazyListState(    onMove: (from: ItemPosition, to: ItemPosition) -> Unit): ReorderableLazyListState {    val state = remember { ReorderableLazyListState() }    state.onMove = onMove    return state}
/** * 可重排序的列表项组件 * @param state 状态管理 * @param key 项目的唯一键 * @param content 内容组件,接收是否正在拖拽的状态 */@Composablefun ReorderableItem( state: ReorderableLazyListState, key: Any, content: @Composable (isDragging: Boolean) -> Unit) { // 实现细节...}
复制代码

macOS 清理脚本

#!/bin/zsh
# 清理临时文件find $TARGET_DIR -type f -name "*.kn*.tmp" -exec rm {} + -print 2>/dev/null | wc -l
# 清理 Xcode 相关文件sudo rm -rf /Applications/Xcode.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/sudo rm -rf /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.4.sdk
# 清理 Java 环境rm -rf "$JAVA_HOME_11_arm64" || truerm -rf "$JAVA_HOME_17_arm64" || true
复制代码


更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
跨平台动漫应用 Ani - 多平台支持的开源项目_kotlin_qife_InfoQ写作社区