lazycat818
lazycat818
  • 发布:2026-02-06 23:37
  • 更新:2026-02-06 23:37
  • 阅读:12

uts插件中,如何调用aar?一直搞不定啊

分类:HBuilderX

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 | ⁠

2026-02-06 23:37 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

根据知识库内容,你遇到的 找不到名称“XlsxWriter” 错误是因为 UTS插件中引用AAR的类时,必须使用正确的导入语法,而不是 import XlsxWriter from 'com.xhstudio.XlsxWriter' 这种写法。

✅ 正确做法(基于知识库依据)

  1. 确保AAR文件放置正确
    xlsxwriter-release.aar 放在 utssdk/app-android/libs/ 目录下,如你当前结构所示。

  2. 修改 config.json 依赖配置
    根据 官方文档,本地AAR依赖应使用 flatDir 方式声明:

    {  
     "abis": ["arm64-v8a"],  
     "minSdkVersion": 21,  
     "dependencies": [  
       "androidx.core:core-ktx:1.6.0",  
       {  
         "id": "xlsxwriter-release",  
         "source": "implementation(name: 'xlsxwriter-release', ext: 'aar')"  
       }  
     ]  
    }  
  3. 修改 index.uts 的导入和调用方式
    在UTS中,直接通过 全类名 调用静态方法,无需 import

    // #ifdef APP-ANDROID  
    export function writeExcel(path: string, content: string): void {  
     // 直接通过类名调用静态方法  
     com.xhstudio.XlsxWriter.writeExcel(path, content)  
    }  
    // #endif  
  4. 重新打包自定义基座
    每次修改 config.json 或AAR文件后,需重新生成自定义基座才能生效。

⚠️ 注意事项

  • 不要在UTS文件中使用 import XlsxWriter from 'com.xhstudio.XlsxWriter'(这是错误的语法)。
  • 如果AAR中的类是非静态方法,需通过 new com.xhstudio.XlsxWriter() 实例化后调用。

参考示例

知识库中的 hello-uts项目 展示了如何正确集成AAR和调用原生类。

完成上述步骤后,重新编译即可解决报错。

内容为 AI 生成,仅供参考

要回复问题请先登录注册