From 901f51bf05b6870c324721b30e26a0bdc9c1ae87 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 1 Aug 2022 20:34:45 +0800 Subject: [PATCH] wip(uts): compiler --- .../test-uniplugin/app-android/index | 13 ++++++++++++ packages/uni-uts-vite/src/plugins/v1.ts | 20 +++++++++++++++++-- packages/uni-uts-vite/src/utils/compiler.ts | 8 ++++++++ packages/vite-plugin-uni/src/cli/action.ts | 16 +++++++++++++-- 4 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 packages/playground/uts/unpackage/dist/app-plus/uni_modules/test-uniplugin/app-android/index diff --git a/packages/playground/uts/unpackage/dist/app-plus/uni_modules/test-uniplugin/app-android/index b/packages/playground/uts/unpackage/dist/app-plus/uni_modules/test-uniplugin/app-android/index new file mode 100644 index 000000000..e0eaad93c --- /dev/null +++ b/packages/playground/uts/unpackage/dist/app-plus/uni_modules/test-uniplugin/app-android/index @@ -0,0 +1,13 @@ +import android.util.Log; +fun login(name: String, pwd: String): UtsJSONObject { + return object : UtsJSONObject() { + var name = name + var pwd = pwd + }; +} +open class User { + open suspend fun login(name: String, pwd: String) = CoroutineScope(Dispatchers.Default).async { + login(name, pwd); + Log.info("123"); + } +} diff --git a/packages/uni-uts-vite/src/plugins/v1.ts b/packages/uni-uts-vite/src/plugins/v1.ts index 66d9978e8..c883bd796 100644 --- a/packages/uni-uts-vite/src/plugins/v1.ts +++ b/packages/uni-uts-vite/src/plugins/v1.ts @@ -25,6 +25,7 @@ import { compile, parsePackage } from '../utils/compiler' export function uniUtsV1Plugin(): Plugin { // 目前仅支持 app-android process.env.UNI_APP_PLATFORM = 'app-android' + let isFirst = true return { name: 'uni:uts-v1', apply: 'build', @@ -59,9 +60,24 @@ const pkg = '${pkg}' const cls = 'IndexKt' ${genProxyCode(ast)} ` - await compile(id) + const dexFile = await compile(id) + if (!isFirst && dexFile) { + const files = [] + if (process.env.UNI_APP_CHANGED_DEX_FILES) { + try { + files.push(...JSON.parse(process.env.UNI_APP_CHANGED_DEX_FILES)) + } catch (e) {} + } + files.push(dexFile) + process.env.UNI_APP_CHANGED_DEX_FILES = JSON.stringify([ + ...new Set(files), + ]) + } return code }, + buildEnd() { + isFirst = false + }, } } @@ -216,7 +232,7 @@ function genVariableDeclarationCode(decl: VariableDeclaration) { return false }) ) { - return `${decl.kind} ${decl.declarations + return `export ${decl.kind} ${decl.declarations .map((d) => `${(d.id as Identifier).value} = ${genInitCode(d.init!)}`) .join(', ')}` } diff --git a/packages/uni-uts-vite/src/utils/compiler.ts b/packages/uni-uts-vite/src/utils/compiler.ts index 416c7e7f8..4a5793212 100644 --- a/packages/uni-uts-vite/src/utils/compiler.ts +++ b/packages/uni-uts-vite/src/utils/compiler.ts @@ -80,11 +80,19 @@ export async function compile(filename: string) { // 短期内先不删除,方便排查问题 // fs.unlinkSync(kotlinFile) } catch (e) {} + const dexFile = resolveDexFile(jarFile) + if (fs.existsSync(dexFile)) { + return normalizePath(path.relative(outputDir, dexFile)) + } } } } } +function resolveDexFile(jarFile: string) { + return normalizePath(path.resolve(path.dirname(jarFile), 'classes.dex')) +} + function resolveKotlinFile( filename: string, inputDir: string, diff --git a/packages/vite-plugin-uni/src/cli/action.ts b/packages/vite-plugin-uni/src/cli/action.ts index 8170f7e1e..b22a52a56 100644 --- a/packages/vite-plugin-uni/src/cli/action.ts +++ b/packages/vite-plugin-uni/src/cli/action.ts @@ -45,10 +45,15 @@ export async function runDev(options: CliOptions & ServerOptions) { } const files = process.env.UNI_APP_CHANGED_FILES const pages = process.env.UNI_APP_CHANGED_PAGES + const dex = process.env.UNI_APP_CHANGED_DEX_FILES const changedFiles = pages || files process.env.UNI_APP_CHANGED_PAGES = '' process.env.UNI_APP_CHANGED_FILES = '' - if (changedFiles && !changedFiles.includes(APP_CONFIG_SERVICE)) { + process.env.UNI_APP_CHANGED_DEX_FILES = '' + if ( + (changedFiles && !changedFiles.includes(APP_CONFIG_SERVICE)) || + dex + ) { if (pages) { return output( 'log', @@ -57,7 +62,14 @@ export async function runDev(options: CliOptions & ServerOptions) { } return output( 'log', - M['dev.watching.end.files'].replace('{files}', changedFiles) + M['dev.watching.end.files'].replace( + '{files}', + JSON.stringify( + JSON.parse(changedFiles || JSON.stringify([])).concat( + JSON.parse(dex || JSON.stringify([])) + ) + ) + ) ) } return output('log', M['dev.watching.end']) -- GitLab