Commit b44029ca authored by dsq's avatar dsq

172

parent 3bb6faef
...@@ -17,17 +17,18 @@ MaxHap/ ...@@ -17,17 +17,18 @@ MaxHap/
项目提供了几个实用的脚本工具来帮助开发和测试: 项目提供了几个实用的脚本工具来帮助开发和测试:
### 1. 单文件批量生成Composable函数脚本 ### 1. 多库嵌套页面生成脚本
#### generate_hap_test_files.sh #### generate_hap_test_files.sh
在单个文件中生成1000个@Composable函数 生成5个独立库,每个库包含200个嵌套页面文件
**功能特性:** **功能特性:**
- 生成1个大型.kt文件(BatchComposables.kt) - 生成5个独立的Kotlin Multiplatform库
- 包含1000个独立的@Composable函数 - 每个库包含200个.kt文件(NestedPage1.kt 到 NestedPage200.kt)
- 每个函数都有独特的彩色文本内容 - 实现跨库递归嵌套结构
- 函数命名规范:BatchComposable1, BatchComposable2, ..., BatchComposable1000 - 库间调用:第200层调用下一库的第201层
- 文件大小约4.2MB,包含约138,000行代码 - 每个页面都有独特的彩色标题和内容
- 自动生成build.gradle.kts配置文件
**使用方法:** **使用方法:**
```bash ```bash
......
...@@ -115,6 +115,12 @@ kotlin { ...@@ -115,6 +115,12 @@ kotlin {
implementation(compose.ui) // 添加compose ui依赖 implementation(compose.ui) // 添加compose ui依赖
implementation(compose.components.resources) // 添加compose组件资源依赖 implementation(compose.components.resources) // 添加compose组件资源依赖
implementation(compose.components.uiToolingPreview) // 添加compose ui工具预览依赖 implementation(compose.components.uiToolingPreview) // 添加compose ui工具预览依赖
// 嵌套页面库依赖
implementation(project(":nestedlib1"))
implementation(project(":nestedlib2"))
implementation(project(":nestedlib3"))
implementation(project(":nestedlib4"))
implementation(project(":nestedlib5"))
implementation(libs.kotlinx.coroutines.core) // 官方协程核心库 implementation(libs.kotlinx.coroutines.core) // 官方协程核心库
implementation(libs.atomicFu) // Kotlin AtomicFu原子库 implementation(libs.atomicFu) // Kotlin AtomicFu原子库
} }
......
#!/bin/bash
# 配置参数
BASE_DIR="/Users/dongsq/TestDemo/IR013/TestProject/MaxHap"
TOTAL_LIBS=5
FILES_PER_LIB=200
LIB_NAMES=("nestedlib1" "nestedlib2" "nestedlib3" "nestedlib4" "nestedlib5")
echo "开始生成最终的HAP测试文件..."
# 删除旧的库目录
for lib_name in "${LIB_NAMES[@]}"; do
if [ -d "$BASE_DIR/$lib_name" ]; then
rm -rf "$BASE_DIR/$lib_name"
echo "删除旧库: $lib_name"
fi
done
# 为每个库生成文件
for lib_index in "${!LIB_NAMES[@]}"; do
lib_name="${LIB_NAMES[$lib_index]}"
LIB_DIR="$BASE_DIR/$lib_name"
# 创建目录结构
mkdir -p "$LIB_DIR/src/commonMain/kotlin/com/dong/maxhap/$lib_name"
echo "创建库目录: $LIB_DIR"
# 生成200个文件
echo "生成库 $lib_name 的文件..."
for i in $(seq 1 $FILES_PER_LIB); do
FILE_INDEX=$((lib_index * FILES_PER_LIB + i))
FILENAME="NestedPage${FILE_INDEX}.kt"
FILEPATH="$LIB_DIR/src/commonMain/kotlin/com/dong/maxhap/$lib_name/$FILENAME"
FUNCTION_NAME="NestedPage${FILE_INDEX}"
NEXT_PAGE_VAR="showNextPage${FILE_INDEX}"
# 决定函数可见性:跨库调用的函数设为public
if [ $FILE_INDEX -eq 201 ] || [ $FILE_INDEX -eq 401 ] || [ $FILE_INDEX -eq 601 ] || [ $FILE_INDEX -eq 801 ]; then
VISIBILITY="fun"
else
VISIBILITY="internal fun"
fi
# 生成文件头部
echo "package com.dong.maxhap.$lib_name" > "$FILEPATH"
echo "" >> "$FILEPATH"
echo "import androidx.compose.foundation.layout.*" >> "$FILEPATH"
echo "import androidx.compose.material.*" >> "$FILEPATH"
echo "import androidx.compose.runtime.*" >> "$FILEPATH"
echo "import androidx.compose.ui.Alignment" >> "$FILEPATH"
echo "import androidx.compose.ui.Modifier" >> "$FILEPATH"
echo "import androidx.compose.ui.graphics.Color" >> "$FILEPATH"
echo "import androidx.compose.ui.text.font.FontWeight" >> "$FILEPATH"
echo "import androidx.compose.ui.unit.dp" >> "$FILEPATH"
echo "import androidx.compose.ui.unit.sp" >> "$FILEPATH"
echo "" >> "$FILEPATH"
echo "@Composable" >> "$FILEPATH"
echo "$VISIBILITY $FUNCTION_NAME() {" >> "$FILEPATH"
echo " var $NEXT_PAGE_VAR by remember { mutableStateOf(false) }" >> "$FILEPATH"
echo "" >> "$FILEPATH"
# 添加跨库调用逻辑
if [ $FILE_INDEX -eq 200 ]; then
echo " if ($NEXT_PAGE_VAR) {" >> "$FILEPATH"
echo " com.dong.maxhap.nestedlib2.NestedPage201()" >> "$FILEPATH"
echo " return" >> "$FILEPATH"
echo " }" >> "$FILEPATH"
echo "" >> "$FILEPATH"
elif [ $FILE_INDEX -eq 400 ]; then
echo " if ($NEXT_PAGE_VAR) {" >> "$FILEPATH"
echo " com.dong.maxhap.nestedlib3.NestedPage401()" >> "$FILEPATH"
echo " return" >> "$FILEPATH"
echo " }" >> "$FILEPATH"
echo "" >> "$FILEPATH"
elif [ $FILE_INDEX -eq 600 ]; then
echo " if ($NEXT_PAGE_VAR) {" >> "$FILEPATH"
echo " com.dong.maxhap.nestedlib4.NestedPage601()" >> "$FILEPATH"
echo " return" >> "$FILEPATH"
echo " }" >> "$FILEPATH"
echo "" >> "$FILEPATH"
elif [ $FILE_INDEX -eq 800 ]; then
echo " if ($NEXT_PAGE_VAR) {" >> "$FILEPATH"
echo " com.dong.maxhap.nestedlib5.NestedPage801()" >> "$FILEPATH"
echo " return" >> "$FILEPATH"
echo " }" >> "$FILEPATH"
echo "" >> "$FILEPATH"
elif [ $FILE_INDEX -lt $((TOTAL_LIBS * FILES_PER_LIB)) ]; then
echo " if ($NEXT_PAGE_VAR) {" >> "$FILEPATH"
echo " NestedPage$((FILE_INDEX + 1))()" >> "$FILEPATH"
echo " return" >> "$FILEPATH"
echo " }" >> "$FILEPATH"
echo "" >> "$FILEPATH"
fi
# 生成UI内容
echo " Column(" >> "$FILEPATH"
echo " modifier = Modifier" >> "$FILEPATH"
echo " .fillMaxSize()" >> "$FILEPATH"
echo " .padding(16.dp)," >> "$FILEPATH"
echo " horizontalAlignment = Alignment.CenterHorizontally," >> "$FILEPATH"
echo " verticalArrangement = Arrangement.Center" >> "$FILEPATH"
echo " ) {" >> "$FILEPATH"
echo " Text(" >> "$FILEPATH"
echo " text = \"${FILE_INDEX}层页面 ($lib_name)\"," >> "$FILEPATH"
echo " fontSize = 24.sp," >> "$FILEPATH"
echo " fontWeight = FontWeight.Bold," >> "$FILEPATH"
echo " color = Color(0xFF$((lib_index * 50))0000)," >> "$FILEPATH"
echo " modifier = Modifier.padding(bottom = 20.dp)" >> "$FILEPATH"
echo " )" >> "$FILEPATH"
# 生成文本内容
for j in $(seq 1 10); do
LINE_NUM=$(( (FILE_INDEX - 1) * 10 + j ))
RED=$(( (LINE_NUM * 17) % 256 ))
GREEN=$(( (LINE_NUM * 31) % 256 ))
BLUE=$(( (LINE_NUM * 47) % 256 ))
echo " Text(" >> "$FILEPATH"
echo " text = \"这是第${LINE_NUM}行内容\"," >> "$FILEPATH"
echo " fontSize = 14.sp," >> "$FILEPATH"
echo " color = Color($RED, $GREEN, $BLUE)," >> "$FILEPATH"
echo " modifier = Modifier.padding(vertical = 3.dp)" >> "$FILEPATH"
echo " )" >> "$FILEPATH"
done
# 添加导航按钮
if [ $FILE_INDEX -lt $((TOTAL_LIBS * FILES_PER_LIB)) ]; then
echo "" >> "$FILEPATH"
echo " Spacer(modifier = Modifier.height(25.dp))" >> "$FILEPATH"
echo "" >> "$FILEPATH"
echo " Button(" >> "$FILEPATH"
echo " onClick = { $NEXT_PAGE_VAR = true }," >> "$FILEPATH"
echo " modifier = Modifier" >> "$FILEPATH"
echo " .fillMaxWidth()" >> "$FILEPATH"
echo " .height(45.dp)," >> "$FILEPATH"
echo " colors = ButtonDefaults.buttonColors(" >> "$FILEPATH"
echo " backgroundColor = Color(0xFF2196F3)" >> "$FILEPATH"
echo " )" >> "$FILEPATH"
echo " ) {" >> "$FILEPATH"
if [ $i -lt $FILES_PER_LIB ]; then
echo " Text(" >> "$FILEPATH"
echo " text = \"进入同库第$((FILE_INDEX + 1))\"," >> "$FILEPATH"
echo " fontSize = 16.sp," >> "$FILEPATH"
echo " fontWeight = FontWeight.Medium," >> "$FILEPATH"
echo " color = Color.White" >> "$FILEPATH"
echo " )" >> "$FILEPATH"
else
if [ $lib_index -lt $((TOTAL_LIBS - 1)) ]; then
next_lib_display="${LIB_NAMES[$((lib_index + 1))]}"
echo " Text(" >> "$FILEPATH"
echo " text = \"进入${next_lib_display}$((FILE_INDEX + 1))\"," >> "$FILEPATH"
echo " fontSize = 16.sp," >> "$FILEPATH"
echo " fontWeight = FontWeight.Medium," >> "$FILEPATH"
echo " color = Color.White" >> "$FILEPATH"
echo " )" >> "$FILEPATH"
else
echo " Text(" >> "$FILEPATH"
echo " text = \"已到达最深层\"," >> "$FILEPATH"
echo " fontSize = 16.sp," >> "$FILEPATH"
echo " fontWeight = FontWeight.Medium," >> "$FILEPATH"
echo " color = Color.White" >> "$FILEPATH"
echo " )" >> "$FILEPATH"
fi
fi
echo " }" >> "$FILEPATH"
fi
echo " }" >> "$FILEPATH"
echo "}" >> "$FILEPATH"
# 显示进度
if [ $((i % 50)) -eq 0 ]; then
echo " 已生成库 $lib_name$i 个文件"
fi
done
done
# 为每个库创建build.gradle.kts文件(参考composeApp配置)
for lib_index in "${!LIB_NAMES[@]}"; do
lib_name="${LIB_NAMES[$lib_index]}"
LIB_DIR="$BASE_DIR/$lib_name"
cat > "$LIB_DIR/build.gradle.kts" << EOF
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
plugins {
kotlin("multiplatform")
id("com.android.library")
id("org.jetbrains.compose")
id("org.jetbrains.kotlin.plugin.compose")
}
android {
namespace = "com.dong.maxhap.$lib_name"
compileSdk = 34
defaultConfig {
minSdk = 24
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
}
kotlin {
androidTarget {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
}
}
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach { iosTarget ->
iosTarget.binaries.framework {
baseName = "${lib_name^}"
isStatic = true
}
}
ohosArm64 {
binaries.sharedLib {
baseName = "$lib_name"
}
compilations.named("main") {
compilerOptions.configure {
freeCompilerArgs.addAll(
listOf(
"-Xinclude-library=org.jetbrains.kotlin.native.platform.kba_devices",
"-Xdisable-default-klib-resolution"
)
)
}
}
}
sourceSets {
androidMain.dependencies {
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.collection)
implementation(libs.androidx.lifecycle.viewmodelCompose)
implementation(libs.androidx.lifecycle.runtimeCompose)
}
commonMain.dependencies {
implementation(compose.runtime)
implementation(compose.foundation)
implementation(compose.material)
implementation(compose.ui)
implementation(compose.components.resources)
implementation(compose.components.uiToolingPreview)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.atomicFu)
EOF
# 添加跨库依赖
if [ $lib_index -lt $((TOTAL_LIBS - 1)) ]; then
next_lib="${LIB_NAMES[$((lib_index + 1))]}"
echo " // 跨库依赖" >> "$LIB_DIR/build.gradle.kts"
echo " implementation(project(\":$next_lib\"))" >> "$LIB_DIR/build.gradle.kts"
fi
cat >> "$LIB_DIR/build.gradle.kts" << EOF
}
val ohosArm64Main by getting {
dependencies {
api(libs.compose.multiplatform.export)
}
}
}
}
val versionCatalog = extensions.getByType<VersionCatalogsExtension>().named("libs")
val cmpVersion = versionCatalog.findVersion("composeMultiplatform")
.orElseThrow { IllegalStateException("Missing version composeMultiplatform in version catalog") }
.requiredVersion
val skikoOverrideByCmpVersion = mapOf(
"1.9.2-ez-001" to "0.9.22.2-ez-001",
)
val skikoOhosOverride = skikoOverrideByCmpVersion[cmpVersion]
configurations.all {
val configName = name
if (configName.contains("ohos", ignoreCase = true)) {
incoming.afterResolve {
val resolvedSkiko = resolutionResult.allComponents
.mapNotNull { it.moduleVersion }
.firstOrNull { it.group == "org.jetbrains.skiko" && it.name == "skiko" }
logger.lifecycle(
"Resolved skiko for \$configName: " +
(resolvedSkiko?.let { "\${it.group}:\${it.name}:\${it.version}" } ?: "not found")
)
}
}
resolutionStrategy {
eachDependency {
if (requested.group == "org.jetbrains.skiko" && requested.name == "skiko") {
if (configName.contains("ohos", ignoreCase = true)) {
skikoOhosOverride?.let { useVersion(it) }
}
}
if (requested.group == "androidx.collection" && requested.name == "collection") {
useVersion(libs.versions.androidx.collection.get())
}
}
}
exclude(group = "androidx.collection", module = "collection-jvm")
}
EOF
echo "创建 $lib_name 的 build.gradle.kts"
done
# 更新settings.gradle.kts
SETTINGS_FILE="$BASE_DIR/settings.gradle.kts"
echo "" >> "$SETTINGS_FILE"
echo "// 嵌套页面库模块" >> "$SETTINGS_FILE"
for lib_name in "${LIB_NAMES[@]}"; do
echo "include(\"$lib_name\")" >> "$SETTINGS_FILE"
done
echo ""
echo "成功生成5个嵌套页面库:"
echo "每个库包含200个文件,总共1000个嵌套页面"
echo "库列表: ${LIB_NAMES[*]}"
echo "请在composeApp的build.gradle.kts中添加依赖:"
echo ""
for lib_name in "${LIB_NAMES[@]}"; do
echo "implementation(project(\":$lib_name\"))"
done
\ No newline at end of file
#!/bin/bash #!/bin/bash
# 设置目标目录 # 设置基础目录
TARGET_DIR="composeApp/src/commonMain/kotlin/com/dong/maxhap/demos/test" BASE_DIR="."
# 创建目录 # 创建5个库目录
mkdir -p "$TARGET_DIR" LIB_NAMES=("nestedlib1" "nestedlib2" "nestedlib3" "nestedlib4" "nestedlib5")
# 设置总文件数量 # 为每个库创建目录结构
TOTAL_FILES=200 for lib_name in "${LIB_NAMES[@]}"; do
LIB_DIR="$BASE_DIR/$lib_name"
SRC_DIR="$LIB_DIR/src/commonMain/kotlin/com/dong/maxhap/$lib_name"
# 从最后一个文件开始生成,实现嵌套结构 # 创建目录结构
for i in $(seq $TOTAL_FILES -1 1); do mkdir -p "$SRC_DIR"
FILENAME="NestedPage${i}.kt"
FILEPATH="$TARGET_DIR/$FILENAME" echo "创建库目录: $LIB_DIR"
done
# 生成每个库的200个文件
FILES_PER_LIB=200
TOTAL_LIBS=5
for lib_index in $(seq 0 $((TOTAL_LIBS - 1))); do
lib_name="${LIB_NAMES[$lib_index]}"
LIB_DIR="$BASE_DIR/$lib_name"
SRC_DIR="$LIB_DIR/src/commonMain/kotlin/com/dong/maxhap/$lib_name"
echo "生成库 $lib_name 的文件..."
# 生成200个嵌套页面文件
for i in $(seq 1 $FILES_PER_LIB); do
# 计算全局文件编号
global_index=$((lib_index * FILES_PER_LIB + i))
FILENAME="NestedPage${global_index}.kt"
FILEPATH="$SRC_DIR/$FILENAME"
# 生成函数名 # 生成函数名
FUNCTION_NAME="NestedPage${i}" FUNCTION_NAME="NestedPage${global_index}"
# 开始写入文件 # 开始写入文件
echo "package com.dong.maxhap.demos.test" > "$FILEPATH" echo "package com.dong.maxhap.$lib_name" > "$FILEPATH"
echo "" >> "$FILEPATH" echo "" >> "$FILEPATH"
echo "import androidx.compose.foundation.layout.*" >> "$FILEPATH" echo "import androidx.compose.foundation.layout.*" >> "$FILEPATH"
echo "import androidx.compose.material.*" >> "$FILEPATH" echo "import androidx.compose.material.*" >> "$FILEPATH"
...@@ -35,12 +57,21 @@ for i in $(seq $TOTAL_FILES -1 1); do ...@@ -35,12 +57,21 @@ for i in $(seq $TOTAL_FILES -1 1); do
echo "internal fun $FUNCTION_NAME() {" >> "$FILEPATH" echo "internal fun $FUNCTION_NAME() {" >> "$FILEPATH"
# 添加状态管理(除了最后一个页面) # 添加状态管理(除了最后一个页面)
if [ $i -lt $TOTAL_FILES ]; then if [ $global_index -lt $((TOTAL_LIBS * FILES_PER_LIB)) ]; then
NEXT_PAGE_VAR="showNextPage" NEXT_PAGE_VAR="showNextPage"
echo " var $NEXT_PAGE_VAR by remember { mutableStateOf(false) }" >> "$FILEPATH" echo " var $NEXT_PAGE_VAR by remember { mutableStateOf(false) }" >> "$FILEPATH"
echo "" >> "$FILEPATH" echo "" >> "$FILEPATH"
echo " if ($NEXT_PAGE_VAR) {" >> "$FILEPATH" echo " if ($NEXT_PAGE_VAR) {" >> "$FILEPATH"
echo " NestedPage$((i+1))()" >> "$FILEPATH" if [ $i -lt $FILES_PER_LIB ]; then
# 同一库内的调用
echo " NestedPage$((global_index + 1))()" >> "$FILEPATH"
else
# 跨库调用(如果不是最后一个库)
if [ $lib_index -lt $((TOTAL_LIBS - 1)) ]; then
next_lib_name="${LIB_NAMES[$((lib_index + 1))]}"
echo " com.dong.maxhap.$next_lib_name.NestedPage$((global_index + 1))()" >> "$FILEPATH"
fi
fi
echo " return" >> "$FILEPATH" echo " return" >> "$FILEPATH"
echo " }" >> "$FILEPATH" echo " }" >> "$FILEPATH"
echo "" >> "$FILEPATH" echo "" >> "$FILEPATH"
...@@ -55,58 +86,67 @@ for i in $(seq $TOTAL_FILES -1 1); do ...@@ -55,58 +86,67 @@ for i in $(seq $TOTAL_FILES -1 1); do
echo " verticalArrangement = Arrangement.Center" >> "$FILEPATH" echo " verticalArrangement = Arrangement.Center" >> "$FILEPATH"
echo " ) {" >> "$FILEPATH" echo " ) {" >> "$FILEPATH"
echo " Text(" >> "$FILEPATH" echo " Text(" >> "$FILEPATH"
echo " text = \"${i}层页面\"," >> "$FILEPATH" echo " text = \"${global_index}层页面 (${lib_name})\"," >> "$FILEPATH"
echo " fontSize = 24.sp," >> "$FILEPATH" echo " fontSize = 24.sp," >> "$FILEPATH"
echo " fontWeight = FontWeight.Bold," >> "$FILEPATH" echo " fontWeight = FontWeight.Bold," >> "$FILEPATH"
echo " color = Color(0xFF${i}0000)," >> "$FILEPATH" echo " color = Color(0xFF$((lib_index * 50))0000)," >> "$FILEPATH"
echo " modifier = Modifier.padding(bottom = 20.dp)" >> "$FILEPATH" echo " modifier = Modifier.padding(bottom = 20.dp)" >> "$FILEPATH"
echo " )" >> "$FILEPATH" echo " )" >> "$FILEPATH"
# 生成一些文本内容 # 生成一些文本内容
for j in $(seq 1 15); do for j in $(seq 1 10); do
LINE_NUM=$(( (i - 1) * 15 + j )) LINE_NUM=$(( (global_index - 1) * 10 + j ))
RED=$(( (LINE_NUM * 17) % 256 )) RED=$(( (LINE_NUM * 17) % 256 ))
GREEN=$(( (LINE_NUM * 31) % 256 )) GREEN=$(( (LINE_NUM * 31) % 256 ))
BLUE=$(( (LINE_NUM * 47) % 256 )) BLUE=$(( (LINE_NUM * 47) % 256 ))
echo " Text(" >> "$FILEPATH" echo " Text(" >> "$FILEPATH"
echo " text = \"这是第${LINE_NUM}行内容\"," >> "$FILEPATH" echo " text = \"这是第${LINE_NUM}行内容\"," >> "$FILEPATH"
echo " fontSize = 16.sp," >> "$FILEPATH" echo " fontSize = 14.sp," >> "$FILEPATH"
echo " color = Color($RED, $GREEN, $BLUE)," >> "$FILEPATH" echo " color = Color($RED, $GREEN, $BLUE)," >> "$FILEPATH"
echo " modifier = Modifier.padding(vertical = 4.dp)" >> "$FILEPATH" echo " modifier = Modifier.padding(vertical = 3.dp)" >> "$FILEPATH"
echo " )" >> "$FILEPATH" echo " )" >> "$FILEPATH"
done done
# 添加导航按钮(除了最后一个页面) # 添加导航按钮(除了最后一个页面)
if [ $i -lt $TOTAL_FILES ]; then if [ $global_index -lt $((TOTAL_LIBS * FILES_PER_LIB)) ]; then
echo "" >> "$FILEPATH" echo "" >> "$FILEPATH"
echo " Spacer(modifier = Modifier.height(30.dp))" >> "$FILEPATH" echo " Spacer(modifier = Modifier.height(25.dp))" >> "$FILEPATH"
echo "" >> "$FILEPATH" echo "" >> "$FILEPATH"
echo " Button(" >> "$FILEPATH" echo " Button(" >> "$FILEPATH"
echo " onClick = { $NEXT_PAGE_VAR = true }," >> "$FILEPATH" echo " onClick = { $NEXT_PAGE_VAR = true }," >> "$FILEPATH"
echo " modifier = Modifier" >> "$FILEPATH" echo " modifier = Modifier" >> "$FILEPATH"
echo " .fillMaxWidth()" >> "$FILEPATH" echo " .fillMaxWidth()" >> "$FILEPATH"
echo " .height(50.dp)," >> "$FILEPATH" echo " .height(45.dp)," >> "$FILEPATH"
echo " colors = ButtonDefaults.buttonColors(" >> "$FILEPATH" echo " colors = ButtonDefaults.buttonColors(" >> "$FILEPATH"
echo " backgroundColor = Color(0xFF2196F3)" >> "$FILEPATH" echo " backgroundColor = Color(0xFF2196F3)" >> "$FILEPATH"
echo " )" >> "$FILEPATH" echo " )" >> "$FILEPATH"
echo " ) {" >> "$FILEPATH" echo " ) {" >> "$FILEPATH"
if [ $i -lt $FILES_PER_LIB ]; then
echo " Text(" >> "$FILEPATH" echo " Text(" >> "$FILEPATH"
echo " text = \"进入第$((i+1))\"," >> "$FILEPATH" echo " text = \"进入同库第$((global_index + 1))\"," >> "$FILEPATH"
echo " fontSize = 18.sp," >> "$FILEPATH" echo " fontSize = 16.sp," >> "$FILEPATH"
echo " fontWeight = FontWeight.Medium," >> "$FILEPATH" echo " fontWeight = FontWeight.Medium," >> "$FILEPATH"
echo " color = Color.White" >> "$FILEPATH" echo " color = Color.White" >> "$FILEPATH"
echo " )" >> "$FILEPATH" echo " )" >> "$FILEPATH"
echo " }" >> "$FILEPATH"
else else
# 最后一层显示结束信息 if [ $lib_index -lt $((TOTAL_LIBS - 1)) ]; then
echo "" >> "$FILEPATH" next_lib_display="${LIB_NAMES[$((lib_index + 1))]}"
echo " Spacer(modifier = Modifier.height(30.dp))" >> "$FILEPATH"
echo " Text(" >> "$FILEPATH" echo " Text(" >> "$FILEPATH"
echo " text = \"已到达最深层(第${TOTAL_FILES}层)\"," >> "$FILEPATH" echo " text = \"进入${next_lib_display}$((global_index + 1))\"," >> "$FILEPATH"
echo " fontSize = 16.sp," >> "$FILEPATH" echo " fontSize = 16.sp," >> "$FILEPATH"
echo " color = Color.Gray," >> "$FILEPATH" echo " fontWeight = FontWeight.Medium," >> "$FILEPATH"
echo " modifier = Modifier.padding(20.dp)" >> "$FILEPATH" echo " color = Color.White" >> "$FILEPATH"
echo " )" >> "$FILEPATH" echo " )" >> "$FILEPATH"
else
echo " Text(" >> "$FILEPATH"
echo " text = \"已到达最深层\"," >> "$FILEPATH"
echo " fontSize = 16.sp," >> "$FILEPATH"
echo " fontWeight = FontWeight.Medium," >> "$FILEPATH"
echo " color = Color.White" >> "$FILEPATH"
echo " )" >> "$FILEPATH"
fi
fi
echo " }" >> "$FILEPATH"
fi fi
# 结束Column和函数 # 结束Column和函数
...@@ -114,73 +154,57 @@ for i in $(seq $TOTAL_FILES -1 1); do ...@@ -114,73 +154,57 @@ for i in $(seq $TOTAL_FILES -1 1); do
echo "}" >> "$FILEPATH" echo "}" >> "$FILEPATH"
# 显示进度 # 显示进度
if [ $((TOTAL_FILES - i + 1 % 100)) -eq 0 ]; then if [ $((i % 50)) -eq 0 ]; then
echo "已生成 $((TOTAL_FILES - i + 1)) 个文件" echo " 已生成库 $lib_name$i 个文件"
fi fi
done
done
# 为每个库创建build.gradle.kts文件
for lib_name in "${LIB_NAMES[@]}"; do
LIB_DIR="$BASE_DIR/$lib_name"
echo "plugins {" > "$LIB_DIR/build.gradle.kts"
echo " kotlin(\"multiplatform\")" >> "$LIB_DIR/build.gradle.kts"
echo " id(\"org.jetbrains.compose\")" >> "$LIB_DIR/build.gradle.kts"
echo "}" >> "$LIB_DIR/build.gradle.kts"
echo "" >> "$LIB_DIR/build.gradle.kts"
echo "kotlin {" >> "$LIB_DIR/build.gradle.kts"
echo " jvm()" >> "$LIB_DIR/build.gradle.kts"
echo " androidTarget()" >> "$LIB_DIR/build.gradle.kts"
echo " iosX64()" >> "$LIB_DIR/build.gradle.kts"
echo " iosArm64()" >> "$LIB_DIR/build.gradle.kts"
echo " iosSimulatorArm64()" >> "$LIB_DIR/build.gradle.kts"
echo " ohosArm64()" >> "$LIB_DIR/build.gradle.kts"
echo "" >> "$LIB_DIR/build.gradle.kts"
echo " sourceSets {" >> "$LIB_DIR/build.gradle.kts"
echo " val commonMain by getting {" >> "$LIB_DIR/build.gradle.kts"
echo " dependencies {" >> "$LIB_DIR/build.gradle.kts"
echo " implementation(compose.runtime)" >> "$LIB_DIR/build.gradle.kts"
echo " implementation(compose.foundation)" >> "$LIB_DIR/build.gradle.kts"
echo " implementation(compose.material)" >> "$LIB_DIR/build.gradle.kts"
echo " }" >> "$LIB_DIR/build.gradle.kts"
echo " }" >> "$LIB_DIR/build.gradle.kts"
echo " }" >> "$LIB_DIR/build.gradle.kts"
echo "}" >> "$LIB_DIR/build.gradle.kts"
echo "创建 $lib_name 的 build.gradle.kts"
done
# 更新settings.gradle.kts包含新库
SETTINGS_FILE="$BASE_DIR/settings.gradle.kts"
echo "" >> "$SETTINGS_FILE"
echo "// 嵌套页面库模块" >> "$SETTINGS_FILE"
for lib_name in "${LIB_NAMES[@]}"; do
echo "include(\"$lib_name\")" >> "$SETTINGS_FILE"
done done
# 创建主入口文件 echo ""
MAIN_FILE="$TARGET_DIR/NestedPagesMain.kt" echo "成功生成5个嵌套页面库:"
echo "package com.dong.maxhap.demos.test" > "$MAIN_FILE" echo "每个库包含200个文件,总共1000个嵌套页面"
echo "" >> "$MAIN_FILE" echo "库列表: ${LIB_NAMES[*]}"
echo "import androidx.compose.foundation.layout.*" >> "$MAIN_FILE" echo "请在composeApp的build.gradle.kts中添加依赖:"
echo "import androidx.compose.material.*" >> "$MAIN_FILE" echo ""
echo "import androidx.compose.runtime.*" >> "$MAIN_FILE" for lib_name in "${LIB_NAMES[@]}"; do
echo "import androidx.compose.ui.Alignment" >> "$MAIN_FILE" echo "implementation(project(\":$lib_name\"))"
echo "import androidx.compose.ui.Modifier" >> "$MAIN_FILE" done
echo "import androidx.compose.ui.graphics.Color" >> "$MAIN_FILE" \ No newline at end of file
echo "import androidx.compose.ui.text.font.FontWeight" >> "$MAIN_FILE"
echo "import androidx.compose.ui.unit.dp" >> "$MAIN_FILE"
echo "import androidx.compose.ui.unit.sp" >> "$MAIN_FILE"
echo "" >> "$MAIN_FILE"
echo "@Composable" >> "$MAIN_FILE"
echo "internal fun NestedPagesMain() {" >> "$MAIN_FILE"
echo " var showFirstPage by remember { mutableStateOf(false) }" >> "$MAIN_FILE"
echo "" >> "$MAIN_FILE"
echo " if (showFirstPage) {" >> "$MAIN_FILE"
echo " NestedPage1()" >> "$MAIN_FILE"
echo " return" >> "$MAIN_FILE"
echo " }" >> "$MAIN_FILE"
echo "" >> "$MAIN_FILE"
echo " Column(" >> "$MAIN_FILE"
echo " modifier = Modifier" >> "$MAIN_FILE"
echo " .fillMaxSize()" >> "$MAIN_FILE"
echo " .padding(16.dp)," >> "$MAIN_FILE"
echo " horizontalAlignment = Alignment.CenterHorizontally," >> "$MAIN_FILE"
echo " verticalArrangement = Arrangement.Center" >> "$MAIN_FILE"
echo " ) {" >> "$MAIN_FILE"
echo " Text(" >> "$MAIN_FILE"
echo " text = \"嵌套页面演示\"," >> "$MAIN_FILE"
echo " fontSize = 28.sp," >> "$MAIN_FILE"
echo " fontWeight = FontWeight.Bold," >> "$MAIN_FILE"
echo " color = Color(0xFF2196F3)," >> "$MAIN_FILE"
echo " modifier = Modifier.padding(bottom = 30.dp)" >> "$MAIN_FILE"
echo " )" >> "$MAIN_FILE"
echo "" >> "$MAIN_FILE"
echo " Text(" >> "$MAIN_FILE"
echo " text = \"共包含 $TOTAL_FILES 层嵌套页面\"," >> "$MAIN_FILE"
echo " fontSize = 16.sp," >> "$MAIN_FILE"
echo " modifier = Modifier.padding(bottom = 20.dp)" >> "$MAIN_FILE"
echo " )" >> "$MAIN_FILE"
echo "" >> "$MAIN_FILE"
echo " Button(" >> "$MAIN_FILE"
echo " onClick = { showFirstPage = true }," >> "$MAIN_FILE"
echo " modifier = Modifier" >> "$MAIN_FILE"
echo " .fillMaxWidth()" >> "$MAIN_FILE"
echo " .height(50.dp)," >> "$MAIN_FILE"
echo " colors = ButtonDefaults.buttonColors(" >> "$MAIN_FILE"
echo " backgroundColor = Color(0xFF4CAF50)" >> "$MAIN_FILE"
echo " )" >> "$MAIN_FILE"
echo " ) {" >> "$MAIN_FILE"
echo " Text(" >> "$MAIN_FILE"
echo " text = \"开始嵌套之旅\"," >> "$MAIN_FILE"
echo " fontSize = 18.sp," >> "$MAIN_FILE"
echo " fontWeight = FontWeight.Medium," >> "$MAIN_FILE"
echo " color = Color.White" >> "$MAIN_FILE"
echo " )" >> "$MAIN_FILE"
echo " }" >> "$MAIN_FILE"
echo " }" >> "$MAIN_FILE"
echo "}" >> "$MAIN_FILE"
echo "成功生成 $TOTAL_FILES 个嵌套页面文件到 $TARGET_DIR 目录"
echo "主入口函数: NestedPagesMain()"
\ No newline at end of file
...@@ -18,9 +18,9 @@ ...@@ -18,9 +18,9 @@
"arkOptions": { "arkOptions": {
"obfuscation": { "obfuscation": {
"ruleOptions": { "ruleOptions": {
"enable": false, "enable": true,
"files": [ "files": [
"./obfuscation-rules.txt" "./obfuscation-rule.txt"
] ]
} }
} }
......
...@@ -36,3 +36,24 @@ dependencyResolutionManagement { ...@@ -36,3 +36,24 @@ dependencyResolutionManagement {
// 包含 composeApp 模块 // 包含 composeApp 模块
include(":composeApp") include(":composeApp")
// 嵌套页面库模块
include("nestedlib1")
include("nestedlib2")
include("nestedlib3")
include("nestedlib4")
include("nestedlib5")
// 嵌套页面库模块
include("nestedlib1")
include("nestedlib2")
include("nestedlib3")
include("nestedlib4")
include("nestedlib5")
// 嵌套页面库模块
include("nestedlib1")
include("nestedlib2")
include("nestedlib3")
include("nestedlib4")
include("nestedlib5")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment