HBuilder 4.87
目录结构如下:
uni-modules/xh-xlsxwriter/
├── native/
├── utssdk/
│ └── app-android/
│ ├── libs/
│ │ └── xlsxwriter-release.aar
│ ├── build.gradle
│ ├── config.json
│ └── index.ts
│ └── XlsWriter.d.ts
├── app-harmony/
├── app-ios/
├── color.uts
├── format.uts
├── index.uts
├── interface.uts
├── unirror.uts
├── workbook.uts
├── worksheet.uts
├── changelog.md
├── package.json
└── readme.md
xlsxwriter-release.aar:android studio打包而成,改为zip解压后可看到:
jni/arm64-v8a/libxlsx_jni.so
META-INF/com/android/build/gradle/aar-metadata.properties
AndroidManifest.xml
classes.jar
proguard.txt
R.txt
再解压classes.jar,可以看到
com/xhstudio/XlsxWriter$Companion.class
com/xhstudio/XlsxWriter.class
META-INF/xlsxwriter.kotlin.module
这是由XlsxWriter.kt和jni_wrapper.c以及cJSON和libxlsxwriter及自己编写的将字符串转json并调用libxlsxwriter的c文件组成
jni_wrapper.c内容如下:
Java_com_xhstudio_XlsxWriter_writeExcel(JNIEnv *env, jclass clazz, jstring jpath, jstring jcontent) {
if (!jpath || !jcontent) {
return;
}
const char *path = (*env)->GetStringUTFChars(env, jpath, NULL);
const char *content = (*env)->GetStringUTFChars(env, jcontent, NULL);
if (path && content) {
write_excel(path, content);
}
if (path){
(*env)->ReleaseStringUTFChars(env, jpath, path);
}
if (content) {
(*env)->ReleaseStringUTFChars(env, jcontent, content);
}
}
XlsxWriter.kt内容如下:
package com.xhstudio
class XlsxWriter {
companion object {
init { System.loadLibrary("xlsx_jni") } // 对应 libxlsx_jni.so
@JvmStatic
external fun writeExcel(path: String, content: String)
}
}
config.json内容如下:
{
"abis": ["arm64-v8a"],
"minSdkVersion": 21,
"dependencies": [
"androidx.core:core-ktx:1.6.0",
{
"id": "com.xhstudio.XlsxWriter",
"source": "implementation(name: 'XlsxWriter-release', ext: 'aar')"
}
]
}
build.gradle内容如下:
repositories {
flatDir { dirs 'libs' }
}
dependencies {
implementation(name: 'XlsxWriter-release', ext: 'aar')
}
app-android/index.uts内容如下:
// #ifdef APP-ANDROID
import XlsxWriter from 'com.xhstudio.XlsxWriter'
export function writeExcel(path: string, content: string): void {
return new XlsxWriter().writeExcel(path, content)
}
// #endif
已打包自定义基座, 运行配置 :
gradle:D:/gradle-8.14.4/bin/gradle.bat;
jdk:D:/Program Files/Android/Android Studio/jbr;
sdk:C:/Users/XXXX/AppData/Local/Android/Sdk,
错误信息:
11:39:19.894 正在编译中...
11:39:24.782 请在杀毒软件中设置扫描排除名单,减少系统资源消耗。详情
11:39:25.393 当前工程1个页面,正在编译为android class,此过程耗时较长...
11:39:30.474 [plugin:uni:app-uts] 编译失败
11:39:30.474 error: 找不到名称“xhstudio”。参考: https://doc.dcloud.net.cn/uni-app-x/uts/compiler-known-issues.html#error18
11:39:30.474 at uni_modules/xh-xlsxwriter/utssdk/app-android/index.uts:4:23
11:39:30.474 2 |
11:39:30.474 3 |
11:39:30.474 4 | import XlsxWriter from 'com.xhstudio.XlsxWriter'
11:39:30.474 | ^
11:39:30.474 5 | export function writeExcel(path: string, content: string): void {
11:39:30.474 6 | return new XlsxWriter().writeExcel(path, content)
11:39:30.474 error: 找不到名称“XlsxWriter”。参考: https://doc.dcloud.net.cn/uni-app-x/uts/compiler-known-issues.html#error18
11:39:30.474 at uni_modules/xh-xlsxwriter/utssdk/app-android/index.uts:6:13
11:39:30.474 4 | import XlsxWriter from 'com.xhstudio.XlsxWriter'
11:39:30.474 5 | export function writeExcel(path: string, content: string): void {
11:39:30.474 6 | return new XlsxWriter().writeExcel(path, content)
11:39:30.474 | ^
11:39:30.474 7 | }
11:39:30.474 8 |
1 个回复
Ask小助手 - Ask社区AI助手
根据知识库内容,你遇到的
找不到名称“XlsxWriter”错误是因为 UTS插件中引用AAR的类时,必须使用正确的导入语法,而不是import XlsxWriter from 'com.xhstudio.XlsxWriter'这种写法。✅ 正确做法(基于知识库依据)
确保AAR文件放置正确
将
xlsxwriter-release.aar放在utssdk/app-android/libs/目录下,如你当前结构所示。修改
config.json依赖配置根据 官方文档,本地AAR依赖应使用
flatDir方式声明:修改
index.uts的导入和调用方式在UTS中,直接通过 全类名 调用静态方法,无需
import:重新打包自定义基座
每次修改
config.json或AAR文件后,需重新生成自定义基座才能生效。⚠️ 注意事项
import XlsxWriter from 'com.xhstudio.XlsxWriter'(这是错误的语法)。new com.xhstudio.XlsxWriter()实例化后调用。参考示例
知识库中的 hello-uts项目 展示了如何正确集成AAR和调用原生类。
完成上述步骤后,重新编译即可解决报错。
要回复问题请先登录或注册
公告
更多>相关问题