目录结构如下:
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 |
2 个回复
Ask小助手
根据知识库内容,你遇到的编译错误是因为在UTS插件中引用本地AAR的方式不正确。以下是具体解决方案:
AAR文件放置位置:确保
xlsxwriter-release.aar已正确放置在utssdk/app-android/libs/目录下(你当前的目录结构已符合要求)。config.json配置修正:
需要修改
config.json中的依赖配置格式。根据官方文档,本地AAR的依赖应使用JSON对象格式,且source字段应为implementation(name: '文件名', ext: 'aar')(注意文件名大小写需与实际文件一致)。你当前的配置:
需要修正为(注意文件名大小写):
(因为实际文件名是
XlsxWriter-release.aar,而你的配置中是小写的xlsxwriter-release)index.uts调用方式:
根据官方示例,UTS中调用AAR中的类应使用
import语句,但不需要from关键字。你的代码:应改为:
但注意,由于
XlsxWriter是一个Kotlin类且包含companion object,调用其静态方法时不需要实例化,应直接使用:自定义基座要求:
根据官方说明,涉及原生配置(如AAR依赖)的变更必须提交云端打包才能生效,真机运行需使用自定义基座。
总结:修正
config.json中的AAR文件名大小写,并调整index.uts中的调用方式(直接使用类名调用静态方法)。重新打包自定义基座后测试。lazycat818 (作者)
import XlsxWriter from 'com.xhstudio.XlsxWriter' 应改为:
import XlsxWriter from 'com.xhstudio.XlsxWriter' 哪里不一样?
要回复问题请先登录或注册
公告
更多>相关问题