14 Commits
1.0.4 ... 1.0.5

21 changed files with 185 additions and 246 deletions

3
.idea/.gitignore generated vendored
View File

@@ -1,8 +1,9 @@
# Default ignored files
/shelf/
/workspace.xml
/misc.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
/dataSources.local.xml

BIN
.idea/icon.png generated Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

7
.idea/misc.xml generated
View File

@@ -1,7 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="FLOW" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="liberica-11" project-jdk-type="JavaSDK" />
</project>

View File

@@ -1,37 +1,42 @@
# YukiHookAPI Project Builder
![Blank](https://img.shields.io/badge/license-AGPL3.0-blue)
![Blank](https://img.shields.io/badge/version-v1.0.4-green)
[![Telegram](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/YukiHookAPI)
<br/><br/>
<img src="https://github.com/fankes/YuKiHookAPI/blob/master/img-src/icon.png?raw=true" width = "100" height = "100"/>
<br/>
<br/>
帮助你快速创建一个使用 YukiHookAPI 打造的 Xposed 项目模板。
<br/>
[![GitHub license](https://img.shields.io/github/license/HighCapable/YukiHookAPI-ProjectBuilder?color=blue)](https://github.com/HighCapable/YukiHookAPI-ProjectBuilder/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/v/release/HighCapable/YukiHookAPI-ProjectBuilder?display_name=release&logo=github&color=green)](https://github.com/HighCapable/YukiHookAPI-ProjectBuilder/releases)
[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram)](https://t.me/YukiHookAPI)
[![Telegram](https://img.shields.io/badge/discussion%20dev-Telegram-blue.svg?logo=telegram)](https://t.me/HighCapable_Dev)
[English](https://github.com/fankes/YukiHookAPI-ProjectBuilder/blob/master/README.md) | 简体中文
<img src="https://github.com/HighCapable/YuKiHookAPI/blob/master/img-src/icon.png?raw=true" width = "100" height = "100" alt="LOGO"/>
帮助你快速创建一个使用 YukiHookAPI 打造的 Xposed 项目模板。
[English](https://github.com/HighCapable/YukiHookAPI-ProjectBuilder/blob/master/README.md) | 简体中文
## 项目迁移公告
这个项目最终的目的就是创建一个新的 Android Studio/IDEA 项目模版,然后再在对应的 IDE 中打开项目。
这种方式不是很优雅,而且需要在用户的电脑上安装这个软件,后期我准备将这个项目合并到 IDEA 插件中,集成到新项目模版功能里。
这样一来,使用 IDEA 安装插件即可实现直接使用此模版创建项目的功能,而且更加灵活和具有可拓展性。
在新的项目确定后,会在这里添加新项目的链接,届时我会终止维护这个项目并建议大家转移到新项目。
## 这是什么
- 这是一个使用 [YukiHookAPI](https://github.com/fankes/YukiHookAPI) 作为核心的 Xposed 模块自动构建工具
这是一个使用 [YukiHookAPI](https://github.com/HighCapable/YuKiHookAPI) 作为核心的 Xposed 模块自动构建工具
- 实现自动化搜索依赖快速搭建一个包含 Xposed 模块环境的 Android 项目模板
实现自动化搜索依赖快速搭建一个包含 Xposed 模块环境的 Android 项目模板
## 如何使用
- 本项目使用 **Electron** 开发,快速实现多平台本地化应用程序的构建和运行
本项目使用 **Electron** 开发,快速实现多平台本地化应用程序的构建和运行
你可以直接从 [Release](https://github.com/fankes/YukiHookAPI-ProjectBuilder/releases) 下载适合于你平台的应用程序。
你可以直接从 [Release](https://github.com/HighCapable/YukiHookAPI-ProjectBuilder/releases) 下载适合于你平台的应用程序。
**以下是手动部署与编译步骤**
> 以下是手动部署与编译步骤
首先你需要安装 [node.js](https://nodejs.org/zh-cn/)
IDE 工具建议使用 **IntelliJ IDEA****WebStorm**
不建议使用 **Visual Studio Code** 对代码进行格式化,可能会造成一些错误。
- 执行如下命令安装 Electron
```
@@ -74,6 +79,16 @@ npm run make
npm run package
```
## 捐赠支持
工作不易,无意外情况此项目将继续维护下去,提供更多可能,欢迎打赏。
<img src="https://github.com/fankes/fankes/blob/main/img-src/payment_code.jpg?raw=true" width = "500" alt="Payment Code"/>
## Star History
![Star History Chart](https://api.star-history.com/svg?repos=HighCapable/YukiHookAPI-ProjectBuilder&type=Date)
## 许可证
- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html)

View File

@@ -1,51 +1,64 @@
# YukiHookAPI Project Builder
![Blank](https://img.shields.io/badge/license-AGPL3.0-blue)
![Blank](https://img.shields.io/badge/version-v1.0.4-green)
[![Telegram](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/YukiHookAPI)
<br/><br/>
<img src="https://github.com/fankes/YuKiHookAPI/blob/master/img-src/icon.png?raw=true" width = "100" height = "100"/>
<br/>
<br/>
A Xposed Project Builder by YukiHookAPI.
<br/>
[![GitHub license](https://img.shields.io/github/license/HighCapable/YukiHookAPI-ProjectBuilder?color=blue)](https://github.com/HighCapable/YukiHookAPI-ProjectBuilder/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/v/release/HighCapable/YukiHookAPI-ProjectBuilder?display_name=release&logo=github&color=green)](https://github.com/HighCapable/YukiHookAPI-ProjectBuilder/releases)
[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram)](https://t.me/YukiHookAPI)
[![Telegram](https://img.shields.io/badge/discussion%20dev-Telegram-blue.svg?logo=telegram)](https://t.me/HighCapable_Dev)
English | [简体中文](https://github.com/fankes/YukiHookAPI-ProjectBuilder/blob/master/README-zh-CN.md)
<img src="https://github.com/HighCapable/YuKiHookAPI/blob/master/img-src/icon.png?raw=true" width = "100" height = "100" alt="LOGO"/>
A Xposed Project Builder by YukiHookAPI.
English | [简体中文](https://github.com/HighCapable/YukiHookAPI-ProjectBuilder/blob/master/README-zh-CN.md)
## Project Migration Notice
The ultimate goal of this project is to create a new Android Studio/IDEA project template, and then open the project in the corresponding IDE.
This method is not very elegant and requires the software to be installed on the user's computer.
Later, I plan to merge this project into the IDEA plugin and integrate it into the new project template function.
In this way, you can use IDEA to install the plugin to create projects directly using this template, and it is more flexible and scalable.
After the new project is determined, a link to the new project will be added here.
At that time, I will terminate the maintenance of this project and recommend that everyone move to the new project.
## What's this
- This is an automatic building tool for Xposed modules using [YukiHookAPI](https://github.com/fankes/YukiHookAPI) as the core
This is an automatic building tool for Xposed Modules using [YukiHookAPI](https://github.com/HighCapable/YuKiHookAPI) as the core.
- Implementing automated search relies on quickly building an Android project template that includes a Xposed module environment
Implementing automated search relies on quickly building an Android project template that includes a Xposed Module environment.
## How to use
- This project is developed using **Electron** to quickly build and run multi-platform localized applications
This project is developed using **Electron** to quickly build and run multi-platform localized applications.
You can download the application for your platform directly
from [Release](https://github.com/fankes/YukiHookAPI-ProjectBuilder/releases).
from [Release](https://github.com/HighCapable/YukiHookAPI-ProjectBuilder/releases).
**The following are the manual deployment and compilation steps**
> The following are the manual deployment and compilation steps
First you need to install [node.js](https://nodejs.org/en/)
IDE tools recommend **IntelliJ IDEA** or **WebStorm**
IDE tools recommend **IntelliJ IDEA** or **WebStorm**.
Formatting code with **Visual Studio Code** is not recommended and may cause some errors.
- Execute the following command to install Electron
Execute the following command to install Electron.
```
npm install --save-dev electron
```
- Execute the following command to install yarn
Execute the following command to install yarn.
```
npm install yarn
```
- Enter the project directory and execute the following command to install dependencies
Enter the project directory and execute the following command to install dependencies.
```
npm install --save-dev @electron-forge/cli
@@ -55,13 +68,13 @@ npm install --save-dev @electron-forge/cli
npx electron-forge import
```
- Use the following command to debug
Use the following command to debug.
```
npm run start
```
- Use the following commands to compile & package
Use the following commands to compile & package.
**Linux/macOS**
@@ -75,6 +88,10 @@ npm run make
npm run package
```
## Star History
![Star History Chart](https://api.star-history.com/svg?repos=HighCapable/YukiHookAPI-ProjectBuilder&type=Date)
## License
- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html)

View File

@@ -1,7 +1,7 @@
{
"name": "yukihookapi-projectbuilder",
"productName": "YukiHookAPI Project Builder",
"version": "1.0.4",
"version": "1.0.5",
"description": "A Xposed Project Builder by YukiHookAPI",
"main": "src/app.js",
"scripts": {
@@ -18,7 +18,7 @@
"@electron-forge/maker-rpm": "^6.0.0-beta.64",
"@electron-forge/maker-squirrel": "^6.0.0-beta.64",
"@electron-forge/maker-zip": "^6.0.0-beta.64",
"electron": "20.3.9",
"electron": "22.3.23",
"electron-icon-builder": "^2.0.1"
},
"dependencies": {

Binary file not shown.

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
@@ -80,14 +80,14 @@ const appSpace = {
label: locale.i18n.projectAddress,
accelerator: system.isMacOS ? 'command+w' : 'ctrl+w',
click: () => {
system.openBrowser('https://github.com/fankes/YukiHookAPI');
system.openBrowser('https://github.com/HighCapable/YuKiHookAPI');
}
});
const helpDocumentationChildItem = new MenuItem({
label: locale.i18n.helpDocumentation,
accelerator: system.isMacOS ? 'command+h' : 'ctrl+h',
click: () => {
system.openBrowser('https://fankes.github.io/YukiHookAPI');
system.openBrowser('https://highcapable.github.io/YukiHookAPI');
}
});
const openSourceChildItem = new MenuItem({

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License

View File

@@ -1,7 +1,7 @@
<!--
YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
Copyright (C) 2019-2023 HighCapable
https://github.com/fankes/YukiHookAPI-ProjectBuilder
https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
This software is non-free but opensource software: you can redistribute it
and/or modify it under the terms of the GNU Affero General Public License
@@ -31,6 +31,7 @@
<link href="./css/mdui.min.css" rel="stylesheet">
<link href="./render.css" rel="stylesheet">
<script src="./js/mdui.min.js"></script>
<script src="./js/marked.min.js"></script>
</head>
<body class="mdui-container-fluid mdui-theme-primary-orange mdui-theme-accent-orange mdui-theme-layout-auto">
<div id="root_div" style="font-size:12pt;line-height:150%;padding-top:5pt;padding-left:10pt;padding-right:10pt;display:none">
@@ -134,7 +135,7 @@
<i class="mdui-icon material-icons">photo_library</i>
<label class="mdui-textfield-label i18n">{{addResourcesHookSupport}}</label>
<select class="mdui-select" id="support_resources_hook_select">
<option class="i18n" value="0">{{notConfigureDefYes}}</option>
<option class="i18n" value="0">{{notConfigureDefNo}}</option>
<option class="i18n" value="1">{{yesOfConfigure}}</option>
<option class="i18n" value="2">{{noOfConfigure}}</option>
</select>
@@ -270,7 +271,7 @@
<span id="about_version_text"></span><br/>
<span class="i18n">{{aboutTip}}</span><br/>
<span class="i18n">{{projectAddress}}:&nbsp</span>
<span class="url-link">https://github.com/fankes/YukiHookAPI</span><br/>
<span class="url-link">https://github.com/HighCapable/YuKiHookAPI</span><br/>
<div style="margin-top: 10px"></div>
<span class="i18n" style="font-size: 10pt;opacity: 0.6;line-height: 18px">{{noticeTip}}</span>
</div>
@@ -292,8 +293,14 @@
<span class="url-link">https://github.com/NASGO/decompress-zip</span><br/>
<span>DAY.JS</span>&nbsp&nbsp<span class="license-text">MIT</span><br/>
<span class="url-link">https://github.com/iamkun/dayjs</span><br/>
<span>YukiHookAPI</span>&nbsp&nbsp<span class="license-text">Apache-2.0</span><br/>
<span class="url-link">https://github.com/HighCapable/YuKiHookAPI</span>
<span>DrawableToolbox</span>&nbsp&nbsp<span class="license-text">Apache-2.0</span><br/>
<span class="url-link">https://github.com/duanhong169/DrawableToolbox</span>
<span>SweetDependency</span>&nbsp&nbsp<span class="license-text">Apache-2.0</span><br/>
<span class="url-link">https://github.com/HighCapable/SweetDependency</span>
<span>SweetProperty</span>&nbsp&nbsp<span class="license-text">Apache-2.0</span><br/>
<span class="url-link">https://github.com/HighCapable/SweetProperty</span>
</div>
<div class="mdui-dialog-actions">
<button class="mdui-btn mdui-ripple i18n" mdui-dialog-close>{{close}}</button>

6
src/content/js/marked.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License

View File

@@ -3,7 +3,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
@@ -58,7 +58,7 @@ const projectConfigs = {
appName: '',
moduleDescription: '',
appMinApi: 27,
appTargetApi: 33,
appTargetApi: 34,
xposedMinApi: 93,
moduleCompoment: 0,
targetXposedPlatform: 0,
@@ -366,10 +366,10 @@ const build = {
else if (valUtils.isEmpty(configForm.appMinApiText())) page.snack(locale.i18n.enterAppMinApiVersionTip);
else if (configForm.targetXposedPlatformSelect() === 2 && configForm.appMinApiText() < 27) page.snack(locale.i18n.lsposedSupportMinAppApiWarnTip);
else if (configForm.appMinApiText() < 21) page.snack(locale.i18n.tooLowAppMinApiVersionWarnTip);
else if (configForm.appMinApiText() > 33) page.snack(locale.i18n.tooHighAppMinApiVersionWarnTip);
else if (configForm.appMinApiText() > 34) page.snack(locale.i18n.tooHighAppMinApiVersionWarnTip);
else if (valUtils.isEmpty(configForm.appTargetApiText())) page.snack(locale.i18n.enterAppTargetApiVersionTip);
else if (configForm.appTargetApiText() < configForm.appMinApiText()) page.snack(locale.i18n.tooLowAppTargetApiVersionWarnTip);
else if (configForm.appTargetApiText() > 33) page.snack(locale.i18n.maybeInvalidAppTargetApiVersionTip);
else if (configForm.appTargetApiText() > 34) page.snack(locale.i18n.maybeInvalidAppTargetApiVersionTip);
else if (valUtils.isEmpty(configForm.xposedMinApiText())) page.snack(locale.i18n.enterXposedMinApiVersionTip);
else if (configForm.xposedMinApiText() < 82) page.snack(locale.i18n.tooLowXposedMinApiVersionWarnTip);
else if (configForm.xposedMinApiText() > 93) page.snack(locale.i18n.tooHighXposedMinApiVersionWarnTip);
@@ -461,7 +461,7 @@ const projectDepends = {
androidGradlePlugin: 'https://dl.google.com/dl/android/maven2/com/android/application/com.android.application.gradle.plugin/maven-metadata.xml',
kotlin: 'https://api.github.com/repos/JetBrains/kotlin/releases',
kotlinKsp: 'https://api.github.com/repos/google/ksp/releases',
yukiHookApi: 'https://api.github.com/repos/fankes/YukiHookAPI/releases'
yukiHookApi: 'https://api.github.com/repos/HighCapable/YuKiHookAPI/releases'
},
/** 搜索项目依赖 */
search() {
@@ -718,11 +718,12 @@ const page = {
const repoName = 'YukiHookAPI-ProjectBuilder';
httpClient.requestGet('https://api.github.com/repos/' + repoAuthor + '/' + repoName + '/releases/latest', (body) => {
const newVersion = body['name'] ?? '';
const updateLogs = body['body']?.replace(/\n/g, "<br/>") ?? '';
// noinspection JSUnresolvedReference
const updateLogs = marked.parse(body['body']?.replace(/\n/g, "<br/>") ?? '');
const updateUrl = body['html_url'] ?? '';
if (newVersion !== page.appVersion)
mdui.confirm(locale.i18n.version + ':&nbsp' + newVersion + '<br/><br/>' +
'<strong>' + locale.i18n.updateLogs + '</strong><br/><br/>' + updateLogs, locale.i18n.newVersionFound, () => {
'<strong>' + locale.i18n.updateLogs + '</strong>' + updateLogs, locale.i18n.newVersionFound, () => {
page.openBrowser(updateUrl);
}, () => null, {
confirmText: locale.i18n.updateNow,

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
@@ -178,6 +178,7 @@ const locale = {
"later": "Later",
"notConfigure": "Not Configured",
"notConfigureDefYes": "Not Configured (Default Yes/Enabled)",
"notConfigureDefNo": "Not Configured (Default No/Disabled)",
"yesOfConfigure": "Yes/Enabled",
"noOfConfigure": "No/Disabled",
"version": "Version",
@@ -312,6 +313,7 @@ const locale = {
"later": "稍后",
"notConfigure": "未配置",
"notConfigureDefYes": "未配置 (默认 是/Yes)",
"notConfigureDefNo": "未配置 (默认 否/No)",
"yesOfConfigure": "是/Yes",
"noOfConfigure": "否/No",
"version": "版本",
@@ -446,6 +448,7 @@ const locale = {
"later": "後で",
"notConfigure": "構成されていません",
"notConfigureDefYes": "構成されていません (デフォルトは はい/Yes)",
"notConfigureDefNo": "構成されていません (デフォルトは いいえ/No)",
"yesOfConfigure": "はい/Yes",
"noOfConfigure": "いいえ/No",
"version": "バージョン",

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2023 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* https://github.com/HighCapable/YukiHookAPI-ProjectBuilder
*
* This software is non-free but opensource software: you can redistribute it
* and/or modify it under the terms of the GNU Affero General Public License
@@ -105,91 +105,6 @@ const transaction = {
});
return finalCode;
},
/**
* 注入依赖 - 适用于 'build.gradle' 文件
* @param origCode 原始代码
* @param dependencies 依赖内容数组
* @return string
*/
implement: (origCode, ...dependencies) => {
if (dependencies.length <= 0) return;
let finalCode = origCode;
dependencies.forEach((value) => {
finalCode = finalCode.concat(value.type, codeFiles.space(1), '\'',
value.groupId, ':', value.artifactId, ':', value.version, '\'\n', codeFiles.space(4));
});
return finalCode;
},
'build.gradle': {
dependencies: {
androidXposed: {
type: 'compileOnly',
groupId: 'de.robv.android.xposed',
artifactId: 'api',
version: '82'
},
yukiHookApiApi: {
type: 'implementation',
groupId: 'com.highcapable.yukihookapi',
artifactId: 'api',
version: configs.projectDependencies.yukiHookApiVersion
},
yukiHookApiKsp: {
type: 'ksp',
groupId: 'com.highcapable.yukihookapi',
artifactId: 'ksp-xposed',
version: configs.projectDependencies.yukiHookApiVersion
},
drawabletoolbox: {
type: 'implementation',
groupId: 'com.github.duanhong169',
artifactId: 'drawabletoolbox',
version: '1.0.7'
},
androidxCoreKtx: {
type: 'implementation',
groupId: 'androidx.core',
artifactId: 'core-ktx',
version: '1.10.1'
},
appcompat: {
type: 'implementation',
groupId: 'androidx.appcompat',
artifactId: 'appcompat',
version: '1.6.1'
},
material: {
type: 'implementation',
groupId: 'com.google.android.material',
artifactId: 'material',
version: '1.9.0'
},
constraintlayout: {
type: 'implementation',
groupId: 'androidx.constraintlayout',
artifactId: 'constraintlayout',
version: '2.1.4'
},
junit: {
type: 'testImplementation',
groupId: 'junit',
artifactId: 'junit',
version: '4.13.2'
},
androidxTestExt: {
type: 'androidTestImplementation',
groupId: 'androidx.test.ext',
artifactId: 'junit',
version: '1.1.5'
},
androidxTestEspresso: {
type: 'androidTestImplementation',
groupId: 'androidx.test.espresso',
artifactId: 'espresso-core',
version: '3.5.1'
}
}
},
'AndroidManifest.xml': {
newXSharePrefs: (isEnabled) => ('<meta-data\n' +
codeFiles.space(12) + 'android:name="xposedsharedprefs"\n' +
@@ -207,7 +122,8 @@ const transaction = {
'HookEntry.kt': {
annotations: {
entryClassName: (name) => 'entryClassName = "' + name + '"',
supportResourcesHook: (isEnabled) => 'isUsingResourcesHook = ' + (isEnabled ? 'true' : 'false')
supportResourcesHook: (isEnabled) => 'isUsingResourcesHook = ' + (isEnabled ? 'true' : 'false'),
supportXposedModuleStatus: (isEnabled) => 'isUsingXposedModuleStatus = ' + (isEnabled ? 'true' : 'false')
},
configs: {
debugLog: {
@@ -216,7 +132,6 @@ const transaction = {
},
enableDebug: (isEnabled) => 'isDebug = ' + (isEnabled ? 'true' : 'false'),
enableResourcesCache: (isEnabled) => 'isEnableModuleAppResourcesCache = ' + (isEnabled ? 'true' : 'false'),
enableModuleStatus: (isEnabled) => 'isEnableHookModuleStatus = ' + (isEnabled ? 'true' : 'false'),
enableYChannel: (isEnabled) => 'isEnableDataChannel = ' + (isEnabled ? 'true' : 'false')
}
},
@@ -227,6 +142,16 @@ const transaction = {
}
};
/**
* Settings 插件命名空间
*/
const settingsPlugins = {
// TODO SweetDependency 和 SweetProperty 暂时不支持自动获取版本
// 后期合并到 IDEA 插件后再做这里的更新
sweetDependencyVersion: '1.0.2',
sweetPropertyVersion: '1.0.3'
}
/**
* 更新创建进度显示
* @param progress 当前进度
@@ -326,6 +251,11 @@ const transaction = {
if (configs.yukiHookApiConfig.supportResourcesHook !== 0)
hookEntryAnnotationCode = hookEntryAnnotationCode.concat(
codeFiles['HookEntry.kt'].annotations.supportResourcesHook(configs.yukiHookApiConfig.supportResourcesHook === 1));
if (configs.yukiHookApiConfig.supportResourcesHook !== 0 && configs.yukiHookApiConfig.enableModuleStatus !== 0)
hookEntryAnnotationCode = hookEntryAnnotationCode.concat(', ');
if (configs.yukiHookApiConfig.enableModuleStatus !== 0)
hookEntryAnnotationCode = hookEntryAnnotationCode.concat(
codeFiles['HookEntry.kt'].annotations.supportXposedModuleStatus(configs.yukiHookApiConfig.enableModuleStatus === 1));
if (hookEntryAnnotationCode.trim() !== '')
hookEntryAnnotationCode = '(' + (hookEntryAnnotationCode.trim().endsWith(',') ?
hookEntryAnnotationCode.trim().substring(0, hookEntryAnnotationCode.trim().lastIndexOf(',')) :
@@ -351,73 +281,24 @@ const transaction = {
if (configs.yukiHookApiConfig.enableResourcesCache !== 0)
hookEntryConfigsCode = codeFiles.append(hookEntryConfigsCode,
codeFiles['HookEntry.kt'].configs.enableResourcesCache(configs.yukiHookApiConfig.enableResourcesCache === 1));
if (configs.yukiHookApiConfig.enableModuleStatus !== 0)
hookEntryConfigsCode = codeFiles.append(hookEntryConfigsCode,
codeFiles['HookEntry.kt'].configs.enableModuleStatus(configs.yukiHookApiConfig.enableModuleStatus === 1));
if (configs.yukiHookApiConfig.enableYChannel !== 0)
hookEntryConfigsCode = codeFiles.append(hookEntryConfigsCode,
codeFiles['HookEntry.kt'].configs.enableYChannel(configs.yukiHookApiConfig.enableYChannel === 1));
hookEntryConfigsCode = hookEntryConfigsCode.trim();
if (hookEntryConfigsCode === '') hookEntryConfigsCode = '// Your code here.';
let gradleDependenciesCode = '';
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.androidXposed);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.yukiHookApiApi);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.yukiHookApiKsp);
switch (configs.basicConfig.moduleCompoment) {
case 0:
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.drawabletoolbox);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.androidxCoreKtx);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.appcompat);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.material);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.constraintlayout);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.junit);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.androidxTestExt);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.androidxTestEspresso);
break;
case 1:
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.androidxCoreKtx);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.appcompat);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.material);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.constraintlayout);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.junit);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.androidxTestExt);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.androidxTestEspresso);
break;
case 2:
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.junit);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.androidxTestExt);
gradleDependenciesCode = codeFiles.implement(gradleDependenciesCode,
codeFiles['build.gradle'].dependencies.androidxTestEspresso);
break;
}
gradleDependenciesCode = gradleDependenciesCode.trim();
fileSystem.replaces(targetPath, ['gradle', 'properties', 'kt', 'xml'], [
fileSystem.replaces(targetPath, ['gradle.kts', 'properties', 'kt', 'xml', 'yaml'], [
{
placeholder: '{GRADLE_PAPER}',
value: configs.projectDependencies.gradlePaper
}, {
placeholder: '{GRADLE_PROPERTIES_DATE}',
value: dateTime.cstTime()
}, {
placeholder: '{SWEETDEPENDENCY_VERSION}',
value: settingsPlugins.sweetDependencyVersion
}, {
placeholder: '{SWEETPROPERTY_VERSION}',
value: settingsPlugins.sweetPropertyVersion
}, {
placeholder: '{AGP_VERSION}',
value: configs.projectDependencies.androidGradlePluginVersion
@@ -457,9 +338,6 @@ const transaction = {
}, {
placeholder: '{SCOPE_ITEMS}',
value: moduleScopesCode
}, {
placeholder: '{GRADLE_DEPENDENCIES}',
value: gradleDependenciesCode
}, {
placeholder: '{YUKIHOOKAPI_MODULE_ACTIVE_STATUS}',
value: moduleActiveStatusCode

View File

@@ -259,7 +259,7 @@
"@electron-forge/template-base" "6.0.0-beta.64"
fs-extra "^10.0.0"
"@electron/get@^1.14.1", "@electron/get@^1.6.0", "@electron/get@^1.9.0":
"@electron/get@^1.6.0", "@electron/get@^1.9.0":
version "1.14.1"
resolved "https://repo.huaweicloud.com/repository/npm/@electron/get/-/get-1.14.1.tgz"
integrity sha512-BrZYyL/6m0ZXz/lDxy/nlVhQz+WF+iPS6qXolEU8atw7h6v1aYkjwJZ63m+bJMBTxDE66X+r2tPS4a/8C82sZw==
@@ -275,6 +275,21 @@
global-agent "^3.0.0"
global-tunnel-ng "^2.7.1"
"@electron/get@^2.0.0":
version "2.0.3"
resolved "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz"
integrity sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==
dependencies:
debug "^4.1.1"
env-paths "^2.2.0"
fs-extra "^8.1.0"
got "^11.8.5"
progress "^2.0.3"
semver "^6.2.0"
sumchecker "^3.0.1"
optionalDependencies:
global-agent "^3.0.0"
"@electron/universal@^1.2.1":
version "1.3.0"
resolved "https://repo.huaweicloud.com/repository/npm/@electron/universal/-/universal-1.3.0.tgz"
@@ -693,11 +708,6 @@
resolved "https://repo.huaweicloud.com/repository/npm/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz"
integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==
"@types/json-buffer@~3.0.0":
version "3.0.0"
resolved "https://repo.huaweicloud.com/repository/npm/@types/json-buffer/-/json-buffer-3.0.0.tgz"
integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==
"@types/keyv@*":
version "3.1.4"
resolved "https://repo.huaweicloud.com/repository/npm/@types/keyv/-/keyv-3.1.4.tgz"
@@ -1081,9 +1091,9 @@ cacheable-request@^6.0.0:
responselike "^1.0.2"
cacheable-request@^7.0.2:
version "7.0.2"
resolved "https://repo.huaweicloud.com/repository/npm/cacheable-request/-/cacheable-request-7.0.2.tgz"
integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==
version "7.0.4"
resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz"
integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==
dependencies:
clone-response "^1.0.2"
get-stream "^5.1.0"
@@ -1286,14 +1296,6 @@ compare-version@^0.1.2:
resolved "https://repo.huaweicloud.com/repository/npm/compare-version/-/compare-version-0.1.2.tgz"
integrity sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==
compress-brotli@^1.3.8:
version "1.3.8"
resolved "https://repo.huaweicloud.com/repository/npm/compress-brotli/-/compress-brotli-1.3.8.tgz"
integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ==
dependencies:
"@types/json-buffer" "~3.0.0"
json-buffer "~3.0.1"
concat-map@0.0.1:
version "0.0.1"
resolved "https://repo.huaweicloud.com/repository/npm/concat-map/-/concat-map-0.0.1.tgz"
@@ -1714,12 +1716,12 @@ electron-winstaller@^5.0.0:
lodash.template "^4.2.2"
temp "^0.9.0"
electron@20.3.9:
version "20.3.9"
resolved "https://repo.huaweicloud.com/repository/npm/electron/-/electron-20.3.9.tgz"
integrity sha512-CPThZ0Q0otIsFgwh2K6fMfrMX/3jsWt+fdjl1tiZh08MD8f74Az+dFB4NKpDHzqr4RFuRqh/W5CdGyGtvXXtFQ==
electron@22.3.23:
version "22.3.23"
resolved "https://registry.npmjs.org/electron/-/electron-22.3.23.tgz"
integrity sha512-2p6NsLFPfM2RmgATchjKZKBUP3O6NxQMWOrHt9W5U2GRtfI8qWlicUR1wnh5D1VLt4c1YsjvpF6dct+1JNRubA==
dependencies:
"@electron/get" "^1.14.1"
"@electron/get" "^2.0.0"
"@types/node" "^16.11.26"
extract-zip "^2.0.1"
@@ -2025,7 +2027,7 @@ fs-extra@^7.0.0, fs-extra@^7.0.1:
fs-extra@^8.1.0:
version "8.1.0"
resolved "https://repo.huaweicloud.com/repository/npm/fs-extra/-/fs-extra-8.1.0.tgz"
resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz"
integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
dependencies:
graceful-fs "^4.2.0"
@@ -2265,6 +2267,23 @@ got@^11.7.0:
p-cancelable "^2.0.0"
responselike "^2.0.0"
got@^11.8.5:
version "11.8.6"
resolved "https://registry.npmjs.org/got/-/got-11.8.6.tgz"
integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==
dependencies:
"@sindresorhus/is" "^4.0.0"
"@szmarczak/http-timer" "^4.0.5"
"@types/cacheable-request" "^6.0.1"
"@types/responselike" "^1.0.0"
cacheable-lookup "^5.0.3"
cacheable-request "^7.0.2"
decompress-response "^6.0.0"
http2-wrapper "^1.0.0-beta.5.2"
lowercase-keys "^2.0.0"
p-cancelable "^2.0.0"
responselike "^2.0.0"
got@^9.6.0:
version "9.6.0"
resolved "https://repo.huaweicloud.com/repository/npm/got/-/got-9.6.0.tgz"
@@ -2673,7 +2692,7 @@ json-buffer@3.0.0:
resolved "https://repo.huaweicloud.com/repository/npm/json-buffer/-/json-buffer-3.0.0.tgz"
integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==
json-buffer@3.0.1, json-buffer@~3.0.1:
json-buffer@3.0.1:
version "3.0.1"
resolved "https://repo.huaweicloud.com/repository/npm/json-buffer/-/json-buffer-3.0.1.tgz"
integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==
@@ -2754,11 +2773,10 @@ keyv@^3.0.0:
json-buffer "3.0.0"
keyv@^4.0.0:
version "4.3.2"
resolved "https://repo.huaweicloud.com/repository/npm/keyv/-/keyv-4.3.2.tgz"
integrity sha512-kn8WmodVBe12lmHpA6W8OY7SNh6wVR+Z+wZESF4iF5FCazaVXGWOtnbnvX0tMQ1bO+/TmOD9LziuYMvrIIs0xw==
version "4.5.4"
resolved "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz"
integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==
dependencies:
compress-brotli "^1.3.8"
json-buffer "3.0.1"
klaw@^1.0.0: