Skip to content

Commit

Permalink
构建:迁移到 Yukihook 1.2.0 最新引入的 New Hook Code Style
Browse files Browse the repository at this point in the history
新增:提供了圆屏适配的支持
新增:支持包名和设备双约束条件的规则集
修正:解决了进入应用和退出应用后欢迎消息仍反复弹出的问题
调整:现在 `config.xml` 将作为官方维护的配置,原有的教学用文件则迁移至 `example.xml`
调整:更改了配置文件的规则语法
调整:更改了 README 中的一些表述
  • Loading branch information
jiwangyihao committed Oct 29, 2023
1 parent c405661 commit d57b717
Show file tree
Hide file tree
Showing 15 changed files with 457 additions and 253 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,5 @@
/captures
.externalNativeBuild
.cxx
local.properties
local.properties
/app/release/
10 changes: 10 additions & 0 deletions .idea/codeStyles/Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions .idea/codeStyles/codeStyleConfig.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 0 additions & 17 deletions .idea/deploymentTargetDropDown.xml

This file was deleted.

8 changes: 8 additions & 0 deletions .idea/dictionaries/jwyh.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 0 additions & 2 deletions .idea/gradle.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions .idea/inspectionProfiles/Project_Default.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

92 changes: 66 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,41 @@

- 支持修改应用内 DPI(配置时使用「最小宽度」)
- 支持在不允许获取「读取应用列表」权限的设备上模拟「读取应用列表」权限
- 可以按设备生效的自定义配置
- 支持为应用内界面增加边距以实现圆屏适配
- 可以按设备和应用生效的自定义配置
- 以规则集为单位
- 设备与应用包名双条件约束
- 可以自定义最小宽度大小
- 可以自定义模拟权限情况
- 可以自定义圆屏适配时界面容器的长宽比例
- 可以自定义圆屏适配时界面的缩放系数

## 配置文件说明

