Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
KMPMaxHap
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
dsq
KMPMaxHap
Commits
b44029ca
Commit
b44029ca
authored
Feb 12, 2026
by
dsq
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
172
parent
3bb6faef
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
565 additions
and
177 deletions
+565
-177
README.md
README.md
+8
-7
build.gradle.kts
composeApp/build.gradle.kts
+6
-0
generate_final_hap_files.sh
generate_final_hap_files.sh
+336
-0
generate_hap_test_files.sh
generate_hap_test_files.sh
+192
-168
build-profile.json5
harmonyApp/entry/build-profile.json5
+2
-2
libkn.so
harmonyApp/entry/libs/arm64-v8a/libkn.so
+0
-0
settings.gradle.kts
settings.gradle.kts
+21
-0
No files found.
README.md
View file @
b44029ca
...
...
@@ -17,17 +17,18 @@ MaxHap/
项目提供了几个实用的脚本工具来帮助开发和测试:
### 1.
单文件批量生成Composable函数
脚本
### 1.
多库嵌套页面生成
脚本
#### generate_hap_test_files.sh
在单个文件中生成1000个@Composable函数
。
生成5个独立库,每个库包含200个嵌套页面文件
。
**功能特性:**
-
生成1个大型.kt文件(BatchComposables.kt)
-
包含1000个独立的@Composable函数
-
每个函数都有独特的彩色文本内容
-
函数命名规范:BatchComposable1, BatchComposable2, ..., BatchComposable1000
-
文件大小约4.2MB,包含约138,000行代码
-
生成5个独立的Kotlin Multiplatform库
-
每个库包含200个.kt文件(NestedPage1.kt 到 NestedPage200.kt)
-
实现跨库递归嵌套结构
-
库间调用:第200层调用下一库的第201层
-
每个页面都有独特的彩色标题和内容
-
自动生成build.gradle.kts配置文件
**使用方法:**
```
bash
...
...
composeApp/build.gradle.kts
View file @
b44029ca
...
...
@@ -115,6 +115,12 @@ kotlin {
implementation
(
compose
.
ui
)
// 添加compose ui依赖
implementation
(
compose
.
components
.
resources
)
// 添加compose组件资源依赖
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
.
atomicFu
)
// Kotlin AtomicFu原子库
}
...
...
generate_final_hap_files.sh
0 → 100755
View file @
b44029ca
#!/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
generate_hap_test_files.sh
View file @
b44029ca
#!/bin/bash
# 设置
目标
目录
TARGET_DIR
=
"composeApp/src/commonMain/kotlin/com/dong/maxhap/demos/test
"
# 设置
基础
目录
BASE_DIR
=
".
"
# 创建目录
mkdir
-p
"
$TARGET_DIR
"
# 创建
5个库
目录
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
FILENAME
=
"NestedPage
${
i
}
.kt"
FILEPATH
=
"
$TARGET_DIR
/
$FILENAME
"
# 创建目录结构
mkdir
-p
"
$SRC_DIR
"
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
"import androidx.compose.foundation.layout.*"
>>
"
$FILEPATH
"
echo
"import androidx.compose.material.*"
>>
"
$FILEPATH
"
...
...
@@ -35,12 +57,21 @@ for i in $(seq $TOTAL_FILES -1 1); do
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"
echo
" var
$NEXT_PAGE_VAR
by remember { mutableStateOf(false) }"
>>
"
$FILEPATH
"
echo
""
>>
"
$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
" }"
>>
"
$FILEPATH
"
echo
""
>>
"
$FILEPATH
"
...
...
@@ -55,58 +86,67 @@ for i in $(seq $TOTAL_FILES -1 1); do
echo
" verticalArrangement = Arrangement.Center"
>>
"
$FILEPATH
"
echo
" ) {"
>>
"
$FILEPATH
"
echo
" Text("
>>
"
$FILEPATH
"
echo
" text =
\"
第
${
i
}
层页面
\"
,"
>>
"
$FILEPATH
"
echo
" text =
\"
第
${
global_index
}
层页面 (
${
lib_name
}
)
\"
,"
>>
"
$FILEPATH
"
echo
" fontSize = 24.sp,"
>>
"
$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
" )"
>>
"
$FILEPATH
"
# 生成一些文本内容
for
j
in
$(
seq
1 15
)
;
do
LINE_NUM
=
$((
(
i
-
1
)
*
15
+
j
))
for
j
in
$(
seq
1 10
)
;
do
LINE_NUM
=
$((
(
global_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 = 16
.sp,"
>>
"
$FILEPATH
"
echo
" fontSize = 14
.sp,"
>>
"
$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
"
done
# 添加导航按钮(除了最后一个页面)
if
[
$i
-lt
$TOTAL_FILES
]
;
then
if
[
$global_index
-lt
$((
TOTAL_LIBS
*
FILES_PER_LIB
))
]
;
then
echo
""
>>
"
$FILEPATH
"
echo
" Spacer(modifier = Modifier.height(30
.dp))"
>>
"
$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(50
.dp),"
>>
"
$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 =
\"
进入第
$((
i+
1
))
层
\"
,"
>>
"
$FILEPATH
"
echo
" fontSize = 18
.sp,"
>>
"
$FILEPATH
"
echo
" text =
\"
进入同库第
$((
global_index
+
1
))
层
\"
,"
>>
"
$FILEPATH
"
echo
" fontSize = 16
.sp,"
>>
"
$FILEPATH
"
echo
" fontWeight = FontWeight.Medium,"
>>
"
$FILEPATH
"
echo
" color = Color.White"
>>
"
$FILEPATH
"
echo
" )"
>>
"
$FILEPATH
"
echo
" }"
>>
"
$FILEPATH
"
else
# 最后一层显示结束信息
echo
""
>>
"
$FILEPATH
"
echo
" Spacer(modifier = Modifier.height(30.dp))"
>>
"
$FILEPATH
"
if
[
$lib_index
-lt
$((
TOTAL_LIBS
-
1
))
]
;
then
next_lib_display
=
"
${
LIB_NAMES
[
$((
lib_index
+
1
))
]
}
"
echo
" Text("
>>
"
$FILEPATH
"
echo
" text =
\"
已到达最深层(第
${
TOTAL_FILES
}
层)
\"
,"
>>
"
$FILEPATH
"
echo
" text =
\"
进入
${
next_lib_display
}
第
$((
global_index
+
1
))
层
\"
,"
>>
"
$FILEPATH
"
echo
" fontSize = 16.sp,"
>>
"
$FILEPATH
"
echo
" color = Color.Gray
,"
>>
"
$FILEPATH
"
echo
" modifier = Modifier.padding(20.dp)
"
>>
"
$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
# 结束Column和函数
...
...
@@ -114,73 +154,57 @@ for i in $(seq $TOTAL_FILES -1 1); do
echo
"}"
>>
"
$FILEPATH
"
# 显示进度
if
[
$((
TOTAL_FILES
-
i
+
1
%
10
0
))
-eq
0
]
;
then
echo
"已生成
$((
TOTAL_FILES
-
i
+
1
))
个文件"
if
[
$((
i
%
5
0
))
-eq
0
]
;
then
echo
" 已生成库
$lib_name
的
$i
个文件"
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
# 创建主入口文件
MAIN_FILE
=
"
$TARGET_DIR
/NestedPagesMain.kt"
echo
"package com.dong.maxhap.demos.test"
>
"
$MAIN_FILE
"
echo
""
>>
"
$MAIN_FILE
"
echo
"import androidx.compose.foundation.layout.*"
>>
"
$MAIN_FILE
"
echo
"import androidx.compose.material.*"
>>
"
$MAIN_FILE
"
echo
"import androidx.compose.runtime.*"
>>
"
$MAIN_FILE
"
echo
"import androidx.compose.ui.Alignment"
>>
"
$MAIN_FILE
"
echo
"import androidx.compose.ui.Modifier"
>>
"
$MAIN_FILE
"
echo
"import androidx.compose.ui.graphics.Color"
>>
"
$MAIN_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
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
harmonyApp/entry/build-profile.json5
View file @
b44029ca
...
...
@@ -18,9 +18,9 @@
"arkOptions": {
"obfuscation": {
"ruleOptions": {
"enable":
fals
e,
"enable":
tru
e,
"files": [
"./obfuscation-rule
s
.txt"
"./obfuscation-rule.txt"
]
}
}
...
...
harmonyApp/entry/libs/arm64-v8a/libkn.so
View file @
b44029ca
No preview for this file type
settings.gradle.kts
View file @
b44029ca
...
...
@@ -36,3 +36,24 @@ dependencyResolutionManagement {
// 包含 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"
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment