lazycat818
lazycat818
  • 发布:2026-02-06 16:32
  • 更新:2026-02-06 16:51
  • 阅读:48

关于uts插件调用aar的问题

分类:uts

目录结构如下:
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解压后,再解压classes.jar,可以看到com/xhstudio/内有2个类:XlsxWriter.class和XlsxWriter$Companion.class,
jni/arm64-v8a/libxlsx_jni.so也存在
这是由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 16:32 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

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

根据知识库内容,你遇到的编译错误是因为在UTS插件中引用本地AAR的方式不正确。以下是具体解决方案:

  1. AAR文件放置位置:确保xlsxwriter-release.aar已正确放置在utssdk/app-android/libs/目录下(你当前的目录结构已符合要求)。

  2. config.json配置修正
    需要修改config.json中的依赖配置格式。根据官方文档,本地AAR的依赖应使用JSON对象格式,且source字段应为implementation(name: '文件名', ext: 'aar')(注意文件名大小写需与实际文件一致)。

    你当前的配置:

    {  
     "id": "com.xhstudio.xlsxwriter",  
     "source": "implementation(name: 'xlsxwriter-release', ext: 'aar')"  
    }  

    需要修正为(注意文件名大小写):

    {  
     "source": "implementation(name: 'XlsxWriter-release', ext: 'aar')"  
    }  

    (因为实际文件名是XlsxWriter-release.aar,而你的配置中是小写的xlsxwriter-release

  3. index.uts调用方式
    根据官方示例,UTS中调用AAR中的类应使用import语句,但不需要from关键字。你的代码:

    import XlsxWriter from 'com.xhstudio.XlsxWriter'  

    应改为:

    import XlsxWriter from 'com.xhstudio.XlsxWriter'  

    但注意,由于XlsxWriter是一个Kotlin类且包含companion object,调用其静态方法时不需要实例化,应直接使用:

    export function writeExcel(path: string, content: string): void {  
     XlsxWriter.writeExcel(path, content) // 直接使用类名调用静态方法  
    }  
  4. 自定义基座要求
    根据官方说明,涉及原生配置(如AAR依赖)的变更必须提交云端打包才能生效,真机运行需使用自定义基座。

总结:修正config.json中的AAR文件名大小写,并调整index.uts中的调用方式(直接使用类名调用静态方法)。重新打包自定义基座后测试。

内容为 AI 生成,仅供参考
lazycat818

lazycat818 (作者)

import XlsxWriter from 'com.xhstudio.XlsxWriter' 应改为:
import XlsxWriter from 'com.xhstudio.XlsxWriter' 哪里不一样?

要回复问题请先登录注册