From 6ef801714ff1c89d055411778d943b4ed9099d24 Mon Sep 17 00:00:00 2001 From: majie77 Date: Fri, 15 Aug 2025 15:49:45 +0800 Subject: [PATCH] Collect entry files of startup and router Issue:https://gitee.com/openharmony/developtools_ace_ets2bundle/issues/ICX735 Signed-off-by: majie77 Change-Id: If3b146413d9ede86d3dfef911a857070f237de8c --- compiler/main.js | 33 +++++++++++++++++++ compiler/test/ark_compiler_ut/main.test.ts | 14 +++++++- .../collectEntryFile/ark_module.json | 5 +++ .../collectEntryFile/startupConfig.json | 14 ++++++++ 4 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 compiler/test/ark_compiler_ut/testdata/obfuscation/collectEntryFile/ark_module.json create mode 100644 compiler/test/ark_compiler_ut/testdata/obfuscation/collectEntryFile/startupConfig.json diff --git a/compiler/main.js b/compiler/main.js index c1e72c927..82ca0cbae 100644 --- a/compiler/main.js +++ b/compiler/main.js @@ -155,6 +155,7 @@ function loadEntryObj(projectConfig) { setFaTestRunnerFile(projectConfig); } if (process.env.aceModuleJsonPath) { + setStartupPagesForObf(projectConfig); setIntentEntryPages(projectConfig); setAbilityPages(projectConfig); setStageTestRunnerFile(projectConfig); @@ -206,11 +207,42 @@ function loadEntryObj(projectConfig) { } } +function readJsonFile(filePath) { + try { + if (filePath && fs.existsSync(filePath)) { + return JSON.parse(fs.readFileSync(filePath).toString()); + } + } catch (e) { + throw Error('\x1B[31m' + `BUIDERROR: the ${filePath} file format is invalid.` + + '\x1B[39m').message; + } + return null; +} + +function setStartupPagesForObf(projectConfig) { + const moduleJson = readJsonFile(projectConfig.aceModuleJsonPath); + if (moduleJson && moduleJson.module && moduleJson.module.appStartup) { + const startupFileName = `${moduleJson.module.appStartup.replace(/\$profile\:/, '')}.json`; + const startupFilePath = path.resolve(projectConfig.aceProfilePath, startupFileName); + const startupConfig = readJsonFile(startupFilePath); + if (!startupConfig) { + return; + } + setEntryArrayForObf(startupConfig.configEntry); + startupConfig.startupTasks.forEach(task => { + if (task.srcEntry) { + setEntryArrayForObf(task.srcEntry); + } + }); + } +} + function loadNavigationConfig(aceBuildJson) { if (aceBuildJson && aceBuildJson.routerMap && Array.isArray(aceBuildJson.routerMap)) { aceBuildJson.routerMap.forEach((item) => { if (item.pageSourceFile && (item.name || item.name === '') && item.buildFunction) { const filePath = path.resolve(item.pageSourceFile); + setEntryArrayForObf(filePath); const storedFileInfo = getStoredFileInfo(); if (storedFileInfo.routerInfo.has(filePath)) { storedFileInfo.routerInfo.get(filePath).push({name: item.name, buildFunction: item.buildFunction}); @@ -1186,3 +1218,4 @@ exports.resetGlobalProgram = resetGlobalProgram; exports.setEntryArrayForObf = setEntryArrayForObf; exports.getPackageJsonEntryPath = getPackageJsonEntryPath; exports.setIntentEntryPages = setIntentEntryPages; +exports.setStartupPagesForObf = setStartupPagesForObf; diff --git a/compiler/test/ark_compiler_ut/main.test.ts b/compiler/test/ark_compiler_ut/main.test.ts index 4c753981a..2ebe19a91 100644 --- a/compiler/test/ark_compiler_ut/main.test.ts +++ b/compiler/test/ark_compiler_ut/main.test.ts @@ -16,8 +16,9 @@ import mocha from 'mocha'; import fs from 'fs'; import { expect } from 'chai'; +import path from "path"; -import { setEntryArrayForObf, projectConfig } from '../../main'; +import { setEntryArrayForObf, projectConfig, setStartupPagesForObf } from '../../main'; mocha.describe('test main file api', function () { mocha.it('1-1: test setEntryArrayForObf', function () { @@ -36,4 +37,15 @@ mocha.describe('test main file api', function () { expect(projectConfig.entryArrayForObf[2]).to.equal('index'); expect(projectConfig.entryArrayForObf[3]).to.equal(''); }); + + mocha.it('1-2: test setStartupPagesForObf', function () { + projectConfig.aceModuleJsonPath = path.join(__dirname, '../../test/ark_compiler_ut/testdata/obfuscation/collectEntryFile/ark_module.json'); + projectConfig.aceProfilePath = path.join(__dirname, '../../test/ark_compiler_ut/testdata/obfuscation/collectEntryFile'); + projectConfig.entryArrayForObf = []; + setStartupPagesForObf(projectConfig); + expect(projectConfig.entryArrayForObf[0]).to.equal('pages/mainPage'); + expect(projectConfig.entryArrayForObf[1]).to.equal('pages/test0'); + expect(projectConfig.entryArrayForObf[2]).to.equal('pages/test1'); + expect(projectConfig.entryArrayForObf[3]).to.equal('pages/test2'); + }); }); \ No newline at end of file diff --git a/compiler/test/ark_compiler_ut/testdata/obfuscation/collectEntryFile/ark_module.json b/compiler/test/ark_compiler_ut/testdata/obfuscation/collectEntryFile/ark_module.json new file mode 100644 index 000000000..d372cddb1 --- /dev/null +++ b/compiler/test/ark_compiler_ut/testdata/obfuscation/collectEntryFile/ark_module.json @@ -0,0 +1,5 @@ +{ + "module": { + "appStartup": "$profile:startupConfig" + } +} \ No newline at end of file diff --git a/compiler/test/ark_compiler_ut/testdata/obfuscation/collectEntryFile/startupConfig.json b/compiler/test/ark_compiler_ut/testdata/obfuscation/collectEntryFile/startupConfig.json new file mode 100644 index 000000000..6307c3aaf --- /dev/null +++ b/compiler/test/ark_compiler_ut/testdata/obfuscation/collectEntryFile/startupConfig.json @@ -0,0 +1,14 @@ +{ + "startupTasks": [ + { + "srcEntry": "pages/test0" + }, + { + "srcEntry": "pages/test1" + }, + { + "srcEntry": "pages/test2" + } + ], + "configEntry": "pages/mainPage" +} \ No newline at end of file -- Gitee