mirror of
https://github.com/HighCapable/YukiHookAPI.git
synced 2025-09-06 02:35:40 +08:00
Compare commits
11 Commits
1.3.0
...
e1544a8ae3
Author | SHA1 | Date | |
---|---|---|---|
e1544a8ae3
|
|||
276503ccf4
|
|||
36bb1bf108
|
|||
edb22f1bd3
|
|||
61c0c5960b
|
|||
3dbc33a301
|
|||
03304e3c22
|
|||
7c9e84f0ed
|
|||
|
525d716256 | ||
a136832e77
|
|||
243ec6ea1e
|
2
.idea/kotlinc.xml
generated
2
.idea/kotlinc.xml
generated
@@ -7,6 +7,6 @@
|
|||||||
<option name="additionalArguments" value="-version -Xopt-in=kotlin.RequiresOptIn" />
|
<option name="additionalArguments" value="-version -Xopt-in=kotlin.RequiresOptIn" />
|
||||||
</component>
|
</component>
|
||||||
<component name="KotlinJpsPluginSettings">
|
<component name="KotlinJpsPluginSettings">
|
||||||
<option name="version" value="2.1.10" />
|
<option name="version" value="2.2.10" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@@ -31,6 +31,11 @@
|
|||||||
|
|
||||||
有关支持性的相关信息,你可以直接 [点击这里](https://highcapable.github.io/YukiHookAPI/zh-cn/guide/supportive) 进行查看。
|
有关支持性的相关信息,你可以直接 [点击这里](https://highcapable.github.io/YukiHookAPI/zh-cn/guide/supportive) 进行查看。
|
||||||
|
|
||||||
|
| <img src="https://github.com/HighCapable/KavaRef/blob/main/img-src/icon.svg?raw=true" width = "30" height = "30" alt="LOGO"/> | [KavaRef](https://github.com/HighCapable/KavaRef) |
|
||||||
|
|-------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|
|
||||||
|
|
||||||
|
🚀 `YukiHookAPI` 正使用 `KavaRef` 作为反射 API 强力驱动,**点击上方链接 star 这个项目**,你也可以优雅地使用它!
|
||||||
|
|
||||||
## 合作项目
|
## 合作项目
|
||||||
|
|
||||||
以下是经过合作并稳定使用 `YukiHookAPI` 的项目。
|
以下是经过合作并稳定使用 `YukiHookAPI` 的项目。
|
||||||
|
@@ -32,6 +32,12 @@ Formerly the Innocent Xposed API used in [Development Learning Project](https://
|
|||||||
|
|
||||||
For supportive related information, you can check it directly [click here](https://highcapable.github.io/YukiHookAPI/en/guide/supportive).
|
For supportive related information, you can check it directly [click here](https://highcapable.github.io/YukiHookAPI/en/guide/supportive).
|
||||||
|
|
||||||
|
| <img src="https://github.com/HighCapable/KavaRef/blob/main/img-src/icon.svg?raw=true" width = "30" height = "30" alt="LOGO"/> | [KavaRef](https://github.com/HighCapable/KavaRef) |
|
||||||
|
|-------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------|
|
||||||
|
|
||||||
|
🚀 `YukiHookAPI` is using `KavaRef` as a powerful driver for the reflection API.
|
||||||
|
**Click on the link above star project**, and you can also use it gracefully!
|
||||||
|
|
||||||
## Cooperations
|
## Cooperations
|
||||||
|
|
||||||
The following are projects that have collaborated and are using `YukiHookAPI`.
|
The following are projects that have collaborated and are using `YukiHookAPI`.
|
||||||
|
@@ -1,7 +1,23 @@
|
|||||||
|
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
autowire(libs.plugins.android.application) apply false
|
autowire(libs.plugins.android.application) apply false
|
||||||
autowire(libs.plugins.android.library) apply false
|
autowire(libs.plugins.android.library) apply false
|
||||||
autowire(libs.plugins.kotlin.jvm) apply false
|
autowire(libs.plugins.kotlin.jvm) apply false
|
||||||
autowire(libs.plugins.kotlin.android) apply false
|
autowire(libs.plugins.kotlin.android) apply false
|
||||||
autowire(libs.plugins.kotlin.ksp) apply false
|
autowire(libs.plugins.kotlin.ksp) apply false
|
||||||
|
}
|
||||||
|
|
||||||
|
allprojects {
|
||||||
|
tasks.withType<KotlinJvmCompile>().configureEach {
|
||||||
|
compilerOptions {
|
||||||
|
jvmTarget = JvmTarget.JVM_17
|
||||||
|
freeCompilerArgs.addAll(
|
||||||
|
"-Xno-param-assertions",
|
||||||
|
"-Xno-call-assertions",
|
||||||
|
"-Xno-receiver-assertions"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@@ -1,6 +1,6 @@
|
|||||||
# Contact Us
|
# Contact Us
|
||||||
|
|
||||||
> If you have any questions in use, or have any constructive suggestions, you can contact us.
|
> If you have any questions during usage, or have any constructive suggestions, you can contact us.
|
||||||
|
|
||||||
Join our developers group.
|
Join our developers group.
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
# Looking for Future
|
# Looking Toward the Future
|
||||||
|
|
||||||
> The future is bright and uncertain, let us look forward to the future development space of `YukiHookAPI`.
|
> The future is bright and uncertain, let us look forward to the future development space of `YukiHookAPI`.
|
||||||
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
# Introduce
|
# Introduction
|
||||||
|
|
||||||
> `YukiHookAPI` is an integrated Hook API Framework, which does not provide any Hook functions, and needs the support of Xposed related basic APIs.
|
> `YukiHookAPI` is an integrated Hook API Framework, which does not provide any Hook functions, and needs the support of Xposed related basic APIs.
|
||||||
|
|
||||||
|
@@ -6,9 +6,9 @@
|
|||||||
|
|
||||||
The project needs to be created using `Android Studio` or `IntelliJ IDEA` and be of type Android project and have integrated Kotlin environment dependencies.
|
The project needs to be created using `Android Studio` or `IntelliJ IDEA` and be of type Android project and have integrated Kotlin environment dependencies.
|
||||||
|
|
||||||
- Android Studio (It is recommended to get the latest version [from here](https://developer.android.com/studio))
|
- Android Studio (It is recommended to get the latest version from [here](https://developer.android.com/studio))
|
||||||
|
|
||||||
- IntelliJ IDEA (It is recommended to get the latest version [from here](https://www.jetbrains.com/idea))
|
- IntelliJ IDEA (It is recommended to get the latest version from [here](https://www.jetbrains.com/idea))
|
||||||
|
|
||||||
- Kotlin 1.9.0+, Gradle 8+, Java 11, 17+, Android Gradle Plugin 8+
|
- Kotlin 1.9.0+, Gradle 8+, Java 11, 17+, Android Gradle Plugin 8+
|
||||||
|
|
||||||
@@ -73,7 +73,7 @@ libraries:
|
|||||||
|
|
||||||
After adding it, run Gradle Sync and all dependencies will be autowired.
|
After adding it, run Gradle Sync and all dependencies will be autowired.
|
||||||
|
|
||||||
Next, deploy plugins in your project `build.gradle.kts`.
|
Next, deploy plugins in your project's `build.gradle.kts`.
|
||||||
|
|
||||||
> The following example
|
> The following example
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, deploy dependencies in your project `build.gradle.kts`.
|
Then, deploy dependencies in your project's `build.gradle.kts`.
|
||||||
|
|
||||||
> The following example
|
> The following example
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ dependencies {
|
|||||||
|
|
||||||
#### Version Catalog
|
#### Version Catalog
|
||||||
|
|
||||||
Add repositories in your project `build.gradle.kts`.
|
Add repositories in your project's `build.gradle.kts`.
|
||||||
|
|
||||||
> Kotlin DSL
|
> Kotlin DSL
|
||||||
|
|
||||||
@@ -113,8 +113,8 @@ Add repositories in your project `build.gradle.kts`.
|
|||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
// Must be added when used as an Xposed Module, otherwise optional
|
// Must be added when used as an Xposed Module, otherwise optional
|
||||||
maven { url("https://api.xposed.info/") }
|
maven("https://api.xposed.info/")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ kavaref-extension = { module = "com.highcapable.kavaref:kavaref-extension", vers
|
|||||||
xposed-api = { module = "de.robv.android.xposed:api", version = "82" }
|
xposed-api = { module = "de.robv.android.xposed:api", version = "82" }
|
||||||
```
|
```
|
||||||
|
|
||||||
Next, deploy plugins in your project `build.gradle.kts`.
|
Next, deploy plugins in your project's `build.gradle.kts`.
|
||||||
|
|
||||||
> Kotlin DSL
|
> Kotlin DSL
|
||||||
|
|
||||||
@@ -156,7 +156,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, deploy dependencies in your project `build.gradle.kts`.
|
Then, deploy dependencies in your project's `build.gradle.kts`.
|
||||||
|
|
||||||
> Kotlin DSL
|
> Kotlin DSL
|
||||||
|
|
||||||
@@ -176,7 +176,7 @@ dependencies {
|
|||||||
|
|
||||||
#### Traditional Method
|
#### Traditional Method
|
||||||
|
|
||||||
Add repositories in your project `build.gradle.kts`.
|
Add repositories in your project's `build.gradle.kts`.
|
||||||
|
|
||||||
> Kotlin DSL
|
> Kotlin DSL
|
||||||
|
|
||||||
@@ -185,11 +185,11 @@ repositories {
|
|||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
// Must be added when used as an Xposed Module, otherwise optional
|
// Must be added when used as an Xposed Module, otherwise optional
|
||||||
maven { url("https://api.xposed.info/") }
|
maven("https://api.xposed.info/")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Add plugins in your project `build.gradle.kts`.
|
Add plugins in your project's `build.gradle.kts`.
|
||||||
|
|
||||||
> Kotlin DSL
|
> Kotlin DSL
|
||||||
|
|
||||||
@@ -200,7 +200,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Add dependencies in your project `build.gradle.kts`.
|
Add dependencies in your project's `build.gradle.kts`.
|
||||||
|
|
||||||
> Kotlin DSL
|
> Kotlin DSL
|
||||||
|
|
||||||
|
@@ -20,7 +20,7 @@ features:
|
|||||||
details: Natively supports multiple Xposed API usages and natively connects to multiple Xposed APIs, Hook Frameworks within the supported range can be quickly integrated.
|
details: Natively supports multiple Xposed API usages and natively connects to multiple Xposed APIs, Hook Frameworks within the supported range can be quickly integrated.
|
||||||
- title: Obfuscate Support
|
- title: Obfuscate Support
|
||||||
details: The built Xposed Module simply supports R8, obfuscate will not destroy the hook entry point, and no other configuration is required under R8.
|
details: The built Xposed Module simply supports R8, obfuscate will not destroy the hook entry point, and no other configuration is required under R8.
|
||||||
- title: Quickly Started
|
- title: Quick to Start
|
||||||
details: Simple and easy to use it now! Do not need complex configuration and full development experience, Integrate dependencies and enjoy yourself.
|
details: Simple and easy to use it now! Do not need complex configuration and full development experience, Integrate dependencies and enjoy yourself.
|
||||||
footer: Apache-2.0 License | Copyright (C) 2019 HighCapable
|
footer: Apache-2.0 License | Copyright (C) 2019 HighCapable
|
||||||
---
|
---
|
||||||
|
@@ -6,9 +6,9 @@
|
|||||||
|
|
||||||
项目需要使用 `Android Studio` 或 `IntelliJ IDEA` 创建且类型为 Android 项目并已集成 Kotlin 环境依赖。
|
项目需要使用 `Android Studio` 或 `IntelliJ IDEA` 创建且类型为 Android 项目并已集成 Kotlin 环境依赖。
|
||||||
|
|
||||||
- Android Studio (建议 [从这里](https://developer.android.com/studio) 获取最新版本)
|
- Android Studio (建议从 [这里](https://developer.android.com/studio) 获取最新版本)
|
||||||
|
|
||||||
- IntelliJ IDEA (建议 [从这里](https://www.jetbrains.com/idea) 获取最新版本)
|
- IntelliJ IDEA (建议从 [这里](https://www.jetbrains.com/idea) 获取最新版本)
|
||||||
|
|
||||||
- Kotlin 1.9.0+、Gradle 8+、Java 11、17+、Android Gradle Plugin 8+
|
- Kotlin 1.9.0+、Gradle 8+、Java 11、17+、Android Gradle Plugin 8+
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ repositories {
|
|||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
// 作为 Xposed 模块使用务必添加,其它情况可选
|
// 作为 Xposed 模块使用务必添加,其它情况可选
|
||||||
maven { url("https://api.xposed.info/") }
|
maven("https://api.xposed.info/")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -185,7 +185,7 @@ repositories {
|
|||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
// 作为 Xposed 模块使用务必添加,其它情况可选
|
// 作为 Xposed 模块使用务必添加,其它情况可选
|
||||||
maven { url("https://api.xposed.info/") }
|
maven("https://api.xposed.info/")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@@ -3,7 +3,6 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
|||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.nonTransitiveRClass=true
|
android.nonTransitiveRClass=true
|
||||||
kotlin.code.style=official
|
kotlin.code.style=official
|
||||||
kotlin.incremental.useClasspathSnapshot=true
|
|
||||||
# Project Configuration
|
# Project Configuration
|
||||||
project.name=YukiHookAPI
|
project.name=YukiHookAPI
|
||||||
project.url=https://github.com/HighCapable/YukiHookAPI
|
project.url=https://github.com/HighCapable/YukiHookAPI
|
||||||
@@ -12,9 +11,9 @@ project.yukihookapi-core.moduleName=api
|
|||||||
project.yukihookapi-core.version="1.3.0"
|
project.yukihookapi-core.version="1.3.0"
|
||||||
project.yukihookapi-ksp-xposed.moduleName=ksp-xposed
|
project.yukihookapi-ksp-xposed.moduleName=ksp-xposed
|
||||||
project.yukihookapi-ksp-xposed.version=${project.yukihookapi-core.version}
|
project.yukihookapi-ksp-xposed.version=${project.yukihookapi-core.version}
|
||||||
project.android.compileSdk=35
|
project.android.compileSdk=36
|
||||||
project.android.minSdk=21
|
project.android.minSdk=21
|
||||||
project.android.targetSdk=35
|
project.android.targetSdk=36
|
||||||
project.samples-demo-app.packageName=${project.groupName}.demo_app
|
project.samples-demo-app.packageName=${project.groupName}.demo_app
|
||||||
project.samples-demo-app.versionName=universal
|
project.samples-demo-app.versionName=universal
|
||||||
project.samples-demo-app.versionCode=1
|
project.samples-demo-app.versionCode=1
|
||||||
|
@@ -19,22 +19,22 @@ repositories:
|
|||||||
plugins:
|
plugins:
|
||||||
org.jetbrains.kotlin.jvm:
|
org.jetbrains.kotlin.jvm:
|
||||||
alias: kotlin-jvm
|
alias: kotlin-jvm
|
||||||
version: 2.1.10
|
version: 2.2.10
|
||||||
org.jetbrains.kotlin.android:
|
org.jetbrains.kotlin.android:
|
||||||
alias: kotlin-android
|
alias: kotlin-android
|
||||||
version-ref: kotlin-jvm
|
version-ref: kotlin-jvm
|
||||||
com.google.devtools.ksp:
|
com.google.devtools.ksp:
|
||||||
alias: kotlin-ksp
|
alias: kotlin-ksp
|
||||||
version: 2.1.10-1.0.31
|
version: 2.2.10-2.0.2
|
||||||
com.android.application:
|
com.android.application:
|
||||||
alias: android-application
|
alias: android-application
|
||||||
version: 8.9.3
|
version: 8.12.1
|
||||||
com.android.library:
|
com.android.library:
|
||||||
alias: android-library
|
alias: android-library
|
||||||
version-ref: android-application
|
version-ref: android-application
|
||||||
com.vanniktech.maven.publish:
|
com.vanniktech.maven.publish:
|
||||||
alias: maven-publish
|
alias: maven-publish
|
||||||
version: 0.33.0
|
version: 0.34.0
|
||||||
|
|
||||||
libraries:
|
libraries:
|
||||||
de.robv.android.xposed:
|
de.robv.android.xposed:
|
||||||
@@ -56,9 +56,9 @@ libraries:
|
|||||||
version: 1.2.0
|
version: 1.2.0
|
||||||
com.highcapable.kavaref:
|
com.highcapable.kavaref:
|
||||||
kavaref-core:
|
kavaref-core:
|
||||||
version: 1.0.0
|
version: 1.0.1
|
||||||
kavaref-extension:
|
kavaref-extension:
|
||||||
version: 1.0.0
|
version: 1.0.1
|
||||||
com.highcapable.hikage:
|
com.highcapable.hikage:
|
||||||
hikage-core:
|
hikage-core:
|
||||||
version: 1.0.1
|
version: 1.0.1
|
||||||
@@ -72,11 +72,11 @@ libraries:
|
|||||||
version: 1.0.0
|
version: 1.0.0
|
||||||
com.highcapable.betterandroid:
|
com.highcapable.betterandroid:
|
||||||
ui-component:
|
ui-component:
|
||||||
version: 1.0.7
|
version: 1.0.8
|
||||||
ui-extension:
|
ui-extension:
|
||||||
version: 1.0.6
|
version: 1.0.7
|
||||||
system-extension:
|
system-extension:
|
||||||
version: 1.0.2
|
version: 1.0.3
|
||||||
androidx.annotation:
|
androidx.annotation:
|
||||||
annotation:
|
annotation:
|
||||||
version: 1.9.1
|
version: 1.9.1
|
||||||
@@ -85,13 +85,13 @@ libraries:
|
|||||||
version: 1.2.1
|
version: 1.2.1
|
||||||
androidx.core:
|
androidx.core:
|
||||||
core-ktx:
|
core-ktx:
|
||||||
version: 1.16.0
|
version: 1.17.0
|
||||||
androidx.appcompat:
|
androidx.appcompat:
|
||||||
appcompat:
|
appcompat:
|
||||||
version: 1.7.1
|
version: 1.7.1
|
||||||
androidx.lifecycle:
|
androidx.lifecycle:
|
||||||
lifecycle-viewmodel-ktx:
|
lifecycle-viewmodel-ktx:
|
||||||
version: 2.9.1
|
version: 2.9.2
|
||||||
com.google.android.material:
|
com.google.android.material:
|
||||||
material:
|
material:
|
||||||
version: 1.11.0
|
version: 1.11.0
|
||||||
@@ -101,10 +101,10 @@ libraries:
|
|||||||
version: 2.2.1
|
version: 2.2.1
|
||||||
androidx.test.ext:
|
androidx.test.ext:
|
||||||
junit:
|
junit:
|
||||||
version: 1.2.1
|
version: 1.3.0
|
||||||
androidx.test.espresso:
|
androidx.test.espresso:
|
||||||
espresso-core:
|
espresso-core:
|
||||||
version: 3.6.1
|
version: 3.7.0
|
||||||
junit:
|
junit:
|
||||||
junit:
|
junit:
|
||||||
version: 4.13.2
|
version: 4.13.2
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
@@ -26,14 +26,6 @@ android {
|
|||||||
sourceCompatibility = JavaVersion.VERSION_17
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
targetCompatibility = JavaVersion.VERSION_17
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = "17"
|
|
||||||
freeCompilerArgs = listOf(
|
|
||||||
"-Xno-param-assertions",
|
|
||||||
"-Xno-call-assertions",
|
|
||||||
"-Xno-receiver-assertions"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
buildConfig = true
|
buildConfig = true
|
||||||
viewBinding = true
|
viewBinding = true
|
||||||
|
@@ -26,14 +26,6 @@ android {
|
|||||||
sourceCompatibility = JavaVersion.VERSION_17
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
targetCompatibility = JavaVersion.VERSION_17
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = "17"
|
|
||||||
freeCompilerArgs = listOf(
|
|
||||||
"-Xno-param-assertions",
|
|
||||||
"-Xno-call-assertions",
|
|
||||||
"-Xno-receiver-assertions"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
buildConfig = true
|
buildConfig = true
|
||||||
viewBinding = true
|
viewBinding = true
|
||||||
|
@@ -25,7 +25,7 @@ import android.graphics.drawable.Drawable
|
|||||||
import android.util.TypedValue
|
import android.util.TypedValue
|
||||||
import android.widget.Button
|
import android.widget.Button
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import com.highcapable.kavaref.KavaRef.Companion.resolve
|
import com.highcapable.kavaref.KavaRef.Companion.asResolver
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fixed [AlertDialog] dialog button issue after injecting Module App's Resources in some Host Apps
|
* Fixed [AlertDialog] dialog button issue after injecting Module App's Resources in some Host Apps
|
||||||
@@ -38,9 +38,9 @@ import com.highcapable.kavaref.KavaRef.Companion.resolve
|
|||||||
* @return [AlertDialog]
|
* @return [AlertDialog]
|
||||||
*/
|
*/
|
||||||
fun AlertDialog.compatStyle(): AlertDialog {
|
fun AlertDialog.compatStyle(): AlertDialog {
|
||||||
resolve().firstField {
|
asResolver().firstField {
|
||||||
name = "mAlert"
|
name = "mAlert"
|
||||||
}.get()?.resolve()?.apply {
|
}.get()?.asResolver()?.apply {
|
||||||
listOf(
|
listOf(
|
||||||
firstField { name = "mButtonPositive" }.get<Button>(),
|
firstField { name = "mButtonPositive" }.get<Button>(),
|
||||||
firstField { name = "mButtonNegative" }.get<Button>(),
|
firstField { name = "mButtonNegative" }.get<Button>(),
|
||||||
|
@@ -8,7 +8,7 @@ pluginManagement {
|
|||||||
}
|
}
|
||||||
plugins {
|
plugins {
|
||||||
id("com.highcapable.sweetdependency") version "1.0.4"
|
id("com.highcapable.sweetdependency") version "1.0.4"
|
||||||
id("com.highcapable.sweetproperty") version "1.0.5"
|
id("com.highcapable.sweetproperty") version "1.0.8"
|
||||||
}
|
}
|
||||||
sweetProperty {
|
sweetProperty {
|
||||||
global {
|
global {
|
||||||
|
@@ -27,14 +27,6 @@ android {
|
|||||||
sourceCompatibility = JavaVersion.VERSION_17
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
targetCompatibility = JavaVersion.VERSION_17
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = "17"
|
|
||||||
freeCompilerArgs = listOf(
|
|
||||||
"-Xno-param-assertions",
|
|
||||||
"-Xno-call-assertions",
|
|
||||||
"-Xno-receiver-assertions"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
lint { checkReleaseBuilds = false }
|
lint { checkReleaseBuilds = false }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -42,7 +42,8 @@ import android.os.Handler
|
|||||||
import android.os.UserHandle
|
import android.os.UserHandle
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import com.highcapable.betterandroid.system.extension.component.registerReceiver
|
import com.highcapable.betterandroid.system.extension.component.registerReceiver
|
||||||
import com.highcapable.betterandroid.system.extension.tool.SystemVersion
|
import com.highcapable.betterandroid.system.extension.tool.AndroidVersion
|
||||||
|
import com.highcapable.kavaref.KavaRef.Companion.asResolver
|
||||||
import com.highcapable.kavaref.KavaRef.Companion.resolve
|
import com.highcapable.kavaref.KavaRef.Companion.resolve
|
||||||
import com.highcapable.kavaref.extension.classOf
|
import com.highcapable.kavaref.extension.classOf
|
||||||
import com.highcapable.kavaref.extension.lazyClass
|
import com.highcapable.kavaref.extension.lazyClass
|
||||||
@@ -158,9 +159,9 @@ internal object AppParasitics {
|
|||||||
name = "currentActivityThread"
|
name = "currentActivityThread"
|
||||||
emptyParameters()
|
emptyParameters()
|
||||||
}?.invoke()
|
}?.invoke()
|
||||||
val currentScope = current?.resolve()?.optional(silent = true)
|
val currentScope = current?.asResolver()?.optional(silent = true)
|
||||||
val mBoundApplication = currentScope?.firstFieldOrNull { name = "mBoundApplication" }?.get()
|
val mBoundApplication = currentScope?.firstFieldOrNull { name = "mBoundApplication" }?.get()
|
||||||
val appScope = mBoundApplication?.resolve()?.optional(silent = true)
|
val appScope = mBoundApplication?.asResolver()?.optional(silent = true)
|
||||||
appScope?.firstFieldOrNull { name = "appInfo" }?.get<ApplicationInfo>()
|
appScope?.firstFieldOrNull { name = "appInfo" }?.get<ApplicationInfo>()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -402,7 +403,7 @@ internal object AppParasitics {
|
|||||||
if (YukiXposedModule.isXposedEnvironment) runCatching {
|
if (YukiXposedModule.isXposedEnvironment) runCatching {
|
||||||
if (currentPackageName == YukiXposedModule.modulePackageName)
|
if (currentPackageName == YukiXposedModule.modulePackageName)
|
||||||
return YLog.innerE("You cannot inject module resources into yourself")
|
return YLog.innerE("You cannot inject module resources into yourself")
|
||||||
hostResources.assets.resolve()
|
hostResources.assets.asResolver()
|
||||||
.processor(AndroidHiddenApiBypassResolver.get())
|
.processor(AndroidHiddenApiBypassResolver.get())
|
||||||
.optional(silent = true)
|
.optional(silent = true)
|
||||||
.firstMethodOrNull {
|
.firstMethodOrNull {
|
||||||
@@ -419,13 +420,13 @@ internal object AppParasitics {
|
|||||||
* @param context 当前 [Context]
|
* @param context 当前 [Context]
|
||||||
* @param proxy 代理的 [Activity]
|
* @param proxy 代理的 [Activity]
|
||||||
*/
|
*/
|
||||||
@RequiresApi(SystemVersion.N)
|
@RequiresApi(AndroidVersion.N)
|
||||||
internal fun registerModuleAppActivities(context: Context, proxy: Any?) {
|
internal fun registerModuleAppActivities(context: Context, proxy: Any?) {
|
||||||
if (isActivityProxyRegistered) return
|
if (isActivityProxyRegistered) return
|
||||||
if (YukiXposedModule.isXposedEnvironment.not()) return YLog.innerW("You can only register Activity Proxy in Xposed Environment")
|
if (YukiXposedModule.isXposedEnvironment.not()) return YLog.innerW("You can only register Activity Proxy in Xposed Environment")
|
||||||
if (context.packageName == YukiXposedModule.modulePackageName) return YLog.innerE("You cannot register Activity Proxy into yourself")
|
if (context.packageName == YukiXposedModule.modulePackageName) return YLog.innerE("You cannot register Activity Proxy into yourself")
|
||||||
@SuppressLint("ObsoleteSdkInt")
|
@SuppressLint("ObsoleteSdkInt")
|
||||||
if (SystemVersion.isLowTo(SystemVersion.N)) return YLog.innerE("Activity Proxy only support for Android 7.0 (API 24) or higher")
|
if (AndroidVersion.isAtMost(AndroidVersion.N)) return YLog.innerE("Activity Proxy only support for Android 7.0 (API 24) or higher")
|
||||||
runCatching {
|
runCatching {
|
||||||
ActivityProxyConfig.apply {
|
ActivityProxyConfig.apply {
|
||||||
proxyIntentName = "${YukiXposedModule.modulePackageName}.ACTIVITY_PROXY_INTENT"
|
proxyIntentName = "${YukiXposedModule.modulePackageName}.ACTIVITY_PROXY_INTENT"
|
||||||
@@ -457,17 +458,17 @@ internal object AppParasitics {
|
|||||||
.optional(silent = true)
|
.optional(silent = true)
|
||||||
.firstFieldOrNull { name = "sCurrentActivityThread" }
|
.firstFieldOrNull { name = "sCurrentActivityThread" }
|
||||||
?.get()
|
?.get()
|
||||||
val instrumentation = sCurrentActivityThread?.resolve()
|
val instrumentation = sCurrentActivityThread?.asResolver()
|
||||||
?.processor(AndroidHiddenApiBypassResolver.get())
|
?.processor(AndroidHiddenApiBypassResolver.get())
|
||||||
?.optional(silent = true)
|
?.optional(silent = true)
|
||||||
?.firstMethodOrNull { name = "getInstrumentation" }
|
?.firstMethodOrNull { name = "getInstrumentation" }
|
||||||
?.invoke<Instrumentation>() ?: error("Could not found Instrumentation in ActivityThread")
|
?.invoke<Instrumentation>() ?: error("Could not found Instrumentation in ActivityThread")
|
||||||
sCurrentActivityThread.resolve()
|
sCurrentActivityThread.asResolver()
|
||||||
.processor(AndroidHiddenApiBypassResolver.get())
|
.processor(AndroidHiddenApiBypassResolver.get())
|
||||||
.optional(silent = true)
|
.optional(silent = true)
|
||||||
.firstFieldOrNull { name = "mInstrumentation" }
|
.firstFieldOrNull { name = "mInstrumentation" }
|
||||||
?.set(InstrumentationDelegate.wrapper(instrumentation))
|
?.set(InstrumentationDelegate.wrapper(instrumentation))
|
||||||
val mH = sCurrentActivityThread.resolve()
|
val mH = sCurrentActivityThread.asResolver()
|
||||||
.processor(AndroidHiddenApiBypassResolver.get())
|
.processor(AndroidHiddenApiBypassResolver.get())
|
||||||
.optional(silent = true)
|
.optional(silent = true)
|
||||||
.firstFieldOrNull { name = "mH" }
|
.firstFieldOrNull { name = "mH" }
|
||||||
|
@@ -30,7 +30,8 @@ import android.os.Bundle
|
|||||||
import android.os.Handler
|
import android.os.Handler
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.os.Message
|
import android.os.Message
|
||||||
import com.highcapable.betterandroid.system.extension.tool.SystemVersion
|
import com.highcapable.betterandroid.system.extension.tool.AndroidVersion
|
||||||
|
import com.highcapable.kavaref.KavaRef.Companion.asResolver
|
||||||
import com.highcapable.kavaref.KavaRef.Companion.resolve
|
import com.highcapable.kavaref.KavaRef.Companion.resolve
|
||||||
import com.highcapable.kavaref.extension.lazyClass
|
import com.highcapable.kavaref.extension.lazyClass
|
||||||
import com.highcapable.yukihookapi.hook.core.api.reflect.AndroidHiddenApiBypassResolver
|
import com.highcapable.yukihookapi.hook.core.api.reflect.AndroidHiddenApiBypassResolver
|
||||||
@@ -64,7 +65,7 @@ internal object HandlerDelegateCaller {
|
|||||||
internal fun callHandleMessage(baseInstance: Handler.Callback?, msg: Message): Boolean {
|
internal fun callHandleMessage(baseInstance: Handler.Callback?, msg: Message): Boolean {
|
||||||
when (msg.what) {
|
when (msg.what) {
|
||||||
LAUNCH_ACTIVITY -> {
|
LAUNCH_ACTIVITY -> {
|
||||||
val intentResolver = msg.obj.resolve()
|
val intentResolver = msg.obj.asResolver()
|
||||||
.processor(AndroidHiddenApiBypassResolver.get())
|
.processor(AndroidHiddenApiBypassResolver.get())
|
||||||
.optional(silent = true)
|
.optional(silent = true)
|
||||||
.firstFieldOrNull { name = "intent" }
|
.firstFieldOrNull { name = "intent" }
|
||||||
@@ -85,7 +86,7 @@ internal object HandlerDelegateCaller {
|
|||||||
?.invokeQuietly<List<Any>>()
|
?.invokeQuietly<List<Any>>()
|
||||||
?.takeIf { it.isNotEmpty() }
|
?.takeIf { it.isNotEmpty() }
|
||||||
callbacks?.filter { it.javaClass.name.contains("LaunchActivityItem") }?.forEach { item ->
|
callbacks?.filter { it.javaClass.name.contains("LaunchActivityItem") }?.forEach { item ->
|
||||||
val itemResolver = item.resolve().optional(silent = true)
|
val itemResolver = item.asResolver().optional(silent = true)
|
||||||
.firstFieldOrNull { name = "mIntent" }
|
.firstFieldOrNull { name = "mIntent" }
|
||||||
val intent = itemResolver?.get<Intent>()
|
val intent = itemResolver?.get<Intent>()
|
||||||
val mExtras = mExtrasResolver?.copy()?.of(intent)?.getQuietly<Bundle>()
|
val mExtras = mExtrasResolver?.copy()?.of(intent)?.getQuietly<Bundle>()
|
||||||
@@ -93,25 +94,25 @@ internal object HandlerDelegateCaller {
|
|||||||
if (intent?.hasExtra(ActivityProxyConfig.proxyIntentName) == true) {
|
if (intent?.hasExtra(ActivityProxyConfig.proxyIntentName) == true) {
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
val subIntent = intent.getParcelableExtra<Intent>(ActivityProxyConfig.proxyIntentName)
|
val subIntent = intent.getParcelableExtra<Intent>(ActivityProxyConfig.proxyIntentName)
|
||||||
if (SystemVersion.isHighOrEqualsTo(SystemVersion.S)) {
|
if (AndroidVersion.isAtLeast(AndroidVersion.S)) {
|
||||||
val currentActivityThread = ActivityThreadClass.resolve()
|
val currentActivityThread = ActivityThreadClass.resolve()
|
||||||
.processor(AndroidHiddenApiBypassResolver.get())
|
.processor(AndroidHiddenApiBypassResolver.get())
|
||||||
.optional(silent = true)
|
.optional(silent = true)
|
||||||
.firstMethodOrNull { name = "currentActivityThread" }
|
.firstMethodOrNull { name = "currentActivityThread" }
|
||||||
?.invoke()
|
?.invoke()
|
||||||
val token = msg.obj.resolve()
|
val token = msg.obj.asResolver()
|
||||||
.processor(AndroidHiddenApiBypassResolver.get())
|
.processor(AndroidHiddenApiBypassResolver.get())
|
||||||
.optional(silent = true)
|
.optional(silent = true)
|
||||||
.firstMethodOrNull { name = "getActivityToken" }
|
.firstMethodOrNull { name = "getActivityToken" }
|
||||||
?.invokeQuietly()
|
?.invokeQuietly()
|
||||||
val launchingActivity = currentActivityThread?.resolve()
|
val launchingActivity = currentActivityThread?.asResolver()
|
||||||
?.processor(AndroidHiddenApiBypassResolver.get())
|
?.processor(AndroidHiddenApiBypassResolver.get())
|
||||||
?.optional(silent = true)
|
?.optional(silent = true)
|
||||||
?.firstMethodOrNull {
|
?.firstMethodOrNull {
|
||||||
name = "getLaunchingActivity"
|
name = "getLaunchingActivity"
|
||||||
parameters(IBinder::class)
|
parameters(IBinder::class)
|
||||||
}?.invokeQuietly(token)
|
}?.invokeQuietly(token)
|
||||||
launchingActivity?.resolve()
|
launchingActivity?.asResolver()
|
||||||
?.processor(AndroidHiddenApiBypassResolver.get())
|
?.processor(AndroidHiddenApiBypassResolver.get())
|
||||||
?.optional(silent = true)
|
?.optional(silent = true)
|
||||||
?.firstFieldOrNull { name = "intent" }
|
?.firstFieldOrNull { name = "intent" }
|
||||||
|
@@ -21,14 +21,6 @@ android {
|
|||||||
sourceCompatibility = JavaVersion.VERSION_17
|
sourceCompatibility = JavaVersion.VERSION_17
|
||||||
targetCompatibility = JavaVersion.VERSION_17
|
targetCompatibility = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
kotlinOptions {
|
|
||||||
jvmTarget = "17"
|
|
||||||
freeCompilerArgs = listOf(
|
|
||||||
"-Xno-param-assertions",
|
|
||||||
"-Xno-call-assertions",
|
|
||||||
"-Xno-receiver-assertions"
|
|
||||||
)
|
|
||||||
}
|
|
||||||
lint { checkReleaseBuilds = false }
|
lint { checkReleaseBuilds = false }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user