46 Commits

Author SHA1 Message Date
3472897059 Bump version to 1.0.7 2025-06-25 22:32:25 +08:00
33fd69046f refactor(fix): some bug fix 2025-06-25 22:32:17 +08:00
21bb61c9fb feat: support YukiHookAPI 1.3.0 2025-06-25 18:22:10 +08:00
49f9e102ba docs: update README 2025-06-25 16:39:14 +08:00
74233d5e85 docs: update license 2025-01-13 10:42:00 +08:00
008ae12242 docs: update contacts 2024-01-02 03:30:25 +08:00
f736186345 docs: update copyright date to 2024 for all existing files 2024-01-01 01:43:55 +08:00
eb66f84ff0 Bump version to 1.0.6 2023-12-13 20:11:32 +08:00
5d4925d877 feat: add SweetDependency, SweetProperty version find 2023-12-13 19:51:11 +08:00
65555cc3e3 docs: use relative link 2023-12-11 02:59:07 +08:00
6d8951c817 chore: update project files 2023-12-11 02:59:00 +08:00
0076093296 docs: update README-zh-CN 2023-12-11 01:21:17 +08:00
1ad46b5994 docs: add new promotion 2023-11-18 18:25:00 +08:00
3ccb304aa9 docs: update promotion 2023-10-24 22:26:22 +08:00
d1c9fa858b Bump version to 1.0.5 2023-10-09 00:39:35 +08:00
b393000d5e feat: format update logs to markdown 2023-10-09 00:39:05 +08:00
e51721dbec chore: update dependencies 2023-10-09 00:30:15 +08:00
8a1077d4a4 feat: support YukiHookAPI 1.2.0 2023-10-09 00:26:55 +08:00
bde4dd26ec feat(docs): add open sources 2023-10-09 00:08:13 +08:00
1bfb09c29c refactor: merge to new gradle kts and new project configs 2023-10-08 23:41:40 +08:00
7d7e204037 refactor: change repository owner to HighCapable (3rd) 2023-10-08 22:56:55 +08:00
c76f1bfcae chore: add project icon 2023-10-08 22:45:55 +08:00
215802af5c feat: update android project template to api 34 2023-10-08 22:29:39 +08:00
2bfc63ee78 docs: add project migration notice 2023-10-08 21:59:05 +08:00
64d0ec55f1 refactor: change repository owner to HighCapable (2nd) 2023-10-08 21:50:10 +08:00
b95ffdacc0 refactor: change repository owner to HighCapable 2023-10-07 18:50:35 +08:00
8aefb7df64 docs: update README, README-zh-CN 2023-09-21 05:05:58 +08:00
38b2e48d1c [Change Commit Specification] Use the new commit spec from here on
child commits:
chore: update .gitignore
2023-09-21 05:00:41 +08:00
c99d886e70 Update version to 1.0.4 2023-08-18 01:19:51 +08:00
2c0fb88f7d Added when project created show save to template dialog function 2023-08-18 01:11:32 +08:00
ff71fad415 Added new i18ns 2023-08-18 01:11:32 +08:00
4299a1d04c Fix some problems in build script in project-template 2023-08-18 01:02:04 +08:00
f95c89f9e4 Update project dependencies version and files 2023-08-18 00:50:31 +08:00
2291639b52 Modify change android gradle plugin searching function in render 2023-08-17 07:17:00 +08:00
fbe50ef494 Fix YukiHookAPI releases version problem in render 2023-08-16 22:48:57 +08:00
37e550aade Update version to 1.0.3 | Support YukiHookAPI 1.1.11 2023-04-27 22:13:55 +08:00
55a0390a0f Update copyright date to 2023 for all existing files 2023-04-27 22:12:06 +08:00
c7e160c2fc Modify optimize i18ns 2023-04-27 21:31:35 +08:00
023b432c0b Modify remove deprecated options for auto generic process 2023-04-27 21:17:55 +08:00
33daeaf9e5 Modify make reference path to relative path 2023-04-27 20:46:35 +08:00
55ae6600bc Update version to 1.0.2 | Support YukiHookAPI 1.1.9 2023-04-17 07:59:05 +08:00
df9c0627de Update node_modules dependencies 2023-04-17 07:57:35 +08:00
bafd0f08f4 Modify merge into new way of implementation since API 1.1.9 2023-04-17 07:50:35 +08:00
ebbbafeb99 Update project dependencies version 2023-04-17 07:45:05 +08:00
e8f84b5bfa Modify change image url to raw in README 2023-04-17 07:30:35 +08:00
09d93dc4aa Update project dependencies version and files 2023-01-19 22:33:33 +08:00
23 changed files with 4121 additions and 4333 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

View File

