diff --git a/arkoala-arkts/.gitlab-ci.yml b/arkoala-arkts/.gitlab-ci.yml index e06ba926c0c7fa7b1fbffe4006989ccbedbe0c9c..c3c83a6e5bf99c50eff2a05404f7c6d3ed859b8c 100644 --- a/arkoala-arkts/.gitlab-ci.yml +++ b/arkoala-arkts/.gitlab-ci.yml @@ -26,7 +26,7 @@ install node modules (arkoala-arkts): before_script: - !reference [.setup, script] script: - - npm run compile:native-panda-with-node-host --prefix arkoala/framework + - npm run compile:native:node-host --prefix arkoala-arkts artifacts: paths: - arkoala/framework/native/build-node-host-vmloader/ArkoalaLoader.node @@ -48,7 +48,7 @@ install node modules (arkoala-arkts): before_script: - !reference [.setup, script] script: - - npm run compile:native-hzvm-ohos-arm32 --prefix arkoala/framework + - npm run compile:native:hzvm-ohos-arm32 --prefix arkoala-arkts artifacts: paths: - arkoala/framework/native/build-hzvm-ohos-arm32-vmloader/libArkoalaLoader.so @@ -161,7 +161,7 @@ install node modules (arkoala-arkts): - npm run link:user --prefix arkoala-arkts artifacts: paths: - - arkoala-arkts/build/user.abc + - arkoala-arkts/user/build/user.abc expire_in: 1 day run:node:ci (linux, linux, node+panda): @@ -181,9 +181,56 @@ install node modules (arkoala-arkts): - !reference [.setup, script] - npm run panda:sdk:install --prefix arkoala-arkts script: + - mkdir -p arkoala-arkts/build && cp arkoala-arkts/user/build/user.abc arkoala-arkts/build - npm run build:loader:node --prefix arkoala-arkts - npm run run:node:ci --prefix arkoala-arkts + arkoala-arkts.har: + stage: build + interruptible: true + extends: + - .linux-vm-shell-task + needs: + - install node modules (arkoala) + - install node modules (arkoala-arkts) + - install node modules (incremental) + - install node modules (interop) + - link arkoala.abc + - build ArkoalaNative (linux, ohos-arm32, hzvm+panda) + before_script: + - !reference [.setup, script] + script: + - npm run arkoala:har-arm32 --prefix arkoala-arkts/har + - mv arkoala-arkts/har/app/arkoala/build/default/outputs/default/arkoala.har arkoala-arkts.har + artifacts: + paths: + - arkoala-arkts.har + expire_in: 1 day + + user.har: + stage: build + interruptible: true + extends: + - .linux-vm-shell-task + needs: + - install node modules (arkoala) + - install node modules (arkoala-arkts) + - install node modules (incremental) + - install node modules (interop) + - link user.abc + before_script: + - !reference [.setup, script] + - npm run panda:sdk:install --prefix arkoala-arkts + script: + - npm run --prefix arkoala/ohos-sdk download + - npm run bundle --prefix arkoala-arkts/user + - npm run build --prefix arkoala-arkts/user + - mv arkoala-arkts/user/app/user/build/default/outputs/default/user.har user.har + artifacts: + paths: + - user.har + expire_in: 1 day + unmemoize arkoala-arkts/arkui: allow_failure: true extends: diff --git a/arkoala-arkts/arkui/src/Application.ts b/arkoala-arkts/arkui/src/Application.ts index fb7cf040c2584c4cd67b1b82c5bdc7ea64ccce11..1496d5875781051385bc123118feacf2fab5fd93 100644 --- a/arkoala-arkts/arkui/src/Application.ts +++ b/arkoala-arkts/arkui/src/Application.ts @@ -80,6 +80,7 @@ function createMemoRoot(manager: StateManager, ): ComputableState { const peer = new PeerNode(ArkUINodeType.Root, 0, "Root") rootPointer = peer.peer.ptr + const node = manager.updatableNode(peer, (context: StateContext) => { const frozen = manager.frozen manager.frozen = true @@ -177,12 +178,14 @@ export class Application { this.root = createMemoRoot(this.manager!, builder) } catch (e) { if (e instanceof Error) { - if (e.stack) { - console.log(e.stack) + const stack = e.stack + if (stack) { + NativeModule._NativeLog("ArkTS Application.start stack trace: " + stack) return nullptr } } } + NativeModule._NativeLog("ArkTS Application.start rootPointer = " + rootPointer) return rootPointer! } diff --git a/arkoala-arkts/arkui/src/generated/ComponentBase.ts b/arkoala-arkts/arkui/src/generated/ComponentBase.ts index 7cc9d9ab7d04da054ab4824fa35672f1a8bcd340..b4b07382a4a61dc24fd7cba1901114dba240847f 100644 --- a/arkoala-arkts/arkui/src/generated/ComponentBase.ts +++ b/arkoala-arkts/arkui/src/generated/ComponentBase.ts @@ -14,6 +14,7 @@ */ import { PeerNode } from './PeerNode' +import { NativeModule } from "#components" export class ComponentBase { protected peer?: PeerNode @@ -28,6 +29,6 @@ export class ComponentBase { return true } public applyAttributesFinish(): void { - // throw new Error("not implemented") + NativeModule._ApplyModifierFinish(this.peer!.peer.ptr) } } diff --git a/arkoala-arkts/arkui/src/generated/NativePeerNode.ts b/arkoala-arkts/arkui/src/generated/NativePeerNode.ts index a7736f90b1d3ed8720a0f74a92783c167347f9cb..d5955e1b6dfaf0892f53a05e90ec846105237387 100644 --- a/arkoala-arkts/arkui/src/generated/NativePeerNode.ts +++ b/arkoala-arkts/arkui/src/generated/NativePeerNode.ts @@ -10,7 +10,7 @@ export class NativePeerNode extends Finalizable { } static create(type: ArkUINodeType, id: int32, flags: int32): NativePeerNode { - const ptr = NativeModule._CreateNode(type as int32, id, flags) + const ptr = NativeModule._CreateNode(type.valueOf(), id, flags) return new NativePeerNode(ptr, NativeModule._GetNodeFinalizer()) } diff --git a/arkoala-arkts/arkui/src/generated/PeerNode.ts b/arkoala-arkts/arkui/src/generated/PeerNode.ts index 960ab9b8cd4ec992b73c0b0caa7127d98325e369..9266fb1bb385e026938ea8d3eb0f80f339234f6b 100644 --- a/arkoala-arkts/arkui/src/generated/PeerNode.ts +++ b/arkoala-arkts/arkui/src/generated/PeerNode.ts @@ -3,15 +3,54 @@ import { IncrementalNode } from "@koalaui/runtime" import { ArkUINodeType } from "./peers/ArkUINodeType" import { NativePeerNode } from "./NativePeerNode" +export const PeerNodeType = 11 + export class PeerNode extends IncrementalNode { peer: NativePeerNode private id: int32 = PeerNode.currentId++ + private static peerNodeMap = new Map() + + static findPeerByNativeId(id: number): PeerNode | undefined { + return PeerNode.peerNodeMap.get(id) + } private static currentId: int32 = 1000 constructor(type: ArkUINodeType, flags: int32, name: string) { - super() + super(PeerNodeType) this.peer = NativePeerNode.create(type, this.id, flags) + PeerNode.peerNodeMap.set(this.id, this) + this.onChildInserted = (child: IncrementalNode) => { + // TODO: rework to avoid search + let peer = findPeerNode(child) + if (peer) { + // Find the closest peer node backward. + let sibling: PeerNode | undefined = undefined + for (let node = child.previousSibling; node; node = node!.previousSibling) { + if (node!.isKind(PeerNodeType)) { + sibling = node as PeerNode + break + } + } + this.peer.insertChildAfter(peer.peer, sibling?.peer) + } + } + this.onChildRemoved = (child: IncrementalNode) => { + let peer = findPeerNode(child) + if (peer) { + this.peer.removeChild(peer.peer) + } + } + } applyAttributes(attrs: Object) {} } + +function findPeerNode(node: IncrementalNode): PeerNode | undefined { + if (node.isKind(PeerNodeType)) return node as PeerNode + for (let child = node.firstChild; child; child = child!.nextSibling) { + let peer = findPeerNode(child!) + if (peer) return peer + } + return undefined +} diff --git a/arkoala-arkts/arkui/src/generated/peers/ArkUINodeType.ts b/arkoala-arkts/arkui/src/generated/peers/ArkUINodeType.ts index 6d088054d18955106fd68290ab1cdbd0fd3bb758..9775ab2d556b9b06a832d8ab2639a5a975e76891 100644 --- a/arkoala-arkts/arkui/src/generated/peers/ArkUINodeType.ts +++ b/arkoala-arkts/arkui/src/generated/peers/ArkUINodeType.ts @@ -1,14 +1,14 @@ export enum ArkUINodeType { - Root, + Root = 0, ComponentRoot, CustomNode, BaseSpan, - Blank, + Blank = 8, Button, CalendarPicker, Canvas, Circle, - Column, + Column = 16, Common, CommonMethod, CommonShapeMethod, diff --git a/arkoala-arkts/har/arkoala-har-bundle/loader.js b/arkoala-arkts/har/arkoala-har-bundle/loader.js index 8dcfb9da9b9a34ecb2741f0674798a4c9838cca1..8dcde54f2507ba1fdfe121f06bfee5cd5482267b 100644 --- a/arkoala-arkts/har/arkoala-har-bundle/loader.js +++ b/arkoala-arkts/har/arkoala-har-bundle/loader.js @@ -117,8 +117,10 @@ export function checkLoader(variant) { } let result = nativeModule()._LoadVirtualMachine(vm, classPath, nativePath); if (result == 0) { - rootPointer = nativeModule()._StartApplication(); - setTimeout(async () => runEventLoop(), 0); + rootPointer = nativeModule()._StartApplication("LoaderApp", "ArkTSLoaderParam"); + if (rootPointer != 0) { + setTimeout(async () => runEventLoop(), 0); + } } else { throw new Error(`Cannot start VM: ${result}`); diff --git a/arkoala-arkts/package.json b/arkoala-arkts/package.json index f8205f146efcfc07121df01921b159c0ce73c33e..0c748bc4be94941975a9c63a1dcf82c9df3934a2 100644 --- a/arkoala-arkts/package.json +++ b/arkoala-arkts/package.json @@ -47,7 +47,7 @@ "run:node:ci": "ACE_LIBRARY_PATH=build PANDA_HOME=../incremental/tools/panda/node_modules/@panda/sdk node build/index.js panda 10", "trivial:all:node": "npm run compile:native:node-host && npm run build:arkoala:components && npm run link:arkoala && npm run link:user && npm run build:loader:node && npm run run:node", "trivial:all:node:ci": "npm run compile:native:node-host && npm run build:arkoala:components && npm run link:arkoala && npm run link:user && npm run build:loader:node && npm run run:node:ci", - "trivial:all:har-arm32": "npm run compile:native:hzvm-ohos-arm32 && npm run build:arkoala:components && npm run link:arkoala && npm run link:user && npm run arkoala:har-arm32 --prefix har", + "trivial:all:har-arm32": "npm run compile:native:hzvm-ohos-arm32 && npm run build:arkoala:components && npm run link:arkoala && npm run arkoala:har-arm32 --prefix har", "clean": "rimraf build user/build && npm run clean -ws --if-present", "clean:all": "npm run clean && npm run clean --prefix ../arkoala/framework && npm run all:clean --prefix ../incremental" } diff --git a/arkoala-arkts/user/.gitignore b/arkoala-arkts/user/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..d09915193a4c2d44a34590e5a452d0a32dd93f1c --- /dev/null +++ b/arkoala-arkts/user/.gitignore @@ -0,0 +1,9 @@ +generated +js_output +node_modules +oh_modules +.preview +build +.cxx +.test +command-line-tools diff --git a/arkoala-arkts/user/app/.gitignore b/arkoala-arkts/user/app/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..ad2fbb06ea567bc922064bc7049dc2f92f0310cd --- /dev/null +++ b/arkoala-arkts/user/app/.gitignore @@ -0,0 +1,11 @@ +.hvigor +node_modules +oh_modules +rawfile +libs +generated +test.log +test-images +build* +!build-profile.json5 +ohpm diff --git a/arkoala-arkts/user/app/AppScope/app.json5 b/arkoala-arkts/user/app/AppScope/app.json5 new file mode 100644 index 0000000000000000000000000000000000000000..941642c557e48d22670d316cb45ea92414ac92dd --- /dev/null +++ b/arkoala-arkts/user/app/AppScope/app.json5 @@ -0,0 +1,10 @@ +{ + "app": { + "bundleName": "com.example.user", + "vendor": "example", + "versionCode": 1000000, + "versionName": "1.0.0", + "icon": "$media:app_icon", + "label": "$string:app_name" + } +} diff --git a/arkoala-arkts/user/app/build-profile.json5 b/arkoala-arkts/user/app/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..2ee625f46f9040da1757d80ebc950a886012849b --- /dev/null +++ b/arkoala-arkts/user/app/build-profile.json5 @@ -0,0 +1,28 @@ +{ + "app": { + "signingConfigs": [], + "products": [ + { + "name": "default", + "signingConfig": "default", + "compileSdkVersion": "5.0.0(12)", + "compatibleSdkVersion": "5.0.0(12)", + "runtimeOS": "HarmonyOS", + } + ], + "buildModeSet": [ + { + "name": "debug", + }, + { + "name": "release" + } + ] + }, + "modules": [ + { + "name": "user", + "srcPath": "./user" + } + ] +} \ No newline at end of file diff --git a/arkoala-arkts/user/app/hvigor/hvigor-config.json5 b/arkoala-arkts/user/app/hvigor/hvigor-config.json5 new file mode 100644 index 0000000000000000000000000000000000000000..792dd237449ebb23683ff3c9021626ddaa9d0a23 --- /dev/null +++ b/arkoala-arkts/user/app/hvigor/hvigor-config.json5 @@ -0,0 +1,22 @@ +{ + "modelVersion": "5.0.0", + "dependencies": { + }, + "execution": { + // "analyze": "default", /* Define the build analyze mode. Value: [ "default" | "verbose" | false ]. Default: "default" */ + // "daemon": true, /* Enable daemon compilation. Value: [ true | false ]. Default: true */ + // "incremental": true, /* Enable incremental compilation. Value: [ true | false ]. Default: true */ + // "parallel": true, /* Enable parallel compilation. Value: [ true | false ]. Default: true */ + // "typeCheck": false, /* Enable typeCheck. Value: [ true | false ]. Default: false */ + }, + "logging": { + // "level": "info" /* Define the log level. Value: [ "debug" | "info" | "warn" | "error" ]. Default: "info" */ + }, + "debugging": { + // "stacktrace": false /* Disable stacktrace compilation. Value: [ true | false ]. Default: false */ + }, + "nodeOptions": { + // "maxOldSpaceSize": 4096 /* Enable nodeOptions maxOldSpaceSize compilation. Unit M. Used for the daemon process */ + } +} + diff --git a/arkoala-arkts/user/app/hvigorfile.ts b/arkoala-arkts/user/app/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..f3cb9f1a87a81687554a76283af8df27d8bda775 --- /dev/null +++ b/arkoala-arkts/user/app/hvigorfile.ts @@ -0,0 +1,6 @@ +import { appTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: appTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/arkoala-arkts/user/app/oh-package-lock.json5 b/arkoala-arkts/user/app/oh-package-lock.json5 new file mode 100644 index 0000000000000000000000000000000000000000..eb49e703772294ed405164fa05718169295449a0 --- /dev/null +++ b/arkoala-arkts/user/app/oh-package-lock.json5 @@ -0,0 +1,18 @@ +{ + "lockfileVersion": 1, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@ohos/hamock@1.0.0-rc": "@ohos/hamock@1.0.0-rc", + "@ohos/hypium@1.0.15": "@ohos/hypium@1.0.15" + }, + "packages": { + "@ohos/hamock@1.0.0-rc": { + "resolved": "https://cmc.centralrepo.rnd.huawei.com/artifactory/api/npm/product_npm/@ohos/hamock/-/@ohos/hamock-1.0.0-rc.tgz", + "integrity": "sha512-98k5LGfWtJ98fjYT9ERBNZSBXFCPNBFf98AjAqhrQ2vtAQuB5MZaf890/Yz+HbBVELtFaSU8H+SyEnb+3MYQwg==" + }, + "@ohos/hypium@1.0.15": { + "resolved": "https://cmc.centralrepo.rnd.huawei.com/artifactory/api/npm/product_npm/@ohos/hypium/-/@ohos/hypium-1.0.15.tgz", + "integrity": "sha512-iUXzaa6ygUe208FxKQvv07ef9NxWSiqYnw8ApFGJVLMWzo4qpevweclWINvumQYRDaQzdAgzzWHzYoFm5vGFEA==" + } + } +} \ No newline at end of file diff --git a/arkoala-arkts/user/app/oh-package.json5 b/arkoala-arkts/user/app/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..332c838bbbbb8c7f14b9487b1744f6f0aebbd16a --- /dev/null +++ b/arkoala-arkts/user/app/oh-package.json5 @@ -0,0 +1,13 @@ +{ + "modelVersion": "5.0.0", + "name": "@koalaui/user", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "author": "", + "license": "", + "dependencies": { + }, + "devDependencies": { + } +} diff --git a/arkoala-arkts/user/app/user/BuildProfile.ets b/arkoala-arkts/user/app/user/BuildProfile.ets new file mode 100644 index 0000000000000000000000000000000000000000..3a501e5ddee8ea6d28961648fc7dd314a5304bd4 --- /dev/null +++ b/arkoala-arkts/user/app/user/BuildProfile.ets @@ -0,0 +1,17 @@ +/** + * Use these variables when you tailor your ArkTS code. They must be of the const type. + */ +export const HAR_VERSION = '1.0.0'; +export const BUILD_MODE_NAME = 'debug'; +export const DEBUG = true; +export const TARGET_NAME = 'default'; + +/** + * BuildProfile Class is used only for compatibility purposes. + */ +export default class BuildProfile { + static readonly HAR_VERSION = HAR_VERSION; + static readonly BUILD_MODE_NAME = BUILD_MODE_NAME; + static readonly DEBUG = DEBUG; + static readonly TARGET_NAME = TARGET_NAME; +} \ No newline at end of file diff --git a/arkoala-arkts/user/app/user/build-profile.json5 b/arkoala-arkts/user/app/user/build-profile.json5 new file mode 100644 index 0000000000000000000000000000000000000000..312d38eb08629793b3484c7373213f22840c8d82 --- /dev/null +++ b/arkoala-arkts/user/app/user/build-profile.json5 @@ -0,0 +1,28 @@ +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": true, + "files": [ + "./obfuscation-rules.txt" + ] + }, + "consumerFiles": [ + "./consumer-rules.txt" + ] + } + }, + }, + ], + "targets": [ + { + "name": "default" + } + ] +} diff --git a/arkoala-arkts/user/app/user/consumer-rules.txt b/arkoala-arkts/user/app/user/consumer-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/arkoala-arkts/user/app/user/hvigorfile.ts b/arkoala-arkts/user/app/user/hvigorfile.ts new file mode 100644 index 0000000000000000000000000000000000000000..42187071482d292588ad40babeda74f7b8d97a23 --- /dev/null +++ b/arkoala-arkts/user/app/user/hvigorfile.ts @@ -0,0 +1,6 @@ +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/arkoala-arkts/user/app/user/obfuscation-rules.txt b/arkoala-arkts/user/app/user/obfuscation-rules.txt new file mode 100644 index 0000000000000000000000000000000000000000..985b2aeb7658286b17bd26eab8f217c3fe75ea8b --- /dev/null +++ b/arkoala-arkts/user/app/user/obfuscation-rules.txt @@ -0,0 +1,18 @@ +# Define project specific obfuscation rules here. +# You can include the obfuscation configuration files in the current module's build-profile.json5. +# +# For more details, see +# https://gitee.com/openharmony/arkcompiler_ets_frontend/blob/master/arkguard/README.md + +# Obfuscation options: +# -disable-obfuscation: disable all obfuscations +# -enable-property-obfuscation: obfuscate the property names +# -enable-toplevel-obfuscation: obfuscate the names in the global scope +# -compact: remove unnecessary blank spaces and all line feeds +# -remove-log: remove all console.* statements +# -print-namecache: print the name cache that contains the mapping from the old names to new names +# -apply-namecache: reuse the given cache file + +# Keep options: +# -keep-property-name: specifies property names that you want to keep +# -keep-global-name: specifies names that you want to keep in the global scope \ No newline at end of file diff --git a/arkoala-arkts/user/app/user/oh-package.json5 b/arkoala-arkts/user/app/user/oh-package.json5 new file mode 100644 index 0000000000000000000000000000000000000000..d2aec4670d801c545bcbcb564155632112f7e070 --- /dev/null +++ b/arkoala-arkts/user/app/user/oh-package.json5 @@ -0,0 +1,10 @@ +{ + "name": "@koalaui/user", + "version": "1.0.0", + "description": "Please describe the basic information.", + "main": "", + "types": "", + "author": "", + "license": "Apache-2.0", + "dependencies": {} +} diff --git a/arkoala-arkts/user/app/user/src/main/module.json5 b/arkoala-arkts/user/app/user/src/main/module.json5 new file mode 100644 index 0000000000000000000000000000000000000000..6b0ad6685ad208707f810b65f66cbd88ff98e833 --- /dev/null +++ b/arkoala-arkts/user/app/user/src/main/module.json5 @@ -0,0 +1,11 @@ +{ + "module": { + "name": "user", + "type": "har", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ] + } +} diff --git a/arkoala-arkts/user/package.json b/arkoala-arkts/user/package.json index c6f0cb55ab086113db269359e400c6ef28118c40..5431c500ebce7755d774e1d65c71da484a29e0a4 100644 --- a/arkoala-arkts/user/package.json +++ b/arkoala-arkts/user/package.json @@ -3,7 +3,7 @@ "version": "1.4.1", "description": "", "scripts": { - "clean": "rimraf build generated unmemoized js_output abc lib", + "clean": "rimraf build generated unmemoized js_output abc lib ", "compile:plugin": "cd ../../arkoala/ets-plugin && npm run compile", "compile:ets": "npm run compile:plugin && cd src/ets && ets-tsc -p ./etsconfig.json", "unmemoize": "npm run compile:ets && memo-tsc -b tsconfig-unmemoize.json", @@ -11,6 +11,18 @@ "compile:arkts:unmemoized": "npm run unmemoize && npm run unmemoize --prefix ../arkui && npm run compile:unmemoize --prefix ../../incremental/runtime && bash -x ../../incremental/tools/panda/arkts/arktsc --arktsconfig ./arktsconfig-run-unmemoized.json --ets-module", "compile:ts": "memo-tsc -b ./tsconfig.json", "compile:user": "npm run compile:arkts:unmemoized", - "link:user": "npm run compile:user && bash ../../incremental/tools/panda/arkts/arklink --output build/user.abc -- $(find build/abc -name '*.abc' ! -name 'index.abc')" + "link:user": "npm run compile:user && bash ../../incremental/tools/panda/arkts/arklink --output build/user.abc -- $(find build/abc -name '*.abc' ! -name 'index.abc')", + + "bundle": "node scripts/build-user-har.mjs --arch arm", + "build": "npm run cli-tools:check && cd app && DEVECO_SDK_HOME=../../../arkoala/ohos-sdk/ohos-sdk ../command-line-tools/hvigor/bin/hvigorw --no-daemon --mode module -p product=default -p module=user@default assembleHar", + "user:har": "npm run link:user && npm run --prefix ../../arkoala/ohos-sdk download && npm run bundle && npm run build", + "user:har-arm32": "npm run user:har", + + "cli-tools:chmod:bz": "node ../../arkoala/ohos-sdk/scripts/openlab-cli.mjs chmod -p ./command-line-tools/ohpm/bin -b 755 && node ../../arkoala/ohos-sdk/scripts/openlab-cli.mjs chmod -p ./command-line-tools/hvigor/bin -b 755", + "cli-tools:chmod:yz": "node ../../../sdk/scripts/gitlab/gitlab-cli.mjs chmod -p ./command-line-tools/ohpm/bin -b 755 && node ../../../sdk/scripts/gitlab/gitlab-cli.mjs chmod -p ./command-line-tools/hvigor/bin -b 755", + "cli-tools:download:bz": "node ../../arkoala/ohos-sdk/scripts/openlab-cli.mjs download -p command-line-tools -v 5.0.3502 -f command-line-tools.5.0.3502.zip -d command-line-tools && npm run cli-tools:chmod:bz", + "cli-tools:download:yz": "node ../../../sdk/scripts/gitlab/gitlab-cli.mjs download -p deveco-tools -v 5.0.1300 -f deveco-tools.5.0.1300.zip -d command-line-tools && npm run cli-tools:chmod:yz", + "cli-tools:download": "test \"$KOALA_BZ\" = \"0\" && npm run cli-tools:download:yz || npm run cli-tools:download:bz", + "cli-tools:check": "test -d ./command-line-tools || npm run cli-tools:download" } } diff --git a/arkoala-arkts/user/scripts/build-user-har.mjs b/arkoala-arkts/user/scripts/build-user-har.mjs new file mode 100644 index 0000000000000000000000000000000000000000..54d293afbb87b6660657d258e8188a0bd0acffa5 --- /dev/null +++ b/arkoala-arkts/user/scripts/build-user-har.mjs @@ -0,0 +1,46 @@ +import { execSync } from "child_process" +import { dirname } from "path" +import { fileURLToPath } from "url" + +import fs from "fs" +import path from "path" +import process from "process" +import minimist from "minimist" + +var args = minimist(process.argv.slice(2)) + +const _dirname = dirname(fileURLToPath(import.meta.url)) + +const CWD = process.cwd() +// const BUNDLE_PATH = path.join(CWD, "arkoala-har-bundle") +const HAR_PATH = path.join(CWD, "app/user") + +function rollupLaunch() { + console.log(`> Run rollup`) + execCmdSync("npx rollup -c") +} + +function copyFilesToHar(from, to) { + if (!fs.existsSync(from)) { + throw new Error(`file ${from} does not exist`) + } + + console.log(`> Copy from: ${from} to ${to}`) + fs.cpSync(from, to, { recursive: true, force: true }) +} + + +function main() { + + // process.chdir(BUNDLE_PATH) + + // rollupLaunch() + /* we don't yet know which files should be in har */ + copyFilesToHar(path.join(_dirname, `../build/user.abc`), path.join(HAR_PATH, `libs/armeabi-v7a/user.abc.so`)) +} + +main() + +function execCmdSync(cmd, options) { + return execSync(cmd, options).toString().trim().replace("\n", " ") +} diff --git a/arkoala-arkts/user/src/Page.ts b/arkoala-arkts/user/src/Page.ts index 72f36be0492d1f2367dbd0c02d37cbbc8e9458fd..94af68b9259a6f054cbd487fd74b67b95fb7947a 100644 --- a/arkoala-arkts/user/src/Page.ts +++ b/arkoala-arkts/user/src/Page.ts @@ -5,40 +5,36 @@ import { int32 } from "@koalaui/common" import { Hello } from "../generated/hello" -/** @memo */ -export function Page(p1: StateContext, p2: int32, root: PeerNode) { - UserView.startNativeLog(1) +// /** @memo */ +export function Page(root: PeerNode) { + // UserView.startNativeLog(1) - const rPeer = root.peer - const rPtr = root.peer.ptr + // const componentRoot = new PeerNode(ArkUINodeType.ComponentRoot, 0, "ComponentRoot") + // const column = ArkColumnPeer.create(ArkUINodeType.Column) - const componentRoot = new PeerNode(ArkUINodeType.ComponentRoot, 0, "ComponentRoot") - const column = ArkColumnPeer.create(ArkUINodeType.Column) + // // column.widthAttribute(300) + // // column.heightAttribute(300) - column.widthAttribute(300) - // column.heightAttribute(300) + // const button = ArkButtonPeer.create(ArkUINodeType.Button) - const button = ArkButtonPeer.create(ArkUINodeType.Button) + // // button.widthAttribute("250px") + // // button.heightAttribute("250px") - button.widthAttribute("250px") - // button.heightAttribute("250px") + // root.peer.insertChildAfter(componentRoot.peer, undefined) + // componentRoot.peer.insertChildAfter(column.peer, undefined) + // column.peer.insertChildAfter(button.peer, undefined) - root.peer.addChild(componentRoot.peer) - componentRoot.peer.addChild(column.peer) - column.peer.addChild(button.peer) + // // root.peer.dumpTree() - root.peer.dumpTree() + // nativeModule()._MeasureLayoutAndDraw(root.peer.ptr) - nativeModule()._MeasureLayoutAndDraw(root.peer.ptr) + // nativeModule()._ApplyModifierFinish(root.peer.ptr) + // nativeModule()._ApplyModifierFinish(componentRoot.peer.ptr) + // nativeModule()._ApplyModifierFinish(column.peer.ptr) + // nativeModule()._ApplyModifierFinish(button.peer.ptr) - //nativeModule()._ApplyModifierFinish(root.peer.prt) - nativeModule()._ApplyModifierFinish(rPtr) - nativeModule()._ApplyModifierFinish(componentRoot.peer.ptr) - nativeModule()._ApplyModifierFinish(column.peer.ptr) - nativeModule()._ApplyModifierFinish(button.peer.ptr) - - UserView.stopNativeLog(1) - console.log(UserView.getNativeLog(1)) + // UserView.stopNativeLog(1) + // console.log(UserView.getNativeLog(1)) } export class App extends UserView { diff --git a/arkoala-arkts/user/src/ets/hello.ets b/arkoala-arkts/user/src/ets/hello.ets index 881ad5e85ca7561a45e763cd2f32074a2c57d579..df90c0818608a3dc768fb85d4c199339eeb191f9 100644 --- a/arkoala-arkts/user/src/ets/hello.ets +++ b/arkoala-arkts/user/src/ets/hello.ets @@ -4,7 +4,8 @@ struct Hello { build() { Column() { Button() - .width(50) + .width(200) + .height(100) console.log("Yay!") } } diff --git a/arkoala/framework/native/meson.build b/arkoala/framework/native/meson.build index b1738233dcf5488b7d6c5ad6815a6a5682754bfe..66e32189ed1a6a606a38d2191113eea4d3ed95de 100644 --- a/arkoala/framework/native/meson.build +++ b/arkoala/framework/native/meson.build @@ -275,6 +275,11 @@ if get_option('vmloader') == true vmloader_cflags = ['-DKOALA_' + os.to_upper(), '-DKOALA_' + os.to_upper() + '_' + arch.to_upper()] vmloader_ldflags = [] +if is_ohos + vmloader_ldflags += [ + '-lhilog_ndk.z' + ] +endif if is_ohos vmloader_ldflags = ['-lhilog_ndk.z'] diff --git a/arkoala/framework/native/src/generated/bridge_custom.cc b/arkoala/framework/native/src/generated/bridge_custom.cc index 68c70cac781cd9131c0d37ae2abd61fe0079d8e1..e439283348e6873867dd30d9a89bbf69b3284dd9 100644 --- a/arkoala/framework/native/src/generated/bridge_custom.cc +++ b/arkoala/framework/native/src/generated/bridge_custom.cc @@ -523,7 +523,7 @@ KVMObjectHandle impl_LoadUserView(KVMContext vm, const KStringPtr& viewClass, co std::replace(className.begin(), className.end(), '.', '/'); ets_class viewClassClass = env->FindClass(className.c_str()); if (!viewClassClass) { - fprintf(stderr, "Cannot find user class %s\n", viewClass.c_str()); + LOGI("##### Cannot find user class %" LOG_PUBLIC "s", viewClass.c_str()); if (env->ErrorCheck()) { env->ErrorDescribe(); env->ErrorClear(); @@ -532,7 +532,7 @@ KVMObjectHandle impl_LoadUserView(KVMContext vm, const KStringPtr& viewClass, co } ets_method viewClassCtor = env->Getp_method(viewClassClass, "", "Lstd/core/String;:V"); if (!viewClassCtor) { - fprintf(stderr, "Cannot find user class ctor\n"); + LOG("##### Cannot find user class ctor"); if (env->ErrorCheck()) { env->ErrorDescribe(); env->ErrorClear(); @@ -541,7 +541,7 @@ KVMObjectHandle impl_LoadUserView(KVMContext vm, const KStringPtr& viewClass, co } ets_object result = env->NewObject(viewClassClass, viewClassCtor, env->NewStringUTF(viewParams.c_str())); if (!result) { - fprintf(stderr, "Cannot instantiate user class\n"); + LOG("##### Cannot instantiate user class"); if (env->ErrorCheck()) { env->ErrorDescribe(); env->ErrorClear(); @@ -550,7 +550,7 @@ KVMObjectHandle impl_LoadUserView(KVMContext vm, const KStringPtr& viewClass, co } return (KVMObjectHandle)result; #else - fprintf(stderr, "LoadUserView() is not implemented yet\n"); + LOG("LoadUserView() is not implemented yet"); return nullptr; #endif } diff --git a/arkoala/tools/peer-generator/.gitlab-ci.yml b/arkoala/tools/peer-generator/.gitlab-ci.yml index 59e3fc6f15596324e970be488fffb31921e2e2cb..aee1535fb7744a505e30eb8dedf4aad6377b2b6c 100644 --- a/arkoala/tools/peer-generator/.gitlab-ci.yml +++ b/arkoala/tools/peer-generator/.gitlab-ci.yml @@ -188,7 +188,7 @@ before_script: - !reference [.setup, script] script: - - npm run compile:native-hzvm-ohos-arm32 --prefix arkoala/framework + - npm run compile:native-panda-with-hzvm-ohos-arm32 --prefix arkoala/framework artifacts: paths: - arkoala/framework/native/build-hzvm-ohos-arm32-vmloader/libArkoalaLoader.so diff --git a/incremental/compat/arktsconfig.json b/incremental/compat/arktsconfig.json index d945e6dd2e739a34e9227b38aaa1ad7dd5c9fd08..d4cee4cd35d36fc3ea847a69c1060ad7da7dbf3f 100644 --- a/incremental/compat/arktsconfig.json +++ b/incremental/compat/arktsconfig.json @@ -6,6 +6,6 @@ "#platform": ["./src/arkts"] } }, - "include": ["src/index.ts", "src/arkts/**/*"], - "exclude": ["src/arkts/index.ts"] + "include": ["src/arkts/**/*"], + "exclude": ["src/index.ts", "src/arkts/index.ts"] } diff --git a/incremental/tools/panda/package.json b/incremental/tools/panda/package.json index 8994900d2e10092688edd27938a4617a82538334..6790a996a47eec56204af3466a49a169a0b6144e 100644 --- a/incremental/tools/panda/package.json +++ b/incremental/tools/panda/package.json @@ -5,5 +5,8 @@ "panda:sdk:install": "npm install --prefix . --no-save @panda/sdk@${PANDA_SDK_VERSION:-next}", "panda:sdk:clean": "rimraf ./node_modules", "panda:sdk:build": "node ./build_panda_sdk.mjs --panda-sdk-dir=./node_modules/@panda/sdk/ --arkcompiler-build-dir=$HOME/arkcompiler --runtime-git-rev=a6704b6a --frontend-git-rev=c2166bf1 --frontend-git-patches=./fix_es2panda_1.patch:./fix_normalizing_source_paths.patch" + }, + "dependencies": { + "@panda/sdk": "^1.5.0-dev.5226" } } diff --git a/interop/src/cpp/interop-logging.h b/interop/src/cpp/interop-logging.h index 74e870249908604d34c45b6716f58c3487add6aa..304cbcbf32256cff64698785d3ddfdbf2fa47784 100644 --- a/interop/src/cpp/interop-logging.h +++ b/interop/src/cpp/interop-logging.h @@ -18,16 +18,18 @@ #include #include -#if (defined(KOALA_USE_HZ_VM) || defined(KOALA_USE_PANDA_VM)) && defined(KOALA_OHOS) +#if defined(KOALA_ETS_NAPI) && defined(KOALA_OHOS) #include "oh_sk_log.h" #define LOG(msg) OH_SK_LOG_INFO(msg); #define LOGI(msg, ...) OH_SK_LOG_INFO_A(msg, ##__VA_ARGS__); #define LOGE(msg, ...) OH_SK_LOG_ERROR_A(msg, ##__VA_ARGS__); +#define LOGE0(msg) OH_SK_LOG_ERROR(msg); #define LOG_PUBLIC "{public}" #else #define LOG(msg) fprintf(stdout, msg "\n"); #define LOGI(msg, ...) fprintf(stdout, msg "\n", ##__VA_ARGS__); #define LOGE(msg, ...) fprintf(stderr, msg "\n", ##__VA_ARGS__); +#define LOGE0(msg) fprintf(stderr, msg "\n"); #define LOG_PUBLIC "" #endif diff --git a/interop/src/cpp/vmloader.cc b/interop/src/cpp/vmloader.cc index 2224b378dd047869975458fb1d3d473aec81f753..5d407d112861b6222c948452933836e38a7d20d5 100644 --- a/interop/src/cpp/vmloader.cc +++ b/interop/src/cpp/vmloader.cc @@ -151,11 +151,11 @@ extern "C" DLL_EXPORT KInt LoadVirtualMachine(KInt vmKind, const char* appClassP nullptr; if (!thisVM) { - LOGE("Unknown VM kind: %" LOG_PUBLIC "d\n (possibly %" LOG_PUBLIC "s is compiled without expected flags)\n", vmKind, __FILE__); + LOGE("Unknown VM kind: %" LOG_PUBLIC "d\n (possibly %" LOG_PUBLIC "s is compiled without expected flags)", vmKind, __FILE__); return -1; } - LOGI("Starting VM " LOG_PUBLIC "%d with classpath=%" LOG_PUBLIC "s native=%" LOG_PUBLIC "s\n", vmKind, appClassPath, appLibPath); + LOGI("Starting VM %" LOG_PUBLIC "d with classpath=%" LOG_PUBLIC "s native=%" LOG_PUBLIC "s", vmKind, appClassPath, appLibPath); std::string libPath = #if defined(KOALA_LINUX) || defined(KOALA_MACOS) || defined(KOALA_WINDOWS) @@ -287,7 +287,7 @@ extern "C" DLL_EXPORT KNativePointer StartApplication(const char* appUrl, const return nullptr; } - LOGI("Starting app \"%" LOG_PUBLIC "s\" with params \"%" LOG_PUBLIC "s\"\n", appUrl, appParams); + LOGI("#### Starting app %" LOG_PUBLIC "s with params %" LOG_PUBLIC "s", appUrl, appParams); #ifdef KOALA_JNI if (g_vmEntry.vmKind == JAVA_VM_KIND) { @@ -323,12 +323,12 @@ extern "C" DLL_EXPORT KNativePointer StartApplication(const char* appUrl, const EtsEnv* etsEnv = (EtsEnv*)g_vmEntry.env; ets_class appClass = etsEnv->FindClass(appInfo->className); if (!appClass) { - LOGE("Cannot load main class %" LOG_PUBLIC "s\n", appInfo->className); + LOGE("#### Cannot load main class %" LOG_PUBLIC "s\n", appInfo->className); return nullptr; } ets_method create = etsEnv->GetStaticp_method(appClass, appInfo->createMethodName, appInfo->createMethodSig); if (!create) { - LOGE("Cannot find create method %" LOG_PUBLIC "s\n", appInfo->createMethodName); + LOGE("#### Cannot find create method %" LOG_PUBLIC "s\n", appInfo->createMethodName); if (etsEnv->ErrorCheck()) { etsEnv->ErrorDescribe(); etsEnv->ErrorClear(); @@ -337,7 +337,7 @@ extern "C" DLL_EXPORT KNativePointer StartApplication(const char* appUrl, const } auto app = etsEnv->NewGlobalRef(etsEnv->CallStaticObjectMethod(appClass, create, etsEnv->NewStringUTF(appUrl), etsEnv->NewStringUTF(appParams))); if (!app) { - LOGE("createApplication returned null\n"); + LOGE0("#### createApplication returned null"); if (etsEnv->ErrorCheck()) { etsEnv->ErrorDescribe(); etsEnv->ErrorClear(); @@ -348,7 +348,7 @@ extern "C" DLL_EXPORT KNativePointer StartApplication(const char* appUrl, const auto start = etsEnv->Getp_method(appClass, appInfo->startMethodName, appInfo->startMethodSig); g_vmEntry.enter = (void*)(etsEnv->Getp_method(appClass, appInfo->enterMethodName, nullptr /*appInfo->enterMethodSig */)); if (!g_vmEntry.enter) { - LOGE("Cannot find enter method %" LOG_PUBLIC "s\n", appInfo->enterMethodName); + LOGE("#### Cannot find enter method %" LOG_PUBLIC "s", appInfo->enterMethodName); if (etsEnv->ErrorCheck()) { etsEnv->ErrorDescribe(); etsEnv->ErrorClear(); @@ -383,7 +383,7 @@ extern "C" DLL_EXPORT KBoolean RunApplication(const KInt arg0, const KInt arg1) if (g_vmEntry.vmKind == PANDA_VM_KIND) { EtsEnv* etsEnv = (EtsEnv*)(g_vmEntry.env); if (!g_vmEntry.enter) { - LOGE("Cannot find enter method\n"); + LOG("#### Cannot find enter method"); return -1; } auto result = etsEnv->CallBooleanMethod( @@ -395,7 +395,7 @@ extern "C" DLL_EXPORT KBoolean RunApplication(const KInt arg0, const KInt arg1) if (result) { } if (etsEnv->ErrorCheck()) { - LOGE("Calling enter() method gave an error"); + LOG("#### Calling enter() method gave an error"); etsEnv->ErrorDescribe(); etsEnv->ErrorClear(); }