mirror of
https://github.com/PaiGramTeam/GetToken.git
synced 2024-11-24 08:51:21 +00:00
update
This commit is contained in:
parent
add41e1e1c
commit
a9bc60d84a
@ -1,17 +1,18 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application'
|
id 'com.android.application'
|
||||||
id 'org.jetbrains.kotlin.android'
|
id 'org.jetbrains.kotlin.android'
|
||||||
|
id 'org.jetbrains.kotlin.plugin.serialization'
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
|
|
||||||
namespace 'hat.holo.token'
|
namespace 'hat.holo.token'
|
||||||
compileSdk 33
|
compileSdk 34
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "hat.holo.token"
|
applicationId "hat.holo.token"
|
||||||
minSdk 28
|
minSdk 28
|
||||||
targetSdk 33
|
targetSdk 34
|
||||||
versionCode 1
|
versionCode 1
|
||||||
versionName "1.0"
|
versionName "1.0"
|
||||||
vectorDrawables {
|
vectorDrawables {
|
||||||
@ -42,6 +43,9 @@ android {
|
|||||||
}
|
}
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = '1.8'
|
jvmTarget = '1.8'
|
||||||
|
freeCompilerArgs += [
|
||||||
|
"-Xcontext-receivers"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
compose true
|
compose true
|
||||||
@ -58,17 +62,18 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
implementation "androidx.core:core-ktx:1.9.0"
|
implementation "androidx.core:core-ktx:1.13.0"
|
||||||
implementation "androidx.appcompat:appcompat:1.5.1"
|
implementation "androidx.appcompat:appcompat:1.6.1"
|
||||||
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.5.1"
|
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.7.0"
|
||||||
implementation "androidx.compose.ui:ui:1.3.1"
|
implementation "androidx.compose.ui:ui:1.6.6"
|
||||||
implementation "androidx.compose.material:material:1.3.1"
|
implementation "androidx.compose.material:material:1.6.6"
|
||||||
implementation "androidx.activity:activity-compose:1.6.1"
|
implementation "androidx.activity:activity-compose:1.9.0"
|
||||||
implementation "androidx.constraintlayout:constraintlayout-compose:1.0.1"
|
implementation "androidx.constraintlayout:constraintlayout-compose:1.0.1"
|
||||||
implementation "com.google.accompanist:accompanist-systemuicontroller:0.27.1"
|
implementation "com.google.accompanist:accompanist-systemuicontroller:0.34.0"
|
||||||
implementation "com.google.code.gson:gson:2.10"
|
implementation "com.squareup.okhttp3:okhttp:5.0.0-alpha.14"
|
||||||
implementation "com.squareup.okhttp3:okhttp:5.0.0-alpha.2"
|
implementation "com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.14"
|
||||||
implementation "com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2"
|
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3"
|
||||||
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1"
|
||||||
compileOnly files("libs/api-82.jar")
|
compileOnly files("libs/api-82.jar")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -52,27 +52,18 @@ class ModuleMain : IXposedHookLoadPackage, IXposedHookZygoteInit {
|
|||||||
appendToClassPath(app.applicationContext)
|
appendToClassPath(app.applicationContext)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
val u = loadClass("com.mihoyo.hyperion.user_profile.UserProfileFragment")
|
val fragmentKlass = loadClass("com.mihoyo.hyperion.user_profile.UserProfileFragment")
|
||||||
val rng = loadClass("rn.g") // FragmentUserProfileBinding.java
|
findAndHookMethod(fragmentKlass, "onViewCreated", android.view.View::class.java, android.os.Bundle::class.java, object : XC_MethodHook() {
|
||||||
findAndHookMethod(u, "onViewCreated", android.view.View::class.java, android.os.Bundle::class.java, object : XC_MethodHook() {
|
|
||||||
override fun afterHookedMethod(p: MethodHookParam) {
|
override fun afterHookedMethod(p: MethodHookParam) {
|
||||||
val getBinding = u.getDeclaredMethod("getBinding")
|
val fragmentBinding = p.thisObject.invokeMethod<Any>("getBinding")
|
||||||
getBinding.isAccessible = true
|
val linearLayout = fragmentBinding.visitField<LinearLayout>("b")
|
||||||
val bindingInstance = getBinding.invoke(p.thisObject)
|
|
||||||
val getLinearLayout = rng.getDeclaredField("b")
|
|
||||||
getLinearLayout.isAccessible = true
|
|
||||||
val linearLayout = getLinearLayout.get(bindingInstance) as LinearLayout
|
|
||||||
val ctx = linearLayout.context
|
val ctx = linearLayout.context
|
||||||
val getScanButton = rng.getDeclaredField("w")
|
|
||||||
getScanButton.isAccessible = true
|
|
||||||
val scanButton = getScanButton.get(bindingInstance) as ImageView
|
|
||||||
|
|
||||||
val tokenBtn = ImageView(ctx)
|
val tokenBtn = ImageView(ctx)
|
||||||
tokenBtn.id = XResources.getFakeResId("getTokenIv")
|
tokenBtn.id = XResources.getFakeResId("getTokenIv")
|
||||||
tokenBtn.setImageDrawable(Res.iconToken)
|
tokenBtn.setImageDrawable(Res.iconToken)
|
||||||
val size = Dimension.convertDpToPixel(32f, ctx).roundToInt()
|
val size = Dimension.convertDpToPixel(32f, ctx).roundToInt()
|
||||||
tokenBtn.layoutParams = ViewGroup.LayoutParams(size, size)
|
tokenBtn.layoutParams = ViewGroup.LayoutParams(size, size)
|
||||||
tokenBtn.setPadding(10, 6, 0, 6)
|
tokenBtn.setPadding(20, 6, 0, 6)
|
||||||
tokenBtn.scaleType = ImageView.ScaleType.FIT_XY
|
tokenBtn.scaleType = ImageView.ScaleType.FIT_XY
|
||||||
tokenBtn.setOnClickListener {
|
tokenBtn.setOnClickListener {
|
||||||
if (AccountManager.isLogin) {
|
if (AccountManager.isLogin) {
|
||||||
@ -91,7 +82,7 @@ class ModuleMain : IXposedHookLoadPackage, IXposedHookZygoteInit {
|
|||||||
AppUtils.showToast("未登录")
|
AppUtils.showToast("未登录")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
val scanButton = fragmentBinding.visitField<ImageView>("w")
|
||||||
linearLayout.addView(tokenBtn, linearLayout.indexOfChild(scanButton) + 1)
|
linearLayout.addView(tokenBtn, linearLayout.indexOfChild(scanButton) + 1)
|
||||||
for (i in 0 until linearLayout.childCount) {
|
for (i in 0 until linearLayout.childCount) {
|
||||||
val view = linearLayout.getChildAt(i)
|
val view = linearLayout.getChildAt(i)
|
||||||
|
@ -5,3 +5,17 @@ import java.lang.reflect.AccessibleObject
|
|||||||
fun <T : AccessibleObject> T.setAccess() = apply {
|
fun <T : AccessibleObject> T.setAccess() = apply {
|
||||||
isAccessible = true
|
isAccessible = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <R> Any.invokeMethod(methodName: String, vararg args: Any?) : R {
|
||||||
|
val method = this.javaClass.getDeclaredMethod(methodName)
|
||||||
|
method.isAccessible = true
|
||||||
|
return method.invoke(this, *args) as R
|
||||||
|
}
|
||||||
|
|
||||||
|
@Suppress("UNCHECKED_CAST")
|
||||||
|
fun <T> Any.visitField(fieldName: String) : T {
|
||||||
|
val field = this.javaClass.getDeclaredField(fieldName)
|
||||||
|
field.isAccessible = true
|
||||||
|
return field.get(this) as T
|
||||||
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
@ -1,10 +1,11 @@
|
|||||||
buildscript {
|
buildscript {
|
||||||
ext {
|
ext {
|
||||||
compose_ui_version = '1.3.1'
|
compose_ui_version = '1.5.12'
|
||||||
}
|
}
|
||||||
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
}// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application' version '7.3.0' apply false
|
id 'com.android.application' version '8.3.2' apply false
|
||||||
id 'com.android.library' version '7.3.0' apply false
|
id 'com.android.library' version '8.3.2' apply false
|
||||||
id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
|
id 'org.jetbrains.kotlin.android' version '1.9.23' apply false
|
||||||
|
id 'org.jetbrains.kotlin.plugin.serialization' version '1.9.23' apply false
|
||||||
}
|
}
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
|||||||
#Fri Nov 18 22:27:22 CST 2022
|
#Fri Nov 18 22:27:22 CST 2022
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
Loading…
Reference in New Issue
Block a user