@@ -1,6 +1,7 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="CheckImageSize" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="HtmlFormInputWithoutLabel" enabled="false" level="WARNING" enabled_by_default="false" />
<inspection_tool class="HtmlUnknownAttribute" enabled="true" level="WARNING" enabled_by_default="true">
<option name="myValues">

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,50 @@
# YukiHookAPI Project Builder
![Blank](https://img.shields.io/badge/license-AGPL3.0-blue)
![Blank](https://img.shields.io/badge/version-v1.0.1-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" width = "100" height = "100"/>
<br/>
<br/>
帮助你快速创建一个使用 YukiHookAPI 打造的 Xposed 项目模板。
<br/>
[![GitHub license](https://img.shields.io/github/license/HighCapable/YukiHookAPI-ProjectBuilder?color=blue&style=flat-square)](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&style=flat-square)](https://github.com/HighCapable/YukiHookAPI-ProjectBuilder/releases)
[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram&style=flat-square)](https://t.me/YukiHookAPI)
[![Telegram](https://img.shields.io/badge/discussion%20dev-Telegram-blue.svg?logo=telegram&style=flat-square)](https://t.me/HighCapable_Dev)
[![QQ](https://img.shields.io/badge/discussion%20dev-QQ-blue.svg?logo=tencent-qq&logoColor=red&style=flat-square)](https://qm.qq.com/cgi-bin/qm/qr?k=Pnsc5RY6N2mBKFjOLPiYldbAbprAU3V7&jump_from=webapi&authKey=X5EsOVzLXt1dRunge8ryTxDRrh9/IiW1Pua75eDLh9RE3KXE+bwXIYF5cWri/9lf)
[English](https://github.com/fankes/YukiHookAPI-ProjectBuilder/blob/master/README.md) | 简体中文
<img src="img-src/icon.png" width = "100" height = "100" alt="LOGO"/>
帮助你快速创建一个使用 YukiHookAPI 打造的 Xposed 项目模板。
[English](README.md) | 简体中文
| <img src="https://github.com/HighCapable/.github/blob/main/img-src/logo.jpg?raw=true" width = "30" height = "30" alt="LOGO"/> | [HighCapable](https://github.com/HighCapable) |
|-------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
这个项目属于上述组织,**点击上方链接关注这个组织**,发现更多好项目。
## 项目迁移公告
这个项目最终的目的就是创建一个新的 Android Studio/IDEA 项目模版,然后再在对应的 IDE 中打开项目。
这种方式不是很优雅,而且需要在用户的电脑上安装这个软件,后期我准备将这个项目合并到 IDEA 插件中,集成到新项目模版功能里。
这样一来,使用 IDEA 安装插件即可实现直接使用此模版创建项目的功能,而且更加灵活和具有可拓展性。
在新的项目确定后,会在这里添加新项目的链接,届时我会终止维护这个项目并建议大家转移到新项目。
**项目构建器将会在 `YukiHookAPI` 发布第一个 `2.0.0` 版本之前做最后的维护,在新的版本发布后,这个项目将正式弃用。**
## 这是什么
- 这是一个使用 [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,12 +87,27 @@ npm run make
npm run package
```
## 项目推广
<!--suppress HtmlDeprecatedAttribute -->
<div align="center">
<h2>嘿,还请君留步!👋</h2>
<h3>这里有 Android 开发工具、UI 设计、Gradle 插件、Xposed 模块和实用软件等相关项目。</h3>
<h3>如果下方的项目能为你提供帮助,不妨为我点个 star 吧!</h3>
<h3>所有项目免费、开源,遵循对应开源许可协议。</h3>
<h1><a href="https://github.com/fankes/fankes/blob/main/project-promote/README-zh-CN.md">→ 查看更多关于我的项目,请点击这里 ←</a></h1>
</div>
## 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)
```
Copyright (C) 2019-2022 HighCapable
Copyright (C) 2019 HighCapable
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
@@ -95,4 +123,4 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
```
版权所有 © 2019-2022 HighCapable
版权所有 © 2019 HighCapable

View File

@@ -1,51 +1,73 @@
# YukiHookAPI Project Builder
![Blank](https://img.shields.io/badge/license-AGPL3.0-blue)
![Blank](https://img.shields.io/badge/version-v1.0.1-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" 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&style=flat-square)](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&style=flat-square)](https://github.com/HighCapable/YukiHookAPI-ProjectBuilder/releases)
[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram&style=flat-square)](https://t.me/YukiHookAPI)
[![Telegram](https://img.shields.io/badge/discussion%20dev-Telegram-blue.svg?logo=telegram&style=flat-square)](https://t.me/HighCapable_Dev)
[![QQ](https://img.shields.io/badge/discussion%20dev-QQ-blue.svg?logo=tencent-qq&logoColor=red&style=flat-square)](https://qm.qq.com/cgi-bin/qm/qr?k=Pnsc5RY6N2mBKFjOLPiYldbAbprAU3V7&jump_from=webapi&authKey=X5EsOVzLXt1dRunge8ryTxDRrh9/IiW1Pua75eDLh9RE3KXE+bwXIYF5cWri/9lf)
English | [简体中文](https://github.com/fankes/YukiHookAPI-ProjectBuilder/blob/master/README-zh-CN.md)
<img src="img-src/icon.png" width = "100" height = "100" alt="LOGO"/>
A Xposed Project Builder by YukiHookAPI.
English | [简体中文](README-zh-CN.md)
| <img src="https://github.com/HighCapable/.github/blob/main/img-src/logo.jpg?raw=true" width = "30" height = "30" alt="LOGO"/> | [HighCapable](https://github.com/HighCapable) |
|-------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|
This project belongs to the above-mentioned organization, **click the link above to follow this organization** and discover more good projects.
## 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.
**The project builder will be maintained before the release of the first `2.0.0` version of `YukiHookAPI`. This project will be officially deprecated
after the new version is released.**
## 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 +77,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,12 +97,27 @@ npm run make
npm run package
```
## Promotion
<!--suppress HtmlDeprecatedAttribute -->
<div align="center">
<h2>Hey, please stay! 👋</h2>
<h3>Here are related projects such as Android development tools, UI design, Gradle plugins, Xposed Modules and practical software. </h3>
<h3>If the project below can help you, please give me a star! </h3>
<h3>All projects are free, open source, and follow the corresponding open source license agreement. </h3>
<h1><a href="https://github.com/fankes/fankes/blob/main/project-promote/README.md">→ To see more about my projects, please click here ←</a></h1>
</div>
## 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)
```
Copyright (C) 2019-2022 HighCapable
Copyright (C) 2019 HighCapable
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
@@ -96,4 +133,4 @@ You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
```
Copyright © 2019-2022 HighCapable
Copyright © 2019 HighCapable

BIN
img-src/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -1,7 +1,7 @@
{
"name": "yukihookapi-projectbuilder",
"productName": "YukiHookAPI Project Builder",
"version": "1.0.1",
"version": "1.0.7",
"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": "^19.0.7",
"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-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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-2022 HighCapable
https://github.com/fankes/YukiHookAPI-ProjectBuilder
Copyright (C) 2019 HighCapable
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
@@ -28,9 +28,10 @@
<meta content="no-siteapp">
<meta content="light dark" name="color-scheme">
<title>&nbsp</title>
<link href="css/mdui.min.css" rel="stylesheet">
<link href="render.css" rel="stylesheet">
<script src="js/mdui.min.js"></script>
<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">
@@ -99,7 +100,7 @@
</div>
<div class="mdui-textfield" id="new_xshare_prefs_div">
<i class="mdui-icon material-icons">style</i>
<label class="mdui-textfield-label i18n">{{declarationNewXSharePrefs}}</label>
<label class="mdui-textfield-label i18n">{{useNewXSharedPreferences}}</label>
<select class="mdui-select" id="new_xshare_prefs_select">
<option class="i18n" value="0">{{notConfigure}}</option>
<option class="i18n" value="1">{{yesOfConfigure}}</option>
@@ -117,7 +118,7 @@
onclick="moduleScope.showAddDialog()"
style="margin-left: 40px;width: 92%">
<i class="mdui-icon material-icons" style="margin-bottom: 4px;margin-right: 4px">add</i>
<span class="i18n" style="text-transform: none">{{addApps}}</span>
<span class="i18n" style="text-transform: none">{{addNewApp}}</span>
</button>
</div>
<div style="margin-top: 15px"></div>
@@ -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>
@@ -162,15 +163,6 @@
<option class="i18n" value="2">{{noOfConfigure}}</option>
</select>
</div>
<div class="mdui-textfield">
<i class="mdui-icon material-icons">storage</i>
<label class="mdui-textfield-label i18n">{{enableYukiHookModulePrefsCache}}</label>
<select class="mdui-select" id="enable_yprefs_cache_select">
<option class="i18n" value="0">{{notConfigureDefYes}}</option>
<option class="i18n" value="1">{{yesOfConfigure}}</option>
<option class="i18n" value="2">{{noOfConfigure}}</option>
</select>
</div>
<div class="mdui-textfield">
<i class="mdui-icon material-icons">satellite</i>
<label class="mdui-textfield-label i18n">{{enableModuleResourcesCache}}</label>
@@ -198,15 +190,6 @@
<option class="i18n" value="2">{{noOfConfigure}}</option>
</select>
</div>
<div class="mdui-textfield">
<i class="mdui-icon material-icons">texture</i>
<label class="mdui-textfield-label i18n">{{enableMemberCache}}</label>
<select class="mdui-select" id="enable_member_cache_select">
<option class="i18n" value="0">{{notConfigureDefYes}}</option>
<option class="i18n" value="1">{{yesOfConfigure}}</option>
<option class="i18n" value="2">{{noOfConfigure}}</option>
</select>
</div>
<div style="margin-top: 15px"></div>
</div>
</div>
@@ -216,7 +199,7 @@
</button>
</div>
<div class="mdui-dialog" id="module_scope_dialog" style="max-width: 500px">
<div class="mdui-dialog-title i18n">{{addApps}}</div>
<div class="mdui-dialog-title i18n">{{addNewApp}}</div>
<div>
<span class="i18n" style="margin-left: 24px">{{selectScopeAppsOrEnterOnceTip}}</span>
<select class="mdui-select" id="module_scope_select" style="margin-left: 26px;margin-top: 10px">
@@ -287,8 +270,9 @@
<span id="about_name_text"></span><br/>
<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="i18n">{{mainProjectAddress}}</span><br/>
<span class="url-link">https://github.com/HighCapable/YukiHookAPI</span><br/>
<span class="url-link">https://github.com/HighCapable/KavaRef</span><br/>
<div style="margin-top: 10px"></div>
<span class="i18n" style="font-size: 10pt;opacity: 0.6;line-height: 18px">{{noticeTip}}</span>
</div>
@@ -310,13 +294,25 @@
<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><br/>
<span>KavaRef</span>&nbsp&nbsp<span class="license-text">Apache-2.0</span><br/>
<span class="url-link">https://github.com/HighCapable/KavaRef</span><br/>
<span>BetterAndroid</span>&nbsp&nbsp<span class="license-text">Apache-2.0</span><br/>
<span class="url-link">https://github.com/BetterAndroid/BetterAndroid</span><br/>
<span>Hikage</span>&nbsp&nbsp<span class="license-text">Apache-2.0</span><br/>
<span class="url-link">https://github.com/BetterAndroid/Hikage</span><br/>
<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 class="url-link">https://github.com/duanhong169/DrawableToolbox</span><br/>
<span>SweetDependency</span>&nbsp&nbsp<span class="license-text">Apache-2.0</span><br/>
<span class="url-link">https://github.com/HighCapable/SweetDependency</span><br/>
<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>
</div>
</div>
</body>
<script src="render.js"></script>
<script src="./render.js"></script>
</html>

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-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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

@@ -2,8 +2,8 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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
@@ -47,6 +47,8 @@ const dependenciesConfigs = {
gradlePapers: [],
androidGradlePluginVersions: [],
kotlinVersions: [],
sweetDependencyVersions: [],
sweetPropertyVersions: [],
yukiHookApiVersions: []
};
@@ -58,7 +60,7 @@ const projectConfigs = {
appName: '',
moduleDescription: '',
appMinApi: 27,
appTargetApi: 33,
appTargetApi: 35,
xposedMinApi: 93,
moduleCompoment: 0,
targetXposedPlatform: 0,
@@ -71,17 +73,17 @@ const projectConfigs = {
supportResourcesHook: 0,
enableDebug: 0,
enableDebugLog: 0,
enableYPrefsCache: 0,
enableResourcesCache: 0,
enableModuleStatus: 0,
enableYChannel: 0,
enableMemberCache: 0
},
projectDependencies: {
gradlePaper: '',
androidGradlePluginVersion: '',
kotlinVersion: '',
kotlinKspVersion: '',
sweetDependencyVersion: '',
sweetPropertyVersion: '',
yukiHookApiVersion: ''
}
};
@@ -308,11 +310,9 @@ const configForm = {
supportResourcesHookSelect: () => valUtils.integerOf($('#support_resources_hook_select option:selected').val()),
enableDebugSelect: () => valUtils.integerOf($('#enable_debug_select option:selected').val()),
enableDebugLogSelect: () => valUtils.integerOf($('#enable_debug_log_select option:selected').val()),
enableYPrefsCacheSelect: () => valUtils.integerOf($('#enable_yprefs_cache_select option:selected').val()),
enableResourcesCacheSelect: () => valUtils.integerOf($('#enable_resources_cache_select option:selected').val()),
enableModuleStatusSelect: () => valUtils.integerOf($('#enable_module_status_select option:selected').val()),
enableYChannelSelect: () => valUtils.integerOf($('#enable_ychannel_select option:selected').val()),
enableMemberCacheSelect: () => valUtils.integerOf($('#enable_member_cache_select option:selected').val())
enableYChannelSelect: () => valUtils.integerOf($('#enable_ychannel_select option:selected').val())
}
/**
@@ -347,11 +347,9 @@ const build = {
projectConfigs.yukiHookApiConfig.supportResourcesHook = configForm.supportResourcesHookSelect();
projectConfigs.yukiHookApiConfig.enableDebug = configForm.enableDebugSelect();
projectConfigs.yukiHookApiConfig.enableDebugLog = configForm.enableDebugLogSelect();
projectConfigs.yukiHookApiConfig.enableYPrefsCache = configForm.enableYPrefsCacheSelect();
projectConfigs.yukiHookApiConfig.enableResourcesCache = configForm.enableResourcesCacheSelect();
projectConfigs.yukiHookApiConfig.enableModuleStatus = configForm.enableModuleStatusSelect();
projectConfigs.yukiHookApiConfig.enableYChannel = configForm.enableYChannelSelect();
projectConfigs.yukiHookApiConfig.enableMemberCache = configForm.enableMemberCacheSelect();
projectConfigs.projectDependencies = {
gradlePaper: '',
androidGradlePluginVersion: '',
@@ -372,10 +370,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() > 36) 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);
@@ -413,13 +411,23 @@ const build = {
*/
complete: (msg) => {
dialogs.packagingProgress.close();
/** 显示保存为模版对话框 */
function showSaveToTemplate() {
mdui.confirm(locale.i18n.doYouWantSaveConfigTemplateTip, locale.i18n.notice, () => {
build.unlockStatus();
configTemplate.createNew();
}, () => {
build.unlockStatus();
page.reload();
}, {confirmText: locale.i18n.ok, cancelText: locale.i18n.cancel, modal: true, closeOnEsc: false});
}
mdui.confirm(msg, locale.i18n.buildComplete, () => {
ipcRenderer.send('open-complete-project');
build.unlockStatus();
page.reload();
showSaveToTemplate();
}, () => {
build.unlockStatus();
page.reload();
showSaveToTemplate();
}, {confirmText: locale.i18n.openProject, cancelText: locale.i18n.done, modal: true, closeOnEsc: false});
},
/**
@@ -454,10 +462,12 @@ const projectDepends = {
/** 依赖 API 获取地址 */
urls: {
gradlePaper: 'https://services.gradle.org/distributions',
androidGradlePlugin: 'https://developer.android.google.cn/studio/releases/gradle-plugin.html',
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://s01.oss.sonatype.org/content/repositories/releases/com/highcapable/yukihookapi/api'
sweetDependency: 'https://api.github.com/repos/HighCapable/SweetDependency/releases',
sweetProperty: 'https://api.github.com/repos/HighCapable/SweetProperty/releases',
yukiHookApi: 'https://api.github.com/repos/HighCapable/YuKiHookAPI/releases'
},
/** 搜索项目依赖 */
search() {
@@ -521,21 +531,13 @@ const projectDepends = {
findAgpVersion: () => {
httpClient.requestDepends('Android Gradle Plugin', projectDepends.urls.androidGradlePlugin, (body) => {
dependenciesConfigs.androidGradlePluginVersions = [];
$(body).find('h2').each((_, element) => {
if (valUtils.startsWithNumber(element.innerText))
if (element.innerText.indexOf('') > 0)
dependenciesConfigs.androidGradlePluginVersions.push(element.innerText.split('')[0].trim());
else dependenciesConfigs.androidGradlePluginVersions.push(element.innerText.split('(')[0].trim());
});
$(body).find('.android-updates-box b').each((_, element) => {
if (valUtils.startsWithNumber(element.innerText))
if (element.innerText.indexOf('') > 0)
dependenciesConfigs.androidGradlePluginVersions.push(element.innerText.split('')[0].trim());
else dependenciesConfigs.androidGradlePluginVersions.push(element.innerText.split('(')[0].trim());
});
dependenciesConfigs.androidGradlePluginVersions.sort((a, b) => {
return b.localeCompare(a);
});
const versionsNode = body.getElementsByTagName('version');
let versions = [];
for (let i = versionsNode.length - 1; i >= 0; i--) {
const version = versionsNode[i].innerHTML;
if (version.indexOf('-alpha') < 0 && version.indexOf('-beta') < 0 && version.indexOf('-rc') < 0) versions.push(version);
}
dependenciesConfigs.androidGradlePluginVersions = versions;
if (dependenciesConfigs.androidGradlePluginVersions.length > 0)
projectDepends.findKotlinVersion();
else projectDepends.failure('Android Gradle Plugin', false);
@@ -569,24 +571,42 @@ const projectDepends = {
return !valUtils.isEmpty(value.ksp);
});
if (dependenciesConfigs.kotlinVersions.length > 0)
projectDepends.findYukiHookApiVersion();
projectDepends.findSweetDependencyVersion();
else projectDepends.failure('Kotlin-Ksp', false);
});
},
/** 获取 SweetDependency 版本 */
findSweetDependencyVersion: () => {
httpClient.requestDepends('SweetDependency', projectDepends.urls.sweetDependency, (body) => {
dependenciesConfigs.sweetDependencyVersions = [];
const latestVersion = body.length > 0 ? body[0]['tag_name'] : '';
if (latestVersion !== '') {
dependenciesConfigs.sweetDependencyVersions.push(latestVersion);
/** 直接设置为最新版本 */
projectConfigs.projectDependencies.sweetDependencyVersion = latestVersion;
projectDepends.findSweetPropertyVersion();
} else projectDepends.failure('SweetDependency', false);
});
},
/** 获取 SweetProperty 版本 */
findSweetPropertyVersion: () => {
httpClient.requestDepends('SweetProperty', projectDepends.urls.sweetProperty, (body) => {
dependenciesConfigs.sweetPropertyVersions = [];
const latestVersion = body.length > 0 ? body[0]['tag_name'] : '';
if (latestVersion !== '') {
dependenciesConfigs.sweetPropertyVersions.push(latestVersion);
/** 直接设置为最新版本 */
projectConfigs.projectDependencies.sweetPropertyVersion = latestVersion;
projectDepends.findYukiHookApiVersion();
} else projectDepends.failure('SweetProperty', false);
});
},
/** 获取 YukiHookAPI 版本 */
findYukiHookApiVersion: () => {
httpClient.requestDepends('YukiHookAPI', projectDepends.urls.yukiHookApi, (body) => {
dependenciesConfigs.yukiHookApiVersions = [];
$(body).find('td').each((_, element) => {
if (element.innerText.endsWith('/') && element.innerText.indexOf('fix') < 0)
dependenciesConfigs.yukiHookApiVersions.push(element.innerText.replace('/', '').trim());
});
if (dependenciesConfigs.yukiHookApiVersions.length > 0) {
dependenciesConfigs.yukiHookApiVersions.sort((a, b) => {
return b.localeCompare(a);
});
const latestVersion = dependenciesConfigs.yukiHookApiVersions[0];
dependenciesConfigs.yukiHookApiVersions = [];
const latestVersion = body.length > 0 ? body[0]['tag_name'] : '';
if (latestVersion !== '') {
dependenciesConfigs.yukiHookApiVersions.push(latestVersion);
projectDepends.loaded();
} else projectDepends.failure('YukiHookAPI', false);
@@ -622,11 +642,9 @@ const configTemplate = {
$('#support_resources_hook_select').val(data.yukiHookApiConfig.supportResourcesHook);
$('#enable_debug_select').val(data.yukiHookApiConfig.enableDebug);
$('#enable_debug_log_select').val(data.yukiHookApiConfig.enableDebugLog);
$('#enable_yprefs_cache_select').val(data.yukiHookApiConfig.enableYPrefsCache);
$('#enable_resources_cache_select').val(data.yukiHookApiConfig.enableResourcesCache);
$('#enable_module_status_select').val(data.yukiHookApiConfig.enableModuleStatus);
$('#enable_ychannel_select').val(data.yukiHookApiConfig.enableYChannel);
$('#enable_member_cache_select').val(data.yukiHookApiConfig.enableMemberCache);
monitor.refresh();
moduleScope.refresh(data.basicConfig.moduleScopes);
page.snack(locale.format(locale.i18n.configTemplateLoaded, parse.name));
@@ -732,11 +750,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-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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
@@ -76,6 +76,7 @@ const locale = {
"file": "File",
"help": "Help",
"projectAddress": "Project Address",
"mainProjectAddress": "Main Project Address",
"helpDocumentation": "Help Documentation",
"quit": "Quit",
"project": "Project",
@@ -107,28 +108,26 @@ const locale = {
"agpVersion": "Android Gradle Plugin Version",
"kotlinVersion": "Kotlin Version",
"yukiHookApiVersion": "YukiHookAPI Version",
"createDefaultActivity": "Create default Activity (with active state)",
"createBlankActivity": "Create a blank Activity",
"withoutUiComponents": "No UI components required",
"createDefaultActivity": "Create Default Activity (with active state)",
"createBlankActivity": "Create Blank Activity",
"withoutUiComponents": "No UI Components",
"appMinApiVersion": "App Min API Version",
"appTargetApiVersion": "App Target API Version",
"xposedMinApiVersion": "Xposed Min API Version",
"targetXposedPlatform": "Target Xposed Platform",
"universal": "Universal",
"nativeXposed": "Native Xposed",
"declarationNewXSharePrefs": "Declaration New XShare Prefs (Xposed Min API ≥ 93 was optional)",
"useNewXSharedPreferences": "Use New XSharedPreferences (Xposed Min API ≥ 93 was optional)",
"moduleScope": "Module Scope",
"addApps": "Add apps",
"entryClassName": "Entry class name (When blank use the default value)",
"addResourcesHookSupport": "Add Resources Hook support",
"debugLogTagName": "Debug log TAG name (Default is YukiHookAPI)",
"enableDebugMode": "Enable debug mode",
"enableDebugLog": "Enable debug log output",
"enableYukiHookModulePrefsCache": "Enable YukiHookModulePrefs key-value caching",
"enableModuleResourcesCache": "Enable module Resources caching",
"enableModuleStatus": "Enable module activation status listening",
"enableYukiHookDataChannel": "Enable YukiHookDataChannel feature",
"enableMemberCache": "Enable founded reflection class, method, variable caching",
"addNewApp": "Add New App",
"entryClassName": "Entry Class Name (When blank use the default value)",
"addResourcesHookSupport": "Add Resources Hook Support",
"debugLogTagName": "Debug Log TAG Name (Default is YukiHookAPI)",
"enableDebugMode": "Enable Debug Mode",
"enableDebugLog": "Enable Debug Log Output",
"enableModuleResourcesCache": "Enable Module Resources Cache",
"enableModuleStatus": "Enable Module Activate Status Listener",
"enableYukiHookDataChannel": "Enable YukiHookDataChannel",
"selectScopeAppsOrEnterOnceTip": "Please select the app you need to add to the scope from the list",
"customize": "Customize",
"systemFramework": "System Framework",
@@ -178,8 +177,9 @@ const locale = {
"close": "Close",
"done": "Done",
"later": "Later",
"notConfigure": "Not configured",
"notConfigureDefYes": "Not configured (Default Yes/Enabled)",
"notConfigure": "Not Configured",
"notConfigureDefYes": "Not Configured (Default Yes/Enabled)",
"notConfigureDefNo": "Not Configured (Default No/Disabled)",
"yesOfConfigure": "Yes/Enabled",
"noOfConfigure": "No/Disabled",
"version": "Version",
@@ -187,6 +187,7 @@ const locale = {
"areYouSureRestoreChangeTip": "Are you sure you want to reset all current configs?",
"areYouSureClearAllTemplateTip": "Are you sure you want to clear all config template?",
"doYouWantLoadConfigTemplateTip": "Do you want to load \"{%1}\"? The current config will be overwritten by the template.",
"doYouWantSaveConfigTemplateTip": "Do you need to save the current config as a template for next use? Clicking \"Cancel\" will clear the current config and start creating a new project.",
"ruleCheckFailTip": "Rules retrieval failed, please try again.",
"networkErrorTip": "A network error occurred, please try again.",
"aboutTip": "Helps you quickly create an Xposed project template using YukiHookAPI.",
@@ -211,6 +212,7 @@ const locale = {
"file": "文件",
"help": "帮助",
"projectAddress": "项目地址",
"mainProjectAddress": "主要项目地址",
"helpDocumentation": "帮助文档",
"quit": "退出",
"project": "项目",
@@ -251,19 +253,17 @@ const locale = {
"targetXposedPlatform": "目标 Xposed 平台",
"universal": "通用",
"nativeXposed": "原生 Xposed",
"declarationNewXSharePrefs": "声明 New XShare Prefs (Xposed 最低 API ≥ 93 无需声明)",
"useNewXSharedPreferences": "使用 New XSharedPreferences (Xposed 最低 API ≥ 93 无需声明)",
"moduleScope": "模块作用域",
"addApps": "添加应用",
"addNewApp": "添加应用",
"entryClassName": "入口类名 (不填使用默认值生成)",
"addResourcesHookSupport": "添加 Resources Hook 支持",
"debugLogTagName": "调试日志 TAG 名称 (不填默认为 YukiHookAPI)",
"enableDebugMode": "启用 Debug 模式",
"enableDebugLog": "启用调试日志输出功能",
"enableYukiHookModulePrefsCache": "启用 YukiHookModulePrefs 键值缓存功能",
"enableModuleResourcesCache": "启用模块 Resources 缓存功能",
"enableModuleStatus": "启用模块激活状态监听功能",
"enableYukiHookDataChannel": "启用 YukiHookDataChannel 功能",
"enableMemberCache": "启用已查找的反射类、方法、变量缓存功能",
"selectScopeAppsOrEnterOnceTip": "请从下面的列表中选择你需要添加到作用域中的应用",
"customize": "自定义",
"systemFramework": "系统框架",
@@ -315,6 +315,7 @@ const locale = {
"later": "稍后",
"notConfigure": "未配置",
"notConfigureDefYes": "未配置 (默认 是/Yes)",
"notConfigureDefNo": "未配置 (默认 否/No)",
"yesOfConfigure": "是/Yes",
"noOfConfigure": "否/No",
"version": "版本",
@@ -322,6 +323,7 @@ const locale = {
"areYouSureRestoreChangeTip": "还原当前所做的全部更改吗?",
"areYouSureClearAllTemplateTip": "清空全部已保存的配置模板吗?",
"doYouWantLoadConfigTemplateTip": "要加载 \"{%1}\" 吗?当前配置会被模板覆盖。",
"doYouWantSaveConfigTemplateTip": "你需要保存当前配置为模版以供下次使用吗?点击“取消”将清空当前配置并开始创建新项目。",
"ruleCheckFailTip": "规则检索失败,请再试一次。",
"networkErrorTip": "网络发生错误,请再试一次。",
"aboutTip": "帮助你快速创建一个使用 YukiHookAPI 打造的 Xposed 项目模板。",
@@ -346,6 +348,7 @@ const locale = {
"file": "フェルオ",
"help": "ヘルプ",
"projectAddress": "プロジェクトアドレス",
"mainProjectAddress": "マンプロジェクトアドレス",
"helpDocumentation": "ヘルプドキュメント",
"quit": "終了する",
"project": "プロジェクト",
@@ -386,19 +389,17 @@ const locale = {
"targetXposedPlatform": "ターゲットXposedプラットフォーム",
"universal": "ユニバーサル",
"nativeXposed": "ネイティブXposed",
"declarationNewXSharePrefs": "宣言新しいXShare設定Xposed最小API≥93宣言は不要",
"useNewXSharedPreferences": "使い New XSharedPreferences (Xposed 最小 API ≥ 93 使いない)",
"moduleScope": "モジュールスコープ",
"addApps": "アプリを追加",
"addNewApp": "アプリを追加",
"entryClassName": "エントリクラス名(デフォルトを使用するには空)",
"addResourcesHookSupport": "リソースフックのサポートを追加",
"debugLogTagName": "デバッググロタグ名デフォルトはYukiHookAPI",
"enableDebugMode": "デバッグモードを有効にする",
"enableDebugLog": "デバッグログ出力を有効にする",
"enableYukiHookModulePrefsCache": "YukiHookModulePrefsのKey-Valueキャッシングを有効にする",
"enableModuleResourcesCache": "モジュールリソースのキャッシュを有効にする",
"enableModuleStatus": "モジュールのアクティブ化ステータスの監視を有効にする",
"enableYukiHookDataChannel": "YukiHookDataChannel機能を有効にする",
"enableMemberCache": "クエリされたリフレクションクラス、メソッド、変数キャッシングを有効にする",
"selectScopeAppsOrEnterOnceTip": "以下のリストからスコープに追加するアプリを選択してください",
"customize": "カスタマイズ",
"systemFramework": "システムフレームワーク",
@@ -450,6 +451,7 @@ const locale = {
"later": "後で",
"notConfigure": "構成されていません",
"notConfigureDefYes": "構成されていません (デフォルトは はい/Yes)",
"notConfigureDefNo": "構成されていません (デフォルトは いいえ/No)",
"yesOfConfigure": "はい/Yes",
"noOfConfigure": "いいえ/No",
"version": "バージョン",
@@ -457,6 +459,7 @@ const locale = {
"areYouSureRestoreChangeTip": "現在のすべての変更を元に戻しますか",
"areYouSureClearAllTemplateTip": "保存されているすべての構成テンプレートをクリアしますか",
"doYouWantLoadConfigTemplateTip": "「{%1}」をロードしますか?現在の構成はテンプレートによって上書きされます。",
"doYouWantSaveConfigTemplateTip": "次回使用するために現在の構成をテンプレートとして保存する必要がありますか? 「キャンセル」をクリックすると、現在の構成がクリアされ、新しいプロジェクトの作成が開始されます。",
"ruleCheckFailTip": "ルールの取得に失敗しました。もう一度やり直してください。",
"networkErrorTip": "ネットワークエラーが発生しました。もう一度やり直してください。",
"aboutTip": "YukiHookAPIを使用してXposedプロジェクトテンプレートをすばやく作成するのに役立ちます。",

View File

@@ -1,7 +1,7 @@
/*
* YukiHookAPI Project Builder - A Xposed Project Builder by YukiHookAPI.
* Copyright (C) 2019-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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-2022 HighCapable
* https://github.com/fankes/YukiHookAPI-ProjectBuilder
* Copyright (C) 2019 HighCapable
* 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.9.0'
},
appcompat: {
type: 'implementation',
groupId: 'androidx.appcompat',
artifactId: 'appcompat',
version: '1.5.1'
},
material: {
type: 'implementation',
groupId: 'com.google.android.material',
artifactId: 'material',
version: '1.6.1'
},
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.3'
},
androidxTestEspresso: {
type: 'androidTestImplementation',
groupId: 'androidx.test.espresso',
artifactId: 'espresso-core',
version: '3.4.0'
}
}
},
'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: {
@@ -215,11 +131,8 @@ const transaction = {
enable: (isEnabled) => 'isEnable = ' + (isEnabled ? 'true' : 'false')
},
enableDebug: (isEnabled) => 'isDebug = ' + (isEnabled ? 'true' : 'false'),
enableYPrefsCache: (isEnabled) => 'isEnableModulePrefsCache = ' + (isEnabled ? 'true' : 'false'),
enableResourcesCache: (isEnabled) => 'isEnableModuleAppResourcesCache = ' + (isEnabled ? 'true' : 'false'),
enableModuleStatus: (isEnabled) => 'isEnableHookModuleStatus = ' + (isEnabled ? 'true' : 'false'),
enableYChannel: (isEnabled) => 'isEnableDataChannel = ' + (isEnabled ? 'true' : 'false'),
enableMemberCache: (isEnabled) => 'isEnableMemberCache = ' + (isEnabled ? 'true' : 'false')
enableYChannel: (isEnabled) => 'isEnableDataChannel = ' + (isEnabled ? 'true' : 'false')
}
},
'MainActivity.kt': {
@@ -328,6 +241,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(',')) :
@@ -350,82 +268,27 @@ const transaction = {
if (configs.yukiHookApiConfig.enableDebug !== 0)
hookEntryConfigsCode = codeFiles.append(hookEntryConfigsCode,
codeFiles['HookEntry.kt'].configs.enableDebug(configs.yukiHookApiConfig.enableDebug === 1));
if (configs.yukiHookApiConfig.enableYPrefsCache !== 0)
hookEntryConfigsCode = codeFiles.append(hookEntryConfigsCode,
codeFiles['HookEntry.kt'].configs.enableYPrefsCache(configs.yukiHookApiConfig.enableYPrefsCache === 1));
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));
if (configs.yukiHookApiConfig.enableMemberCache !== 0)
hookEntryConfigsCode = codeFiles.append(hookEntryConfigsCode,
codeFiles['HookEntry.kt'].configs.enableMemberCache(configs.yukiHookApiConfig.enableMemberCache === 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: configs.projectDependencies.sweetDependencyVersion
}, {
placeholder: '{SWEETPROPERTY_VERSION}',
value: configs.projectDependencies.sweetPropertyVersion
}, {
placeholder: '{AGP_VERSION}',
value: configs.projectDependencies.androidGradlePluginVersion
@@ -465,9 +328,6 @@ const transaction = {
}, {
placeholder: '{SCOPE_ITEMS}',
value: moduleScopesCode
}, {
placeholder: '{GRADLE_DEPENDENCIES}',
value: gradleDependenciesCode
}, {
placeholder: '{YUKIHOOKAPI_MODULE_ACTIVE_STATUS}',
value: moduleActiveStatusCode

7840
yarn.lock

File diff suppressed because it is too large Load Diff