自定义配置不提供 GUI 配置界面,请自行使用「MT 管理器」等工具修改模块 apk 内的 [`assets/config.xml`](https://github.com/jiwangyihao/app_config/blob/main/app/src/main/assets/config.xml) 文件进行配置。

示例文件如下(你也可以点击上面的链接查看当前最新版本):
**欢迎提交 Pull Request 来让我们的默认配置更好!**

_即使你没有能力更改配置文件,也可以通过 Issue 来帮助我们!_

示例文件如下(你也可以点击 [`assets/example.xml`](https://github.com/jiwangyihao/app_config/blob/main/app/src/main/assets/config.xml) 查看当前最新版本):
``` xml
<?xml version="1.0" encoding="utf-8" ?>
<!-- 这是一份示例配置,对它的修改 **不会** 起效 -->

<!-- <config> 是整个配置文件的根元素 -->
<!-- 每个配置文件中只能有一个 <config> -->
<!-- author 属性用于标记当前配置的作者 -->
<!-- 既然你已经看到了这段注释,那么,作为修改配置的开始 -->
<!-- 把它改成你的 ID 吧! -->
<config author="吉王义昊">
<!-- <device> 标签标记一组设备配置,name 属性用于标记需生效的设备代码 -->
<!-- <rule-set> 标签标记一组配置,device 属性用于标记需生效的设备代码 -->
<!-- 机型代码可使用「设备信息」获取(「设备」选项卡下第一个卡片的「设备」项) -->
<!-- 当 device.name 为 default 时,该组配置对所有设备生效 -->
<device name="default">
<!-- 当不存在 device 属性时,该组配置对所有设备生效 -->
<!-- package 属性用于标记需生效的宿主应用包名 -->
<!-- 宿主应用包名可使用 MT 管理器获取 -->
<!-- 当不存在 package 属性时,该组配置对所有宿主应用生效 -->
<rule-set>
<!-- 最小宽度设置(整数型,默认值是 320) -->
<!-- 该项设置与开发者选项中的最小宽度效果基本相同 -->
<!-- (部分系统,比如 MIUI 的开发者选项内的最小宽度设置存在问题,可能效果会不同) -->
Expand All @@ -34,38 +50,62 @@
<!-- 最小宽度与 dpi 之间的换算关系为: -->
<!-- 最小宽度 * dpi / 160 = 屏幕短边物理像素数 -->
<!-- 注意:尽管使用本模块无需考虑对系统的影响,但过大或者过小的数值可能会不生效 -->
<!-- 注意:当开启圆屏适配后,会忽略被裁切的那部分屏幕大小 -->
<!-- 也就是说,新的换算关系为: -->
<!-- 最小宽度 * dpi / 160 = 容器宽上的物理像素数 -->
<item name="minWidth">320</item>
<!-- 模拟应用列表权限(布尔型,默认值是 true) -->
<item name="fakeAppList">true</item>
</device>
<!-- 单独设备配置,该配置会对机型代码是 example 的设备生效 -->
<device name="example">
<!-- 单独设备配置可以只配置部分项目 -->
<!-- 开启圆屏适配(布尔型,默认值是 true) -->
<!-- 注意:只有当屏幕高度与宽度之比在 0.9~1.1 时该配置才会生效 -->
<item name="round">true</item>
<!-- 强制开启圆屏适配(布尔型,默认值是 false) -->
<!-- 即使屏幕高度与宽度之比在 0.9~1.1 外也开启圆屏适配 -->
<item name="forceRound">false</item>
<!-- 圆屏适配下界面容器的大小(浮点型,默认值是 1.0) -->
<!-- 当该项设置被设置为 1.0 时,界面容器会被缩小为全屏的 1/√2 -->
<!-- 经过简单的数学推导即可得到这就是一个圆中最大正方形的大小 -->
<!-- 当该项设置被修改后,界面容器会在 1.0 缩放的基础上乘该值 -->
<!-- 也就是说,当设置为 1.1 时,界面容器会在 1.0 的基础上增大 10% -->
<!-- 实际上该项设置的是界面容器对角线的长度,默认为圆形屏幕的直径 -->
<item name="roundSize">1.0</item>
<!-- 圆屏适配下界面容器的比例(浮点型,默认值是 1.0) -->
<!-- 容器高度除以宽度所得的结果 -->
<!-- 当该项设置被设置为 1.0 时,界面容器是一个标准正方形 -->
<item name="roundRatio">1.5</item>
</rule-set>
<!-- 单独配置,当在机型代码是 round-device 的设备上运行时,该配置生效 -->
<rule-set device="round-device">
<!-- 单独配置可以只配置部分项目 -->
<item name="minWidth">268</item>
<!-- 为某个圆形屏幕的设备开启圆屏适配 -->
<item name="round">true</item>
</rule-set>
<!-- 单独配置,当在包名是 com.example.app 的宿主应用上运行时,该配置生效 -->
<rule-set package="com.example.app">
<!-- 单独配置可以只配置部分项目 -->
<item name="minWidth">268</item>
</device>
</rule-set>
<!-- 设备与应用的限制条件可以组合,当在机型代码是 example-device 并且包名是 com.example.app 的宿主应用上运行时,该配置生效 -->
<rule-set package="com.example.app">
<!-- 单独配置可以只配置部分项目 -->
<item name="minWidth">268</item>
</rule-set>
</config>
<!-- 所有符合条件的配置都会被应用(通用设备配置或者与当前设备机型代码相同的配置) -->
<!-- 重复的配置项会互相覆盖,写在后面的配置项优先级更高,会覆盖前面的配置项 -->
<!-- 值得注意的是,单独设备配置并不享有额外的优先级 -->
<!-- 也就是说,如果你把通用设备配置写在最后,所有的单独设备配置都无法生效 -->

<!-- 警告:尽管编写模块时做了容错处理,但错误的配置仍然可能使模块部分甚至整体失效 -->

<!-- 考虑到一份配置文件大概不太可能只有一个作者 -->
<!-- 但是 Toast 本身又不欢迎过长的文字(笑 -->
<!-- config.author 最好只标注这份配置文件的最后修改者 -->
<!-- 配置文件的编辑历史就写在这下面好了 -->
<!-- (这几个字用不了几 kB 的,^.^) -->
<!-- 所有符合条件的配置都会被应用(通用配置或者符合限制条件的配置) -->
<!-- 写在后面的配置项优先级更高,后面的配置项会覆盖前面的已有配置项 -->
<!-- 值得注意的是,单独配置并不享有额外的优先级(与 CSS 不同) -->
<!-- 也就是说,如果你把通用配置写在最后,所有的单独配置都无法生效 -->

<!-- 2023-7-10 创建 by 吉王义昊 -->
<!-- 2023-7-11 修改 by 吉王义昊 -->
<!-- 警告:尽管编写模块时做了容错处理,但错误的配置仍然可能使模块部分甚至整体失效 -->
```

## 鸣谢

本应用主要基于(或者参考)了以下开源项目:
https://github.com/fankes/YukiHookAPI
https://github.com/square/okio
https://github.com/BlueCat300/XposedAppSettings
- https://github.com/fankes/YukiHookAPI
- https://github.com/square/okio
- https://github.com/BlueCat300/XposedAppSettings

(详见依赖)
9 changes: 4 additions & 5 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ android {
release {
minifyEnabled rootProject.ext.enableR8
shrinkResources rootProject.ext.enableR8
zipAlignEnabled rootProject.ext.enableR8
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Expand All @@ -43,16 +42,16 @@ android {
buildFeatures {
viewBinding true
}
lintOptions {
namespace 'top.jwyihao.appconfig'
lint {
checkReleaseBuilds false
}
namespace 'top.jwyihao.appconfig'
}

dependencies {
compileOnly 'de.robv.android.xposed:api:82'
implementation 'com.highcapable.yukihookapi:api:1.1.9'
ksp 'com.highcapable.yukihookapi:ksp-xposed:1.1.9'
implementation 'com.highcapable.yukihookapi:api:1.2.0'
ksp 'com.highcapable.yukihookapi:ksp-xposed:1.2.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
Expand Down
52 changes: 20 additions & 32 deletions app/src/main/assets/config.xml
Original file line number Diff line number Diff line change
@@ -1,45 +1,33 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- <config> 是整个配置文件的根元素 -->
<!-- 每个配置文件中只能有一个 <config> -->
<!-- author 属性用于标记当前配置的作者 -->
<!-- 既然你已经看到了这段注释,那么,作为修改配置的开始 -->
<!-- 把它改成你的 ID 吧! -->
<!-- 有关配置文件的具体说明请参见 example.xml -->
<config author="吉王义昊">
<!-- <device> 标签标记一组设备配置,name 属性用于标记需生效的设备代码 -->
<!-- 机型代码可使用「设备信息」获取(「设备」选项卡下第一个卡片的「设备」项) -->
<!-- 当 device.name 为 default 时,该组配置对所有设备生效 -->
<device name="default">
<!-- 最小宽度设置(整数型,默认值是 320) -->
<!-- 该项设置与开发者选项中的最小宽度效果基本相同 -->
<!-- (部分系统,比如 MIUI 的开发者选项内的最小宽度设置存在问题,可能效果会不同) -->
<!-- 最小宽度表示屏幕在宽上以 dp 表示的长度 -->
<!-- 最小宽度越大,屏幕能容纳的独立像素(dp)就越多,能显示的内容就越多 -->
<!-- 相应的界面元素就越小 -->
<!-- 最小宽度与 dpi 之间的换算关系为: -->
<!-- 最小宽度 * dpi / 160 = 屏幕短边物理像素数 -->
<!-- 注意:尽管使用本模块无需考虑对系统的影响,但过大或者过小的数值可能会不生效 -->
<!-- 默认配置,作用于所有设备和应用 -->
<rule-set>
<item name="minWidth">320</item>
<!-- 模拟应用列表权限(布尔型,默认值是 true) -->
<item name="fakeAppList">true</item>
</device>
<!-- 单独设备配置,该配置会对机型代码是 example 的设备生效 -->
<device name="example">
<!-- 单独设备配置可以只配置部分项目 -->
<item name="minWidth">268</item>
</device>
<item name="round">true</item>
<item name="forceRound">false</item>
<!-- 圆屏适配的放大倍数,稍微切掉一点边角换取更大的有效显示区域 -->
<item name="roundSize">1.05</item>
<!-- 圆屏适配的显示区域比例,1.2 与魅族手表的屏幕比例接近 -->
<item name="roundRatio">1.2</item>
</rule-set>
<!-- 绿联私有云 -->
<rule-set package="com.ugreen.nas">
<!-- 要能点到登录按钮 -->
<item name="minWidth">500</item>
<item name="fakeAppList">false</item>
</rule-set>
</config>
<!-- 所有符合条件的配置都会被应用(通用设备配置或者与当前设备机型代码相同的配置) -->
<!-- 重复的配置项会互相覆盖,写在后面的配置项优先级更高,会覆盖前面的配置项 -->
<!-- 值得注意的是,单独设备配置并不享有额外的优先级 -->
<!-- 也就是说,如果你把通用设备配置写在最后,所有的单独设备配置都无法生效 -->

<!-- 警告:尽管编写模块时做了容错处理,但错误的配置仍然可能使模块部分甚至整体失效 -->

<!-- 考虑到一份配置文件大概不太可能只有一个作者 -->
<!-- 但是 Toast 本身又不欢迎过长的文字(笑 -->
<!-- config.author 最好只标注这份配置文件的最后修改者 -->
<!-- 配置文件的编辑历史就写在这下面好了 -->
<!-- (这几个字用不了几 kB 的,^.^) -->
<!-- 欢迎在 GitHub 中通过 Pull Request 提交你的配置文件 -->

<!-- 2023-7-10 创建 by 吉王义昊 -->
<!-- 2023-7-11 修改 by 吉王义昊 -->
<!-- 2023-7-11 修改 by 吉王义昊 -->
<!-- 2023-10-28 修改 by 吉王义昊 -->
<!-- 2023-10-29 修改 by 吉王义昊 -->
Loading

0 comments on commit d57b717

Please sign in to comment.