Refactor:Replace all instances of `lspatch` with `npatch`
嘗試规避關鍵詞檢測
This commit is contained in:
parent
fd8dc4d3c9
commit
5aa809dc5a
|
|
@ -22,8 +22,8 @@ Note: debug builds are only available in Github Actions
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
+ Through jar
|
+ Through jar
|
||||||
1. Download `lspatch.jar`
|
1. Download `npatch.jar`
|
||||||
1. Run `java -jar lspatch.jar`
|
1. Run `java -jar npatch.jar`
|
||||||
|
|
||||||
+ Through manager
|
+ Through manager
|
||||||
1. Download and install `manager.apk` on an Android device
|
1. Download and install `manager.apk` on an Android device
|
||||||
|
|
|
||||||
|
|
@ -10,8 +10,8 @@ import org.gradle.kotlin.dsl.extra
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.agp.lib) apply false
|
alias(libs.plugins.agp.lib) apply false
|
||||||
alias(libs.plugins.agp.app) apply false
|
alias(libs.plugins.agp.app) apply false
|
||||||
alias(lspatch.plugins.compose.compiler) apply false
|
alias(npatch.plugins.compose.compiler) apply false
|
||||||
alias(lspatch.plugins.kotlin.android) apply false
|
alias(npatch.plugins.kotlin.android) apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
|
|
@ -156,6 +156,7 @@ fun Project.configureBaseExtension() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
named("release") {
|
named("release") {
|
||||||
|
signingConfig = null
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
val flags = arrayOf(
|
val flags = arrayOf(
|
||||||
|
|
@ -197,9 +198,12 @@ fun Project.configureBaseExtension() {
|
||||||
|
|
||||||
extensions.findByType(ApplicationAndroidComponentsExtension::class)?.let { androidComponents ->
|
extensions.findByType(ApplicationAndroidComponentsExtension::class)?.let { androidComponents ->
|
||||||
val optimizeReleaseRes = task("optimizeReleaseRes").doLast {
|
val optimizeReleaseRes = task("optimizeReleaseRes").doLast {
|
||||||
|
val isWindows = System.getProperty("os.name").lowercase().contains("windows")
|
||||||
|
val aapt2Name = if (isWindows) "aapt2.exe" else "aapt2"
|
||||||
|
|
||||||
val aapt2 = File(
|
val aapt2 = File(
|
||||||
androidComponents.sdkComponents.sdkDirectory.get().asFile,
|
androidComponents.sdkComponents.sdkDirectory.get().asFile,
|
||||||
"build-tools/${androidBuildToolsVersion}/aapt2"
|
"build-tools/${androidBuildToolsVersion}/$aapt2Name"
|
||||||
)
|
)
|
||||||
val zip = java.nio.file.Paths.get(
|
val zip = java.nio.file.Paths.get(
|
||||||
project.buildDir.path,
|
project.buildDir.path,
|
||||||
|
|
|
||||||
2
core
2
core
|
|
@ -1 +1 @@
|
||||||
Subproject commit 290818e2660f6295fd4913c46e0703d91644ce21
|
Subproject commit f8c4b6c5a52e6fe07d288d96f3765fd18aaa928c
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
android.experimental.enableNewResourceShrinker.preciseShrinking=true
|
android.experimental.enableNewResourceShrinker.preciseShrinking=true
|
||||||
android.enableAppCompileTimeRClass=true
|
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
|
org.gradle.caching=true
|
||||||
|
org.gradle.parallel=true
|
||||||
|
org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 -XX:+UseParallelGC
|
||||||
|
android.native.buildOutput=verbose
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ fun Jar.configure(variant: String) {
|
||||||
archiveBaseName.set("jar-v$verName-$verCode-$variant")
|
archiveBaseName.set("jar-v$verName-$verCode-$variant")
|
||||||
destinationDirectory.set(file("${rootProject.projectDir}/out/$variant"))
|
destinationDirectory.set(file("${rootProject.projectDir}/out/$variant"))
|
||||||
manifest {
|
manifest {
|
||||||
attributes("Main-Class" to "org.lsposed.patch.LSPatch")
|
attributes("Main-Class" to "org.lsposed.patch.NPatch")
|
||||||
}
|
}
|
||||||
dependsOn(configurations.runtimeClasspath)
|
dependsOn(configurations.runtimeClasspath)
|
||||||
from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
|
from(configurations.runtimeClasspath.get().map { if (it.isDirectory) it else zipTree(it) })
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,10 @@ val coreVerName: String by rootProject.extra
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.agp.app)
|
alias(libs.plugins.agp.app)
|
||||||
alias(lspatch.plugins.compose.compiler)
|
alias(npatch.plugins.compose.compiler)
|
||||||
alias(lspatch.plugins.google.devtools.ksp)
|
alias(npatch.plugins.google.devtools.ksp)
|
||||||
alias(lspatch.plugins.rikka.tools.refine)
|
alias(npatch.plugins.rikka.tools.refine)
|
||||||
alias(lspatch.plugins.kotlin.android)
|
alias(npatch.plugins.kotlin.android)
|
||||||
id("kotlin-parcelize")
|
id("kotlin-parcelize")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -47,7 +47,7 @@ android {
|
||||||
kotlinCompilerExtensionVersion = "1.5.13"
|
kotlinCompilerExtensionVersion = "1.5.13"
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace = "org.lsposed.lspatch"
|
namespace = "org.lsposed.npatch"
|
||||||
|
|
||||||
applicationVariants.all {
|
applicationVariants.all {
|
||||||
kotlin.sourceSets {
|
kotlin.sourceSets {
|
||||||
|
|
@ -86,35 +86,35 @@ dependencies {
|
||||||
implementation(projects.services.daemonService)
|
implementation(projects.services.daemonService)
|
||||||
implementation(projects.share.android)
|
implementation(projects.share.android)
|
||||||
implementation(projects.share.java)
|
implementation(projects.share.java)
|
||||||
implementation(platform(lspatch.androidx.compose.bom))
|
implementation(platform(npatch.androidx.compose.bom))
|
||||||
|
|
||||||
annotationProcessor(lspatch.androidx.room.compiler)
|
annotationProcessor(npatch.androidx.room.compiler)
|
||||||
compileOnly(lspatch.rikka.hidden.stub)
|
compileOnly(npatch.rikka.hidden.stub)
|
||||||
debugImplementation(lspatch.androidx.compose.ui.tooling)
|
debugImplementation(npatch.androidx.compose.ui.tooling)
|
||||||
debugImplementation(lspatch.androidx.customview)
|
debugImplementation(npatch.androidx.customview)
|
||||||
debugImplementation(lspatch.androidx.customview.poolingcontainer)
|
debugImplementation(npatch.androidx.customview.poolingcontainer)
|
||||||
implementation(lspatch.androidx.activity.compose)
|
implementation(npatch.androidx.activity.compose)
|
||||||
implementation(lspatch.androidx.compose.material.icons.extended)
|
implementation(npatch.androidx.compose.material.icons.extended)
|
||||||
implementation(lspatch.androidx.compose.material3)
|
implementation(npatch.androidx.compose.material3)
|
||||||
implementation(lspatch.androidx.compose.ui)
|
implementation(npatch.androidx.compose.ui)
|
||||||
implementation(lspatch.androidx.compose.ui.tooling.preview)
|
implementation(npatch.androidx.compose.ui.tooling.preview)
|
||||||
implementation(lspatch.androidx.core.ktx)
|
implementation(npatch.androidx.core.ktx)
|
||||||
implementation(lspatch.androidx.lifecycle.viewmodel.compose)
|
implementation(npatch.androidx.lifecycle.viewmodel.compose)
|
||||||
implementation(lspatch.androidx.navigation.compose)
|
implementation(npatch.androidx.navigation.compose)
|
||||||
implementation(libs.androidx.preference)
|
implementation(libs.androidx.preference)
|
||||||
implementation(lspatch.androidx.room.ktx)
|
implementation(npatch.androidx.room.ktx)
|
||||||
implementation(lspatch.androidx.room.runtime)
|
implementation(npatch.androidx.room.runtime)
|
||||||
implementation(lspatch.google.accompanist.navigation.animation)
|
implementation(npatch.google.accompanist.navigation.animation)
|
||||||
implementation(lspatch.google.accompanist.pager)
|
implementation(npatch.google.accompanist.pager)
|
||||||
implementation(lspatch.google.accompanist.swiperefresh)
|
implementation(npatch.google.accompanist.swiperefresh)
|
||||||
implementation(libs.material)
|
implementation(libs.material)
|
||||||
implementation(libs.gson)
|
implementation(libs.gson)
|
||||||
implementation(lspatch.rikka.shizuku.api)
|
implementation(npatch.rikka.shizuku.api)
|
||||||
implementation(lspatch.rikka.shizuku.provider)
|
implementation(npatch.rikka.shizuku.provider)
|
||||||
implementation(lspatch.rikka.refine)
|
implementation(npatch.rikka.refine)
|
||||||
implementation(lspatch.raamcosta.compose.destinations)
|
implementation(npatch.raamcosta.compose.destinations)
|
||||||
implementation(libs.appiconloader)
|
implementation(libs.appiconloader)
|
||||||
implementation(libs.hiddenapibypass)
|
implementation(libs.hiddenapibypass)
|
||||||
ksp(lspatch.androidx.room.compiler)
|
ksp(npatch.androidx.room.compiler)
|
||||||
ksp(lspatch.raamcosta.compose.destinations.ksp)
|
ksp(npatch.raamcosta.compose.destinations.ksp)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
-dontobfuscate
|
-dontobfuscate
|
||||||
-keep class com.beust.jcommander.** { *; }
|
-keep class com.beust.jcommander.** { *; }
|
||||||
-keep class org.lsposed.lspatch.Patcher$Options { *; }
|
-keep class org.lsposed.npatch.Patcher$Options { *; }
|
||||||
-keep class org.lsposed.lspatch.share.LSPConfig { *; }
|
-keep class org.lsposed.npatch.share.LSPConfig { *; }
|
||||||
-keep class org.lsposed.lspatch.share.PatchConfig { *; }
|
-keep class org.lsposed.npatch.share.PatchConfig { *; }
|
||||||
-keepclassmembers class org.lsposed.patch.LSPatch {
|
-keepclassmembers class org.lsposed.patch.NPatch {
|
||||||
private <fields>;
|
private <fields>;
|
||||||
}
|
}
|
||||||
-dontwarn com.google.auto.value.AutoValue$Builder
|
-dontwarn com.google.auto.value.AutoValue$Builder
|
||||||
|
|
|
||||||
|
|
@ -10,11 +10,11 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
-keep class com.beust.jcommander.** { *; }
|
-keep class com.beust.jcommander.** { *; }
|
||||||
-keep class org.lsposed.lspatch.database.** { *; }
|
-keep class org.lsposed.npatch.database.** { *; }
|
||||||
-keep class org.lsposed.lspatch.Patcher$Options { *; }
|
-keep class org.lsposed.npatch.Patcher$Options { *; }
|
||||||
-keep class org.lsposed.lspatch.share.LSPConfig { *; }
|
-keep class org.lsposed.npatch.share.LSPConfig { *; }
|
||||||
-keep class org.lsposed.lspatch.share.PatchConfig { *; }
|
-keep class org.lsposed.npatch.share.PatchConfig { *; }
|
||||||
-keepclassmembers class org.lsposed.patch.LSPatch {
|
-keepclassmembers class org.lsposed.patch.NPatch {
|
||||||
private <fields>;
|
private <fields>;
|
||||||
}
|
}
|
||||||
-dontwarn com.google.auto.value.AutoValue$Builder
|
-dontwarn com.google.auto.value.AutoValue$Builder
|
||||||
|
|
|
||||||
|
|
@ -46,7 +46,7 @@
|
||||||
android:name=".ui.activity.InstallActivity"
|
android:name=".ui.activity.InstallActivity"
|
||||||
android:enabled="false"
|
android:enabled="false"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
android:targetActivity="org.lsposed.lspatch.ui.activity.MainActivity">
|
android:targetActivity="org.lsposed.npatch.ui.activity.MainActivity">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.VIEW" />
|
<action android:name="android.intent.action.VIEW" />
|
||||||
<category android:name="android.intent.category.DEFAULT" />
|
<category android:name="android.intent.category.DEFAULT" />
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch
|
package org.lsposed.npatch
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
|
@ -7,9 +7,9 @@ import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.lsposed.hiddenapibypass.HiddenApiBypass
|
import org.lsposed.hiddenapibypass.HiddenApiBypass
|
||||||
import org.lsposed.lspatch.manager.AppBroadcastReceiver
|
import org.lsposed.npatch.manager.AppBroadcastReceiver
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager
|
import org.lsposed.npatch.util.NPackageManager
|
||||||
import org.lsposed.lspatch.util.ShizukuApi
|
import org.lsposed.npatch.util.ShizukuApi
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
lateinit var lspApp: LSPApplication
|
lateinit var lspApp: LSPApplication
|
||||||
|
|
@ -31,6 +31,6 @@ class LSPApplication : Application() {
|
||||||
prefs = lspApp.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
prefs = lspApp.getSharedPreferences("settings", Context.MODE_PRIVATE)
|
||||||
ShizukuApi.init()
|
ShizukuApi.init()
|
||||||
AppBroadcastReceiver.register(this)
|
AppBroadcastReceiver.register(this)
|
||||||
globalScope.launch { LSPPackageManager.fetchAppList() }
|
globalScope.launch { NPackageManager.fetchAppList() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,18 +1,17 @@
|
||||||
package org.lsposed.lspatch
|
package org.lsposed.npatch
|
||||||
|
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.documentfile.provider.DocumentFile
|
import androidx.documentfile.provider.DocumentFile
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.lsposed.lspatch.config.Configs
|
import org.lsposed.npatch.config.Configs
|
||||||
import org.lsposed.lspatch.config.MyKeyStore
|
import org.lsposed.npatch.config.MyKeyStore
|
||||||
import org.lsposed.lspatch.share.Constants
|
import org.lsposed.npatch.share.Constants
|
||||||
import org.lsposed.lspatch.share.PatchConfig
|
import org.lsposed.npatch.share.PatchConfig
|
||||||
import org.lsposed.patch.LSPatch
|
import org.lsposed.patch.NPatch
|
||||||
import org.lsposed.patch.util.Logger
|
import org.lsposed.patch.util.Logger
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.util.Collections.addAll
|
|
||||||
|
|
||||||
object Patcher {
|
object Patcher {
|
||||||
|
|
||||||
|
|
@ -47,7 +46,7 @@ object Patcher {
|
||||||
|
|
||||||
suspend fun patch(logger: Logger, options: Options) {
|
suspend fun patch(logger: Logger, options: Options) {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
LSPatch(logger, *options.toStringArray()).doCommandLine()
|
NPatch(logger, *options.toStringArray()).doCommandLine()
|
||||||
|
|
||||||
val uri = Configs.storageDirectory?.toUri()
|
val uri = Configs.storageDirectory?.toUri()
|
||||||
?: throw IOException("Uri is null")
|
?: throw IOException("Uri is null")
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.config
|
package org.lsposed.npatch.config
|
||||||
|
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
|
@ -6,11 +6,11 @@ import androidx.room.Room
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.lsposed.lspatch.database.LSPDatabase
|
import org.lsposed.npatch.database.LSPDatabase
|
||||||
import org.lsposed.lspatch.database.entity.Module
|
import org.lsposed.npatch.database.entity.Module
|
||||||
import org.lsposed.lspatch.database.entity.Scope
|
import org.lsposed.npatch.database.entity.Scope
|
||||||
import org.lsposed.lspatch.lspApp
|
import org.lsposed.npatch.lspApp
|
||||||
import org.lsposed.lspatch.util.ModuleLoader
|
import org.lsposed.npatch.util.ModuleLoader
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
object ConfigManager {
|
object ConfigManager {
|
||||||
|
|
@ -1,9 +1,9 @@
|
||||||
package org.lsposed.lspatch.config
|
package org.lsposed.npatch.config
|
||||||
|
|
||||||
import org.lsposed.lspatch.lspApp
|
import org.lsposed.npatch.lspApp
|
||||||
import org.lsposed.lspatch.ui.util.delegateStateOf
|
import org.lsposed.npatch.ui.util.delegateStateOf
|
||||||
import org.lsposed.lspatch.ui.util.getValue
|
import org.lsposed.npatch.ui.util.getValue
|
||||||
import org.lsposed.lspatch.ui.util.setValue
|
import org.lsposed.npatch.ui.util.setValue
|
||||||
|
|
||||||
object Configs {
|
object Configs {
|
||||||
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
package org.lsposed.lspatch.config
|
package org.lsposed.npatch.config
|
||||||
|
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.lsposed.lspatch.lspApp
|
import org.lsposed.npatch.lspApp
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
object MyKeyStore {
|
object MyKeyStore {
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
package org.lsposed.lspatch.database
|
package org.lsposed.npatch.database
|
||||||
|
|
||||||
import androidx.room.Database
|
import androidx.room.Database
|
||||||
import androidx.room.RoomDatabase
|
import androidx.room.RoomDatabase
|
||||||
import org.lsposed.lspatch.database.dao.ModuleDao
|
import org.lsposed.npatch.database.dao.ModuleDao
|
||||||
import org.lsposed.lspatch.database.dao.ScopeDao
|
import org.lsposed.npatch.database.dao.ScopeDao
|
||||||
|
|
||||||
import org.lsposed.lspatch.database.entity.Module
|
import org.lsposed.npatch.database.entity.Module
|
||||||
import org.lsposed.lspatch.database.entity.Scope
|
import org.lsposed.npatch.database.entity.Scope
|
||||||
|
|
||||||
@Database(entities = [Module::class, Scope::class], version = 1)
|
@Database(entities = [Module::class, Scope::class], version = 1)
|
||||||
abstract class LSPDatabase : RoomDatabase() {
|
abstract class LSPDatabase : RoomDatabase() {
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
package org.lsposed.lspatch.database.dao
|
package org.lsposed.npatch.database.dao
|
||||||
|
|
||||||
import androidx.room.Dao
|
import androidx.room.Dao
|
||||||
import androidx.room.Delete
|
import androidx.room.Delete
|
||||||
import androidx.room.Insert
|
import androidx.room.Insert
|
||||||
import androidx.room.OnConflictStrategy
|
import androidx.room.OnConflictStrategy
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
import org.lsposed.lspatch.database.entity.Module
|
import org.lsposed.npatch.database.entity.Module
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
interface ModuleDao {
|
interface ModuleDao {
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
package org.lsposed.lspatch.database.dao
|
package org.lsposed.npatch.database.dao
|
||||||
|
|
||||||
import androidx.room.Dao
|
import androidx.room.Dao
|
||||||
import androidx.room.Delete
|
import androidx.room.Delete
|
||||||
import androidx.room.Insert
|
import androidx.room.Insert
|
||||||
import androidx.room.Query
|
import androidx.room.Query
|
||||||
import org.lsposed.lspatch.database.entity.Module
|
import org.lsposed.npatch.database.entity.Module
|
||||||
import org.lsposed.lspatch.database.entity.Scope
|
import org.lsposed.npatch.database.entity.Scope
|
||||||
|
|
||||||
@Dao
|
@Dao
|
||||||
interface ScopeDao {
|
interface ScopeDao {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.database.entity
|
package org.lsposed.npatch.database.entity
|
||||||
|
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
import androidx.room.PrimaryKey
|
import androidx.room.PrimaryKey
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.database.entity
|
package org.lsposed.npatch.database.entity
|
||||||
|
|
||||||
import androidx.room.Entity
|
import androidx.room.Entity
|
||||||
import androidx.room.ForeignKey
|
import androidx.room.ForeignKey
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.manager
|
package org.lsposed.npatch.manager
|
||||||
|
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
|
@ -6,8 +6,8 @@ import android.content.Intent
|
||||||
import android.content.IntentFilter
|
import android.content.IntentFilter
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.lsposed.lspatch.lspApp
|
import org.lsposed.npatch.lspApp
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager
|
import org.lsposed.npatch.util.NPackageManager
|
||||||
|
|
||||||
class AppBroadcastReceiver : BroadcastReceiver() {
|
class AppBroadcastReceiver : BroadcastReceiver() {
|
||||||
|
|
||||||
|
|
@ -33,7 +33,7 @@ class AppBroadcastReceiver : BroadcastReceiver() {
|
||||||
if (intent.action in actions) {
|
if (intent.action in actions) {
|
||||||
lspApp.globalScope.launch {
|
lspApp.globalScope.launch {
|
||||||
Log.i(TAG, "Received intent: $intent")
|
Log.i(TAG, "Received intent: $intent")
|
||||||
LSPPackageManager.fetchAppList()
|
NPackageManager.fetchAppList()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
package org.lsposed.lspatch.manager
|
package org.lsposed.npatch.manager
|
||||||
|
|
||||||
import android.os.Binder
|
import android.os.Binder
|
||||||
import android.os.Bundle
|
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import android.os.ParcelFileDescriptor
|
import android.os.ParcelFileDescriptor
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import org.lsposed.lspatch.config.ConfigManager
|
import org.lsposed.npatch.config.ConfigManager
|
||||||
import org.lsposed.lspatch.lspApp
|
import org.lsposed.npatch.lspApp
|
||||||
import org.lsposed.lspd.models.Module
|
import org.lsposed.lspd.models.Module
|
||||||
import org.lsposed.lspd.service.ILSPApplicationService
|
import org.lsposed.lspd.service.ILSPApplicationService
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.manager
|
package org.lsposed.npatch.manager
|
||||||
|
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.activity
|
package org.lsposed.npatch.ui.activity
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
|
|
@ -15,13 +15,13 @@ import androidx.navigation.NavGraph.Companion.findStartDestination
|
||||||
import androidx.navigation.NavHostController
|
import androidx.navigation.NavHostController
|
||||||
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
|
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
|
||||||
import com.ramcosta.composedestinations.DestinationsNavHost
|
import com.ramcosta.composedestinations.DestinationsNavHost
|
||||||
import org.lsposed.lspatch.ui.page.BottomBarDestination
|
import org.lsposed.npatch.ui.page.BottomBarDestination
|
||||||
import org.lsposed.lspatch.ui.page.NavGraphs
|
import org.lsposed.npatch.ui.page.NavGraphs
|
||||||
import org.lsposed.lspatch.ui.page.appCurrentDestinationAsState
|
import org.lsposed.npatch.ui.page.appCurrentDestinationAsState
|
||||||
import org.lsposed.lspatch.ui.page.destinations.Destination
|
import org.lsposed.npatch.ui.page.destinations.Destination
|
||||||
import org.lsposed.lspatch.ui.page.startAppDestination
|
import org.lsposed.npatch.ui.page.startAppDestination
|
||||||
import org.lsposed.lspatch.ui.theme.LSPTheme
|
import org.lsposed.npatch.ui.theme.LSPTheme
|
||||||
import org.lsposed.lspatch.ui.util.LocalSnackbarHost
|
import org.lsposed.npatch.ui.util.LocalSnackbarHost
|
||||||
|
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component
|
package org.lsposed.npatch.ui.component
|
||||||
|
|
||||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
import androidx.compose.foundation.LocalIndication
|
import androidx.compose.foundation.LocalIndication
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component
|
package org.lsposed.npatch.ui.component
|
||||||
|
|
||||||
import android.graphics.drawable.GradientDrawable
|
import android.graphics.drawable.GradientDrawable
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
|
|
@ -19,7 +19,7 @@ import androidx.compose.ui.text.font.FontFamily
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.core.graphics.drawable.toBitmap
|
import androidx.core.graphics.drawable.toBitmap
|
||||||
import org.lsposed.lspatch.ui.theme.LSPTheme
|
import org.lsposed.npatch.ui.theme.LSPTheme
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun AppItem(
|
fun AppItem(
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component
|
package org.lsposed.npatch.ui.component
|
||||||
|
|
||||||
import androidx.compose.material3.CenterAlignedTopAppBar
|
import androidx.compose.material3.CenterAlignedTopAppBar
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
|
|
@ -9,7 +9,7 @@ import androidx.compose.ui.text.font.FontFamily
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import org.lsposed.lspatch.ui.util.SampleStringProvider
|
import org.lsposed.npatch.ui.util.SampleStringProvider
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Preview
|
@Preview
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component
|
package org.lsposed.npatch.ui.component
|
||||||
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component
|
package org.lsposed.npatch.ui.component
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.compose.animation.AnimatedVisibility
|
import androidx.compose.animation.AnimatedVisibility
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component
|
package org.lsposed.npatch.ui.component
|
||||||
|
|
||||||
import androidx.compose.animation.*
|
import androidx.compose.animation.*
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component
|
package org.lsposed.npatch.ui.component
|
||||||
|
|
||||||
import androidx.compose.animation.core.*
|
import androidx.compose.animation.core.*
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
|
|
@ -10,7 +10,6 @@ import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.geometry.Offset
|
import androidx.compose.ui.geometry.Offset
|
||||||
import androidx.compose.ui.graphics.Brush
|
import androidx.compose.ui.graphics.Brush
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component.settings
|
package org.lsposed.npatch.ui.component.settings
|
||||||
|
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component.settings
|
package org.lsposed.npatch.ui.component.settings
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component.settings
|
package org.lsposed.npatch.ui.component.settings
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.component.settings
|
package org.lsposed.npatch.ui.component.settings
|
||||||
|
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.page
|
package org.lsposed.npatch.ui.page
|
||||||
|
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
|
|
@ -6,8 +6,8 @@ import androidx.compose.material.icons.filled.*
|
||||||
import androidx.compose.material.icons.outlined.*
|
import androidx.compose.material.icons.outlined.*
|
||||||
import androidx.compose.ui.graphics.vector.ImageVector
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
import com.ramcosta.composedestinations.spec.DirectionDestinationSpec
|
import com.ramcosta.composedestinations.spec.DirectionDestinationSpec
|
||||||
import org.lsposed.lspatch.R
|
import org.lsposed.npatch.R
|
||||||
import org.lsposed.lspatch.ui.page.destinations.*
|
import org.lsposed.npatch.ui.page.destinations.*
|
||||||
|
|
||||||
enum class BottomBarDestination(
|
enum class BottomBarDestination(
|
||||||
val direction: DirectionDestinationSpec,
|
val direction: DirectionDestinationSpec,
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.page
|
package org.lsposed.npatch.ui.page
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
|
|
@ -35,14 +35,14 @@ import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
import com.ramcosta.composedestinations.annotation.RootNavGraph
|
||||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.lsposed.lspatch.R
|
import org.lsposed.npatch.R
|
||||||
import org.lsposed.lspatch.share.LSPConfig
|
import org.lsposed.npatch.share.LSPConfig
|
||||||
import org.lsposed.lspatch.ui.component.CenterTopBar
|
import org.lsposed.npatch.ui.component.CenterTopBar
|
||||||
import org.lsposed.lspatch.ui.page.destinations.ManageScreenDestination
|
import org.lsposed.npatch.ui.page.destinations.ManageScreenDestination
|
||||||
import org.lsposed.lspatch.ui.page.destinations.NewPatchScreenDestination
|
import org.lsposed.npatch.ui.page.destinations.NewPatchScreenDestination
|
||||||
import org.lsposed.lspatch.ui.util.HtmlText
|
import org.lsposed.npatch.ui.util.HtmlText
|
||||||
import org.lsposed.lspatch.ui.util.LocalSnackbarHost
|
import org.lsposed.npatch.ui.util.LocalSnackbarHost
|
||||||
import org.lsposed.lspatch.util.ShizukuApi
|
import org.lsposed.npatch.util.ShizukuApi
|
||||||
import rikka.shizuku.Shizuku
|
import rikka.shizuku.Shizuku
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.page
|
package org.lsposed.npatch.ui.page
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
|
@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import org.lsposed.lspatch.ui.component.CenterTopBar
|
import org.lsposed.npatch.ui.component.CenterTopBar
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Destination
|
@Destination
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.page
|
package org.lsposed.npatch.ui.page
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
|
|
@ -16,12 +16,12 @@ import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
import com.ramcosta.composedestinations.result.ResultRecipient
|
import com.ramcosta.composedestinations.result.ResultRecipient
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.lsposed.lspatch.R
|
import org.lsposed.npatch.R
|
||||||
import org.lsposed.lspatch.ui.component.CenterTopBar
|
import org.lsposed.npatch.ui.component.CenterTopBar
|
||||||
import org.lsposed.lspatch.ui.page.destinations.SelectAppsScreenDestination
|
import org.lsposed.npatch.ui.page.destinations.SelectAppsScreenDestination
|
||||||
import org.lsposed.lspatch.ui.page.manage.AppManageBody
|
import org.lsposed.npatch.ui.page.manage.AppManageBody
|
||||||
import org.lsposed.lspatch.ui.page.manage.AppManageFab
|
import org.lsposed.npatch.ui.page.manage.AppManageFab
|
||||||
import org.lsposed.lspatch.ui.page.manage.ModuleManageBody
|
import org.lsposed.npatch.ui.page.manage.ModuleManageBody
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalPagerApi::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalPagerApi::class)
|
||||||
@Destination
|
@Destination
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.page
|
package org.lsposed.npatch.ui.page
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
|
|
@ -34,13 +34,9 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.draw.clip
|
import androidx.compose.ui.draw.clip
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.TextStyle
|
|
||||||
import androidx.compose.ui.text.font.FontFamily
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.DefaultLifecycleObserver
|
|
||||||
import androidx.lifecycle.LifecycleOwner
|
|
||||||
import androidx.lifecycle.compose.LocalLifecycleOwner
|
import androidx.lifecycle.compose.LocalLifecycleOwner
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
|
|
@ -48,29 +44,29 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
import com.ramcosta.composedestinations.result.NavResult
|
import com.ramcosta.composedestinations.result.NavResult
|
||||||
import com.ramcosta.composedestinations.result.ResultRecipient
|
import com.ramcosta.composedestinations.result.ResultRecipient
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.lsposed.lspatch.R
|
import org.lsposed.npatch.lspApp
|
||||||
import org.lsposed.lspatch.lspApp
|
import org.lsposed.npatch.R
|
||||||
import org.lsposed.lspatch.ui.component.AnywhereDropdown
|
import org.lsposed.npatch.ui.component.AnywhereDropdown
|
||||||
import org.lsposed.lspatch.ui.component.SelectionColumn
|
import org.lsposed.npatch.ui.component.SelectionColumn
|
||||||
import org.lsposed.lspatch.ui.component.ShimmerAnimation
|
import org.lsposed.npatch.ui.component.ShimmerAnimation
|
||||||
import org.lsposed.lspatch.ui.component.settings.SettingsCheckBox
|
import org.lsposed.npatch.ui.component.settings.SettingsCheckBox
|
||||||
import org.lsposed.lspatch.ui.component.settings.SettingsEditor
|
import org.lsposed.npatch.ui.component.settings.SettingsEditor
|
||||||
import org.lsposed.lspatch.ui.component.settings.SettingsItem
|
import org.lsposed.npatch.ui.component.settings.SettingsItem
|
||||||
import org.lsposed.lspatch.ui.page.destinations.SelectAppsScreenDestination
|
import org.lsposed.npatch.ui.page.destinations.SelectAppsScreenDestination
|
||||||
import org.lsposed.lspatch.ui.util.InstallResultReceiver
|
import org.lsposed.npatch.ui.util.InstallResultReceiver
|
||||||
import org.lsposed.lspatch.ui.util.LocalSnackbarHost
|
import org.lsposed.npatch.ui.util.LocalSnackbarHost
|
||||||
import org.lsposed.lspatch.ui.util.checkIsApkFixedByLSP
|
import org.lsposed.npatch.ui.util.checkIsApkFixedByLSP
|
||||||
import org.lsposed.lspatch.ui.util.installApk
|
import org.lsposed.npatch.ui.util.installApk
|
||||||
import org.lsposed.lspatch.ui.util.installApks
|
import org.lsposed.npatch.ui.util.installApks
|
||||||
import org.lsposed.lspatch.ui.util.isScrolledToEnd
|
import org.lsposed.npatch.ui.util.isScrolledToEnd
|
||||||
import org.lsposed.lspatch.ui.util.lastItemIndex
|
import org.lsposed.npatch.ui.util.lastItemIndex
|
||||||
import org.lsposed.lspatch.ui.util.uninstallApkByPackageName
|
import org.lsposed.npatch.ui.util.uninstallApkByPackageName
|
||||||
import org.lsposed.lspatch.ui.viewmodel.NewPatchViewModel
|
import org.lsposed.npatch.ui.viewmodel.NewPatchViewModel
|
||||||
import org.lsposed.lspatch.ui.viewmodel.NewPatchViewModel.PatchState
|
import org.lsposed.npatch.ui.viewmodel.NewPatchViewModel.PatchState
|
||||||
import org.lsposed.lspatch.ui.viewmodel.NewPatchViewModel.ViewAction
|
import org.lsposed.npatch.ui.viewmodel.NewPatchViewModel.ViewAction
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager
|
import org.lsposed.npatch.util.NPackageManager
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager.AppInfo
|
import org.lsposed.npatch.util.NPackageManager.AppInfo
|
||||||
import org.lsposed.lspatch.util.ShizukuApi
|
import org.lsposed.npatch.util.ShizukuApi
|
||||||
|
|
||||||
private const val TAG = "NewPatchPage"
|
private const val TAG = "NewPatchPage"
|
||||||
|
|
||||||
|
|
@ -97,7 +93,7 @@ fun NewPatchScreen(
|
||||||
return@rememberLauncherForActivityResult
|
return@rememberLauncherForActivityResult
|
||||||
}
|
}
|
||||||
scope.launch {
|
scope.launch {
|
||||||
LSPPackageManager.getAppInfoFromApks(apks)
|
NPackageManager.getAppInfoFromApks(apks)
|
||||||
.onSuccess {
|
.onSuccess {
|
||||||
viewModel.dispatch(ViewAction.ConfigurePatch(it.first()))
|
viewModel.dispatch(ViewAction.ConfigurePatch(it.first()))
|
||||||
}
|
}
|
||||||
|
|
@ -116,7 +112,7 @@ fun NewPatchScreen(
|
||||||
return@rememberLauncherForActivityResult
|
return@rememberLauncherForActivityResult
|
||||||
}
|
}
|
||||||
scope.launch {
|
scope.launch {
|
||||||
LSPPackageManager.getAppInfoFromApks(apks).onSuccess { appInfos ->
|
NPackageManager.getAppInfoFromApks(apks).onSuccess { appInfos ->
|
||||||
val modules = appInfos.filter { it.isXposedModule }
|
val modules = appInfos.filter { it.isXposedModule }
|
||||||
if (modules.isEmpty()) {
|
if (modules.isEmpty()) {
|
||||||
snackbarHost.showSnackbar(noXposedModules)
|
snackbarHost.showSnackbar(noXposedModules)
|
||||||
|
|
@ -133,7 +129,7 @@ fun NewPatchScreen(
|
||||||
when (viewModel.patchState) {
|
when (viewModel.patchState) {
|
||||||
PatchState.INIT -> {
|
PatchState.INIT -> {
|
||||||
LaunchedEffect(Unit) {
|
LaunchedEffect(Unit) {
|
||||||
LSPPackageManager.cleanTmpApkDir()
|
NPackageManager.cleanTmpApkDir()
|
||||||
when (id) {
|
when (id) {
|
||||||
ACTION_STORAGE -> {
|
ACTION_STORAGE -> {
|
||||||
storageLauncher.launch(arrayOf("application/vnd.android.package-archive"))
|
storageLauncher.launch(arrayOf("application/vnd.android.package-archive"))
|
||||||
|
|
@ -148,7 +144,7 @@ fun NewPatchScreen(
|
||||||
ACTION_INTENT_INSTALL -> {
|
ACTION_INTENT_INSTALL -> {
|
||||||
data?.let { uri ->
|
data?.let { uri ->
|
||||||
scope.launch {
|
scope.launch {
|
||||||
LSPPackageManager.getAppInfoFromApks(listOf(uri)).onSuccess {
|
NPackageManager.getAppInfoFromApks(listOf(uri)).onSuccess {
|
||||||
viewModel.dispatch(ViewAction.ConfigurePatch(it.first()))
|
viewModel.dispatch(ViewAction.ConfigurePatch(it.first()))
|
||||||
}.onFailure {
|
}.onFailure {
|
||||||
snackbarHost.showSnackbar(it.message ?: errorUnknown)
|
snackbarHost.showSnackbar(it.message ?: errorUnknown)
|
||||||
|
|
@ -467,7 +463,7 @@ private fun DoPatchBody(modifier: Modifier, navigator: DestinationsNavigator) {
|
||||||
if (status == PackageInstaller.STATUS_SUCCESS) {
|
if (status == PackageInstaller.STATUS_SUCCESS) {
|
||||||
snackbarHost.showSnackbar(installSuccessfully)
|
snackbarHost.showSnackbar(installSuccessfully)
|
||||||
navigator.navigateUp()
|
navigator.navigateUp()
|
||||||
} else if (status != LSPPackageManager.STATUS_USER_CANCELLED) {
|
} else if (status != NPackageManager.STATUS_USER_CANCELLED) {
|
||||||
val result = snackbarHost.showSnackbar(installFailed, copyError)
|
val result = snackbarHost.showSnackbar(installFailed, copyError)
|
||||||
if (result == SnackbarResult.ActionPerformed) {
|
if (result == SnackbarResult.ActionPerformed) {
|
||||||
val cm = lspApp.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
val cm = lspApp.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
|
||||||
|
|
@ -562,7 +558,7 @@ private fun InstallDialog(patchApp: AppInfo, onFinish: (Int, String?) -> Unit) {
|
||||||
suspend fun doInstall() {
|
suspend fun doInstall() {
|
||||||
Log.i(TAG, "Installing app ${patchApp.app.packageName}")
|
Log.i(TAG, "Installing app ${patchApp.app.packageName}")
|
||||||
installing = 1
|
installing = 1
|
||||||
val (status, message) = LSPPackageManager.install()
|
val (status, message) = NPackageManager.install()
|
||||||
installing = 0
|
installing = 0
|
||||||
Log.i(TAG, "Installation end: $status, $message")
|
Log.i(TAG, "Installation end: $status, $message")
|
||||||
onFinish(status, message)
|
onFinish(status, message)
|
||||||
|
|
@ -570,19 +566,19 @@ private fun InstallDialog(patchApp: AppInfo, onFinish: (Int, String?) -> Unit) {
|
||||||
|
|
||||||
LaunchedEffect(uninstallFirst) {
|
LaunchedEffect(uninstallFirst) {
|
||||||
if (!uninstallFirst && installing == 0) {
|
if (!uninstallFirst && installing == 0) {
|
||||||
onFinish(LSPPackageManager.STATUS_USER_CANCELLED, "User cancelled")
|
onFinish(NPackageManager.STATUS_USER_CANCELLED, "User cancelled")
|
||||||
doInstall()
|
doInstall()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uninstallFirst) {
|
if (uninstallFirst) {
|
||||||
UninstallConfirmationDialog(
|
UninstallConfirmationDialog(
|
||||||
onDismiss = { onFinish(LSPPackageManager.STATUS_USER_CANCELLED, "User cancelled") },
|
onDismiss = { onFinish(NPackageManager.STATUS_USER_CANCELLED, "User cancelled") },
|
||||||
onConfirm = {
|
onConfirm = {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
Log.i(TAG, "Uninstalling app ${patchApp.app.packageName}")
|
Log.i(TAG, "Uninstalling app ${patchApp.app.packageName}")
|
||||||
installing = 2
|
installing = 2
|
||||||
val (status, message) = LSPPackageManager.uninstall(patchApp.app.packageName)
|
val (status, message) = NPackageManager.uninstall(patchApp.app.packageName)
|
||||||
installing = 0
|
installing = 0
|
||||||
Log.i(TAG, "Uninstallation end: $status, $message")
|
Log.i(TAG, "Uninstallation end: $status, $message")
|
||||||
if (status == PackageInstaller.STATUS_SUCCESS) {
|
if (status == PackageInstaller.STATUS_SUCCESS) {
|
||||||
|
|
@ -670,13 +666,13 @@ private fun InstallDialog2(patchApp: AppInfo, onFinish: (Int, String?) -> Unit)
|
||||||
Log.d(TAG, "State changed to install, starting installation via system.")
|
Log.d(TAG, "State changed to install, starting installation via system.")
|
||||||
doInstall()
|
doInstall()
|
||||||
// Since system installer is an Intent, it's fire-and-forget. We can dismiss our UI.
|
// Since system installer is an Intent, it's fire-and-forget. We can dismiss our UI.
|
||||||
onFinish(LSPPackageManager.STATUS_USER_CANCELLED, "Handed over to system installer")
|
onFinish(NPackageManager.STATUS_USER_CANCELLED, "Handed over to system installer")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (uninstallFirst) {
|
if (uninstallFirst) {
|
||||||
UninstallConfirmationDialog(
|
UninstallConfirmationDialog(
|
||||||
onDismiss = { onFinish(LSPPackageManager.STATUS_USER_CANCELLED, "User cancelled") },
|
onDismiss = { onFinish(NPackageManager.STATUS_USER_CANCELLED, "User cancelled") },
|
||||||
onConfirm = {
|
onConfirm = {
|
||||||
scope.launch {
|
scope.launch {
|
||||||
Log.i(TAG, "Uninstalling app ${patchApp.app.packageName}")
|
Log.i(TAG, "Uninstalling app ${patchApp.app.packageName}")
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.page
|
package org.lsposed.npatch.ui.page
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
|
|
@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import org.lsposed.lspatch.ui.component.CenterTopBar
|
import org.lsposed.npatch.ui.component.CenterTopBar
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Destination
|
@Destination
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.page
|
package org.lsposed.npatch.ui.page
|
||||||
|
|
||||||
import android.content.pm.ApplicationInfo
|
import android.content.pm.ApplicationInfo
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
|
|
@ -25,12 +25,12 @@ import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import com.ramcosta.composedestinations.result.ResultBackNavigator
|
import com.ramcosta.composedestinations.result.ResultBackNavigator
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import org.lsposed.lspatch.R
|
import org.lsposed.npatch.R
|
||||||
import org.lsposed.lspatch.ui.component.AppItem
|
import org.lsposed.npatch.ui.component.AppItem
|
||||||
import org.lsposed.lspatch.ui.component.SearchAppBar
|
import org.lsposed.npatch.ui.component.SearchAppBar
|
||||||
import org.lsposed.lspatch.ui.viewmodel.SelectAppsViewModel
|
import org.lsposed.npatch.ui.viewmodel.SelectAppsViewModel
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager
|
import org.lsposed.npatch.util.NPackageManager
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager.AppInfo
|
import org.lsposed.npatch.util.NPackageManager.AppInfo
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
sealed class SelectAppsResult : Parcelable {
|
sealed class SelectAppsResult : Parcelable {
|
||||||
|
|
@ -60,7 +60,7 @@ fun SelectAppsScreen(
|
||||||
viewModel.filterAppList(false, filter)
|
viewModel.filterAppList(false, filter)
|
||||||
initialSelected?.let {
|
initialSelected?.let {
|
||||||
val tmp = initialSelected.toSet()
|
val tmp = initialSelected.toSet()
|
||||||
viewModel.multiSelected.addAll(LSPPackageManager.appList.filter { tmp.contains(it.app.packageName) })
|
viewModel.multiSelected.addAll(NPackageManager.appList.filter { tmp.contains(it.app.packageName) })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -128,7 +128,7 @@ private fun SingleSelect(onSelect: (AppInfo) -> Unit) {
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.animateItem(spring(stiffness = Spring.StiffnessLow))
|
.animateItem(spring(stiffness = Spring.StiffnessLow))
|
||||||
.clickable { onSelect(it) },
|
.clickable { onSelect(it) },
|
||||||
icon = LSPPackageManager.getIcon(it),
|
icon = NPackageManager.getIcon(it),
|
||||||
label = it.label,
|
label = it.label,
|
||||||
packageName = it.app.packageName
|
packageName = it.app.packageName
|
||||||
)
|
)
|
||||||
|
|
@ -153,7 +153,7 @@ private fun MultiSelect() {
|
||||||
if (checked) viewModel.multiSelected.remove(it)
|
if (checked) viewModel.multiSelected.remove(it)
|
||||||
else viewModel.multiSelected.add(it)
|
else viewModel.multiSelected.add(it)
|
||||||
},
|
},
|
||||||
icon = LSPPackageManager.getIcon(it),
|
icon = NPackageManager.getIcon(it),
|
||||||
label = it.label,
|
label = it.label,
|
||||||
packageName = it.app.packageName,
|
packageName = it.app.packageName,
|
||||||
checked = checked
|
checked = checked
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.page
|
package org.lsposed.npatch.ui.page
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
|
@ -29,15 +29,14 @@ import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.ramcosta.composedestinations.annotation.Destination
|
import com.ramcosta.composedestinations.annotation.Destination
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.lsposed.lspatch.R
|
import org.lsposed.npatch.R
|
||||||
import org.lsposed.lspatch.config.Configs
|
import org.lsposed.npatch.config.Configs
|
||||||
import org.lsposed.lspatch.config.MyKeyStore
|
import org.lsposed.npatch.config.MyKeyStore
|
||||||
import org.lsposed.lspatch.ui.component.AnywhereDropdown
|
import org.lsposed.npatch.ui.component.AnywhereDropdown
|
||||||
import org.lsposed.lspatch.ui.component.CenterTopBar
|
import org.lsposed.npatch.ui.component.CenterTopBar
|
||||||
import org.lsposed.lspatch.ui.component.settings.SettingsItem
|
import org.lsposed.npatch.ui.component.settings.SettingsItem
|
||||||
import org.lsposed.lspatch.ui.component.settings.SettingsSlot
|
import org.lsposed.npatch.ui.component.settings.SettingsSwitch
|
||||||
import org.lsposed.lspatch.ui.component.settings.SettingsSwitch
|
import org.lsposed.npatch.ui.util.LocalSnackbarHost
|
||||||
import org.lsposed.lspatch.ui.util.LocalSnackbarHost
|
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.security.GeneralSecurityException
|
import java.security.GeneralSecurityException
|
||||||
import java.security.KeyStore
|
import java.security.KeyStore
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package org.lsposed.lspatch.ui.page.manage
|
package org.lsposed.npatch.ui.page.manage
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.ClipData
|
import android.content.ClipData
|
||||||
import android.content.ClipboardManager
|
import android.content.ClipboardManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
|
|
@ -24,14 +23,10 @@ import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.platform.LocalDensity
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.AnnotatedString
|
|
||||||
import androidx.compose.ui.text.SpanStyle
|
|
||||||
import androidx.compose.ui.text.buildAnnotatedString
|
|
||||||
import androidx.compose.ui.text.font.FontFamily
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.documentfile.provider.DocumentFile
|
import androidx.documentfile.provider.DocumentFile
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
|
|
@ -39,27 +34,27 @@ import com.ramcosta.composedestinations.navigation.DestinationsNavigator
|
||||||
import com.ramcosta.composedestinations.result.NavResult
|
import com.ramcosta.composedestinations.result.NavResult
|
||||||
import com.ramcosta.composedestinations.result.ResultRecipient
|
import com.ramcosta.composedestinations.result.ResultRecipient
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.lsposed.lspatch.BuildConfig
|
import org.lsposed.npatch.R
|
||||||
import org.lsposed.lspatch.R
|
import org.lsposed.npatch.BuildConfig
|
||||||
import org.lsposed.lspatch.config.ConfigManager
|
import org.lsposed.npatch.config.ConfigManager
|
||||||
import org.lsposed.lspatch.config.Configs
|
import org.lsposed.npatch.config.Configs
|
||||||
import org.lsposed.lspatch.database.entity.Module
|
import org.lsposed.npatch.database.entity.Module
|
||||||
import org.lsposed.lspatch.lspApp
|
import org.lsposed.npatch.lspApp
|
||||||
import org.lsposed.lspatch.share.Constants
|
import org.lsposed.npatch.share.Constants
|
||||||
import org.lsposed.lspatch.share.LSPConfig
|
import org.lsposed.npatch.share.LSPConfig
|
||||||
import org.lsposed.lspatch.ui.component.AnywhereDropdown
|
import org.lsposed.npatch.ui.component.AnywhereDropdown
|
||||||
import org.lsposed.lspatch.ui.component.AppItem
|
import org.lsposed.npatch.ui.component.AppItem
|
||||||
import org.lsposed.lspatch.ui.component.LoadingDialog
|
import org.lsposed.npatch.ui.component.LoadingDialog
|
||||||
import org.lsposed.lspatch.ui.page.ACTION_APPLIST
|
import org.lsposed.npatch.ui.page.ACTION_APPLIST
|
||||||
import org.lsposed.lspatch.ui.page.ACTION_STORAGE
|
import org.lsposed.npatch.ui.page.ACTION_STORAGE
|
||||||
import org.lsposed.lspatch.ui.page.SelectAppsResult
|
import org.lsposed.npatch.ui.page.SelectAppsResult
|
||||||
import org.lsposed.lspatch.ui.page.destinations.NewPatchScreenDestination
|
import org.lsposed.npatch.ui.page.destinations.NewPatchScreenDestination
|
||||||
import org.lsposed.lspatch.ui.page.destinations.SelectAppsScreenDestination
|
import org.lsposed.npatch.ui.page.destinations.SelectAppsScreenDestination
|
||||||
import org.lsposed.lspatch.ui.util.LocalSnackbarHost
|
import org.lsposed.npatch.ui.util.LocalSnackbarHost
|
||||||
import org.lsposed.lspatch.ui.viewmodel.manage.AppManageViewModel
|
import org.lsposed.npatch.ui.viewmodel.manage.AppManageViewModel
|
||||||
import org.lsposed.lspatch.ui.viewstate.ProcessingState
|
import org.lsposed.npatch.ui.viewstate.ProcessingState
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager
|
import org.lsposed.npatch.util.NPackageManager
|
||||||
import org.lsposed.lspatch.util.ShizukuApi
|
import org.lsposed.npatch.util.ShizukuApi
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
private const val TAG = "AppManagePage"
|
private const val TAG = "AppManagePage"
|
||||||
|
|
@ -78,7 +73,7 @@ fun AppManageBody(
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.align(Alignment.Center),
|
modifier = Modifier.align(Alignment.Center),
|
||||||
text = run {
|
text = run {
|
||||||
if (LSPPackageManager.appList.isEmpty()) stringResource(R.string.manage_loading)
|
if (NPackageManager.appList.isEmpty()) stringResource(R.string.manage_loading)
|
||||||
else stringResource(R.string.manage_no_apps)
|
else stringResource(R.string.manage_no_apps)
|
||||||
},
|
},
|
||||||
fontFamily = FontFamily.Serif,
|
fontFamily = FontFamily.Serif,
|
||||||
|
|
@ -155,7 +150,7 @@ fun AppManageBody(
|
||||||
onLongClick = { expanded = true },
|
onLongClick = { expanded = true },
|
||||||
surface = {
|
surface = {
|
||||||
AppItem(
|
AppItem(
|
||||||
icon = LSPPackageManager.getIcon(appInfo),
|
icon = NPackageManager.getIcon(appInfo),
|
||||||
label = appInfo.label,
|
label = appInfo.label,
|
||||||
packageName = appInfo.app.packageName,
|
packageName = appInfo.app.packageName,
|
||||||
additionalContent = {
|
additionalContent = {
|
||||||
|
|
@ -218,7 +213,7 @@ fun AppManageBody(
|
||||||
scope.launch {
|
scope.launch {
|
||||||
scopeApp = appInfo.app.packageName
|
scopeApp = appInfo.app.packageName
|
||||||
val activated = ConfigManager.getModulesForApp(scopeApp).map { it.pkgName }.toSet()
|
val activated = ConfigManager.getModulesForApp(scopeApp).map { it.pkgName }.toSet()
|
||||||
val initialSelected = LSPPackageManager.appList.mapNotNullTo(ArrayList()) {
|
val initialSelected = NPackageManager.appList.mapNotNullTo(ArrayList()) {
|
||||||
if (activated.contains(it.app.packageName)) it.app.packageName else null
|
if (activated.contains(it.app.packageName)) it.app.packageName else null
|
||||||
}
|
}
|
||||||
navigator.navigate(SelectAppsScreenDestination(true, initialSelected))
|
navigator.navigate(SelectAppsScreenDestination(true, initialSelected))
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.page.manage
|
package org.lsposed.npatch.ui.page.manage
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
|
@ -22,11 +22,11 @@ import androidx.compose.ui.text.buildAnnotatedString
|
||||||
import androidx.compose.ui.text.font.FontFamily
|
import androidx.compose.ui.text.font.FontFamily
|
||||||
import androidx.compose.ui.text.font.FontWeight
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import org.lsposed.lspatch.R
|
import org.lsposed.npatch.ui.component.AnywhereDropdown
|
||||||
import org.lsposed.lspatch.ui.component.AnywhereDropdown
|
import org.lsposed.npatch.ui.component.AppItem
|
||||||
import org.lsposed.lspatch.ui.component.AppItem
|
import org.lsposed.npatch.R
|
||||||
import org.lsposed.lspatch.ui.viewmodel.manage.ModuleManageViewModel
|
import org.lsposed.npatch.ui.viewmodel.manage.ModuleManageViewModel
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager
|
import org.lsposed.npatch.util.NPackageManager
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ModuleManageBody() {
|
fun ModuleManageBody() {
|
||||||
|
|
@ -37,7 +37,7 @@ fun ModuleManageBody() {
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.align(Alignment.Center),
|
modifier = Modifier.align(Alignment.Center),
|
||||||
text = run {
|
text = run {
|
||||||
if (LSPPackageManager.appList.isEmpty()) stringResource(R.string.manage_loading)
|
if (NPackageManager.appList.isEmpty()) stringResource(R.string.manage_loading)
|
||||||
else stringResource(R.string.manage_no_modules)
|
else stringResource(R.string.manage_no_modules)
|
||||||
},
|
},
|
||||||
fontFamily = FontFamily.Serif,
|
fontFamily = FontFamily.Serif,
|
||||||
|
|
@ -51,7 +51,7 @@ fun ModuleManageBody() {
|
||||||
key = { it.first.app.packageName }
|
key = { it.first.app.packageName }
|
||||||
) {
|
) {
|
||||||
var expanded by remember { mutableStateOf(false) }
|
var expanded by remember { mutableStateOf(false) }
|
||||||
val settingsIntent = remember { LSPPackageManager.getSettingsIntent(it.first.app.packageName) }
|
val settingsIntent = remember { NPackageManager.getSettingsIntent(it.first.app.packageName) }
|
||||||
AnywhereDropdown(
|
AnywhereDropdown(
|
||||||
expanded = expanded,
|
expanded = expanded,
|
||||||
onDismissRequest = { expanded = false },
|
onDismissRequest = { expanded = false },
|
||||||
|
|
@ -59,7 +59,7 @@ fun ModuleManageBody() {
|
||||||
onLongClick = { expanded = true },
|
onLongClick = { expanded = true },
|
||||||
surface = {
|
surface = {
|
||||||
AppItem(
|
AppItem(
|
||||||
icon = LSPPackageManager.getIcon(it.first),
|
icon = NPackageManager.getIcon(it.first),
|
||||||
label = it.first.label,
|
label = it.first.label,
|
||||||
packageName = it.first.app.packageName,
|
packageName = it.first.app.packageName,
|
||||||
additionalContent = {
|
additionalContent = {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.theme
|
package org.lsposed.npatch.ui.theme
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.theme
|
package org.lsposed.npatch.ui.theme
|
||||||
|
|
||||||
import androidx.compose.material3.Typography
|
import androidx.compose.material3.Typography
|
||||||
import androidx.compose.ui.text.TextStyle
|
import androidx.compose.ui.text.TextStyle
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.util
|
package org.lsposed.npatch.ui.util
|
||||||
|
|
||||||
import androidx.compose.material3.SnackbarHostState
|
import androidx.compose.material3.SnackbarHostState
|
||||||
import androidx.compose.runtime.compositionLocalOf
|
import androidx.compose.runtime.compositionLocalOf
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.util
|
package org.lsposed.npatch.ui.util
|
||||||
|
|
||||||
import android.text.method.LinkMovementMethod
|
import android.text.method.LinkMovementMethod
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.util
|
package org.lsposed.npatch.ui.util
|
||||||
|
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.util
|
package org.lsposed.npatch.ui.util
|
||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.util
|
package org.lsposed.npatch.ui.util
|
||||||
|
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
|
|
@ -14,7 +14,7 @@ import androidx.core.content.FileProvider
|
||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.lsposed.lspatch.BuildConfig
|
import org.lsposed.npatch.BuildConfig
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.viewmodel
|
package org.lsposed.npatch.ui.viewmodel
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
|
@ -8,10 +8,10 @@ import androidx.compose.runtime.setValue
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.lsposed.lspatch.Patcher
|
import org.lsposed.npatch.Patcher
|
||||||
import org.lsposed.lspatch.share.PatchConfig
|
import org.lsposed.npatch.share.PatchConfig
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager
|
import org.lsposed.npatch.util.NPackageManager
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager.AppInfo
|
import org.lsposed.npatch.util.NPackageManager.AppInfo
|
||||||
import org.lsposed.patch.util.Logger
|
import org.lsposed.patch.util.Logger
|
||||||
|
|
||||||
class NewPatchViewModel : ViewModel() {
|
class NewPatchViewModel : ViewModel() {
|
||||||
|
|
@ -120,7 +120,7 @@ class NewPatchViewModel : ViewModel() {
|
||||||
logger.e(t.stackTraceToString())
|
logger.e(t.stackTraceToString())
|
||||||
PatchState.ERROR
|
PatchState.ERROR
|
||||||
} finally {
|
} finally {
|
||||||
LSPPackageManager.cleanTmpApkDir()
|
NPackageManager.cleanTmpApkDir()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.viewmodel
|
package org.lsposed.npatch.ui.viewmodel
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
|
@ -8,8 +8,8 @@ import androidx.compose.runtime.setValue
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager
|
import org.lsposed.npatch.util.NPackageManager
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager.AppInfo
|
import org.lsposed.npatch.util.NPackageManager.AppInfo
|
||||||
|
|
||||||
class SelectAppsViewModel : ViewModel() {
|
class SelectAppsViewModel : ViewModel() {
|
||||||
|
|
||||||
|
|
@ -31,12 +31,12 @@ class SelectAppsViewModel : ViewModel() {
|
||||||
|
|
||||||
fun filterAppList(refresh: Boolean, filter: (AppInfo) -> Boolean) {
|
fun filterAppList(refresh: Boolean, filter: (AppInfo) -> Boolean) {
|
||||||
viewModelScope.launch {
|
viewModelScope.launch {
|
||||||
if (LSPPackageManager.appList.isEmpty() || refresh) {
|
if (NPackageManager.appList.isEmpty() || refresh) {
|
||||||
isRefreshing = true
|
isRefreshing = true
|
||||||
LSPPackageManager.fetchAppList()
|
NPackageManager.fetchAppList()
|
||||||
isRefreshing = false
|
isRefreshing = false
|
||||||
}
|
}
|
||||||
filteredList = LSPPackageManager.appList.filter(filter)
|
filteredList = NPackageManager.appList.filter(filter)
|
||||||
Log.d(TAG, "Filtered ${filteredList.size} apps")
|
Log.d(TAG, "Filtered ${filteredList.size} apps")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.viewmodel.manage
|
package org.lsposed.npatch.ui.viewmodel.manage
|
||||||
|
|
||||||
import android.content.pm.PackageInstaller
|
import android.content.pm.PackageInstaller
|
||||||
import android.util.Base64
|
import android.util.Base64
|
||||||
|
|
@ -13,16 +13,16 @@ import com.google.gson.Gson
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.lsposed.lspatch.Patcher
|
import org.lsposed.npatch.Patcher
|
||||||
import org.lsposed.lspatch.lspApp
|
import org.lsposed.npatch.lspApp
|
||||||
import org.lsposed.lspatch.share.Constants
|
import org.lsposed.npatch.share.Constants
|
||||||
import org.lsposed.lspatch.share.PatchConfig
|
import org.lsposed.npatch.share.PatchConfig
|
||||||
import org.lsposed.lspatch.ui.util.installApk
|
import org.lsposed.npatch.ui.util.installApk
|
||||||
import org.lsposed.lspatch.ui.util.installApks
|
import org.lsposed.npatch.ui.util.installApks
|
||||||
import org.lsposed.lspatch.ui.viewstate.ProcessingState
|
import org.lsposed.npatch.ui.viewstate.ProcessingState
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager
|
import org.lsposed.npatch.util.NPackageManager
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager.AppInfo
|
import org.lsposed.npatch.util.NPackageManager.AppInfo
|
||||||
import org.lsposed.lspatch.util.ShizukuApi
|
import org.lsposed.npatch.util.ShizukuApi
|
||||||
import org.lsposed.patch.util.Logger
|
import org.lsposed.patch.util.Logger
|
||||||
import java.io.FileNotFoundException
|
import java.io.FileNotFoundException
|
||||||
import java.util.zip.ZipFile
|
import java.util.zip.ZipFile
|
||||||
|
|
@ -41,7 +41,7 @@ class AppManageViewModel : ViewModel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
val appList: List<Pair<AppInfo, PatchConfig>> by derivedStateOf {
|
val appList: List<Pair<AppInfo, PatchConfig>> by derivedStateOf {
|
||||||
LSPPackageManager.appList.mapNotNull { appInfo ->
|
NPackageManager.appList.mapNotNull { appInfo ->
|
||||||
runCatching {
|
runCatching {
|
||||||
appInfo.app.metaData?.getString("npatch")?.let {
|
appInfo.app.metaData?.getString("npatch")?.let {
|
||||||
val json = Base64.decode(it, Base64.DEFAULT).toString(Charsets.UTF_8)
|
val json = Base64.decode(it, Base64.DEFAULT).toString(Charsets.UTF_8)
|
||||||
|
|
@ -91,7 +91,7 @@ class AppManageViewModel : ViewModel() {
|
||||||
updateLoaderState = ProcessingState.Processing
|
updateLoaderState = ProcessingState.Processing
|
||||||
val result = runCatching {
|
val result = runCatching {
|
||||||
withContext(Dispatchers.IO) {
|
withContext(Dispatchers.IO) {
|
||||||
LSPPackageManager.apply {
|
NPackageManager.apply {
|
||||||
cleanTmpApkDir()
|
cleanTmpApkDir()
|
||||||
cleanExternalTmpApkDir()
|
cleanExternalTmpApkDir()
|
||||||
}
|
}
|
||||||
|
|
@ -101,7 +101,7 @@ class AppManageViewModel : ViewModel() {
|
||||||
for (apk in apkPaths) {
|
for (apk in apkPaths) {
|
||||||
ZipFile(apk).use { zip ->
|
ZipFile(apk).use { zip ->
|
||||||
var entry = zip.getEntry(Constants.ORIGINAL_APK_ASSET_PATH)
|
var entry = zip.getEntry(Constants.ORIGINAL_APK_ASSET_PATH)
|
||||||
if (entry == null) entry = zip.getEntry("assets/lspatch/origin_apk.bin")
|
if (entry == null) entry = zip.getEntry("assets/npatch/origin_apk.bin")
|
||||||
if (entry == null) throw FileNotFoundException("Original apk entry not found for $apk")
|
if (entry == null) throw FileNotFoundException("Original apk entry not found for $apk")
|
||||||
zip.getInputStream(entry).use { input ->
|
zip.getInputStream(entry).use { input ->
|
||||||
val dst = lspApp.tmpApkDir.resolve(apk.substringAfterLast('/'))
|
val dst = lspApp.tmpApkDir.resolve(apk.substringAfterLast('/'))
|
||||||
|
|
@ -138,7 +138,7 @@ class AppManageViewModel : ViewModel() {
|
||||||
installApk(lspApp, apkFiles.first())
|
installApk(lspApp, apkFiles.first())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
val (status, message) = LSPPackageManager.install()
|
val (status, message) = NPackageManager.install()
|
||||||
if (status != PackageInstaller.STATUS_SUCCESS) throw RuntimeException(message)
|
if (status != PackageInstaller.STATUS_SUCCESS) throw RuntimeException(message)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
package org.lsposed.lspatch.ui.viewmodel.manage
|
package org.lsposed.npatch.ui.viewmodel.manage
|
||||||
|
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
import androidx.compose.runtime.derivedStateOf
|
import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import org.lsposed.lspatch.util.LSPPackageManager
|
import org.lsposed.npatch.util.NPackageManager
|
||||||
|
|
||||||
class ModuleManageViewModel : ViewModel() {
|
class ModuleManageViewModel : ViewModel() {
|
||||||
|
|
||||||
|
|
@ -18,8 +18,8 @@ class ModuleManageViewModel : ViewModel() {
|
||||||
val scope: List<String>
|
val scope: List<String>
|
||||||
)
|
)
|
||||||
|
|
||||||
val appList: List<Pair<LSPPackageManager.AppInfo, XposedInfo>> by derivedStateOf {
|
val appList: List<Pair<NPackageManager.AppInfo, XposedInfo>> by derivedStateOf {
|
||||||
LSPPackageManager.appList.mapNotNull { appInfo ->
|
NPackageManager.appList.mapNotNull { appInfo ->
|
||||||
val metaData = appInfo.app.metaData ?: return@mapNotNull null
|
val metaData = appInfo.app.metaData ?: return@mapNotNull null
|
||||||
appInfo to XposedInfo(
|
appInfo to XposedInfo(
|
||||||
metaData.getInt("xposedminversion", -1).also { if (it == -1) return@mapNotNull null },
|
metaData.getInt("xposedminversion", -1).also { if (it == -1) return@mapNotNull null },
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.ui.viewstate
|
package org.lsposed.npatch.ui.viewstate
|
||||||
|
|
||||||
sealed class ProcessingState<out T> {
|
sealed class ProcessingState<out T> {
|
||||||
object Idle : ProcessingState<Nothing>()
|
object Idle : ProcessingState<Nothing>()
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.util
|
package org.lsposed.npatch.util
|
||||||
|
|
||||||
import android.content.IIntentReceiver
|
import android.content.IIntentReceiver
|
||||||
import android.content.IIntentSender
|
import android.content.IIntentSender
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.util
|
package org.lsposed.npatch.util
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
|
@ -22,10 +22,10 @@ import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import me.zhanghai.android.appiconloader.AppIconLoader
|
import me.zhanghai.android.appiconloader.AppIconLoader
|
||||||
import org.lsposed.lspatch.config.ConfigManager
|
import org.lsposed.npatch.config.ConfigManager
|
||||||
import org.lsposed.lspatch.config.Configs
|
import org.lsposed.npatch.config.Configs
|
||||||
import org.lsposed.lspatch.lspApp
|
import org.lsposed.npatch.lspApp
|
||||||
import org.lsposed.lspatch.share.Constants
|
import org.lsposed.npatch.share.Constants
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.text.Collator
|
import java.text.Collator
|
||||||
|
|
@ -33,7 +33,7 @@ import java.util.*
|
||||||
import kotlin.coroutines.resume
|
import kotlin.coroutines.resume
|
||||||
import kotlin.coroutines.suspendCoroutine
|
import kotlin.coroutines.suspendCoroutine
|
||||||
|
|
||||||
object LSPPackageManager {
|
object NPackageManager {
|
||||||
|
|
||||||
private const val TAG = "LSPPackageManager"
|
private const val TAG = "LSPPackageManager"
|
||||||
private const val SETTINGS_CATEGORY = "de.robv.android.xposed.category.MODULE_SETTINGS"
|
private const val SETTINGS_CATEGORY = "de.robv.android.xposed.category.MODULE_SETTINGS"
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.util
|
package org.lsposed.npatch.util
|
||||||
|
|
||||||
import android.content.IntentSender
|
import android.content.IntentSender
|
||||||
import android.content.pm.*
|
import android.content.pm.*
|
||||||
|
|
@ -15,7 +15,7 @@ android {
|
||||||
proguardFiles("proguard-rules.pro")
|
proguardFiles("proguard-rules.pro")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
namespace = "org.lsposed.lspatch.metaloader"
|
namespace = "org.lsposed.npatch.metaloader"
|
||||||
}
|
}
|
||||||
|
|
||||||
androidComponents.onVariants { variant ->
|
androidComponents.onVariants { variant ->
|
||||||
|
|
@ -29,7 +29,7 @@ androidComponents.onVariants { variant ->
|
||||||
"$buildDir/intermediates/dex/$variantLowered/mergeDex$variantCapped"
|
"$buildDir/intermediates/dex/$variantLowered/mergeDex$variantCapped"
|
||||||
from(dexOutPath)
|
from(dexOutPath)
|
||||||
rename("classes.dex", "metaloader.dex")
|
rename("classes.dex", "metaloader.dex")
|
||||||
into("${rootProject.projectDir}/out/assets/${variant.name}/lspatch")
|
into("${rootProject.projectDir}/out/assets/${variant.name}/npatch")
|
||||||
}
|
}
|
||||||
|
|
||||||
task("copy$variantCapped") {
|
task("copy$variantCapped") {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
-keep class org.lsposed.lspatch.metaloader.LSPAppComponentFactoryStub {
|
-keep class org.lsposed.npatch.metaloader.LSPAppComponentFactoryStub {
|
||||||
public static byte[] dex;
|
public static byte[] dex;
|
||||||
<init>();
|
<init>();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.metaloader;
|
package org.lsposed.npatch.metaloader;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.ActivityThread;
|
import android.app.ActivityThread;
|
||||||
|
|
@ -12,7 +12,7 @@ import android.util.JsonReader;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.lsposed.hiddenapibypass.HiddenApiBypass;
|
import org.lsposed.hiddenapibypass.HiddenApiBypass;
|
||||||
import org.lsposed.lspatch.share.Constants;
|
import org.lsposed.npatch.share.Constants;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
@ -37,7 +37,7 @@ public class LSPAppComponentFactoryStub extends AppComponentFactory {
|
||||||
static {
|
static {
|
||||||
final boolean appZygote = ActivityThread.currentActivityThread() == null;
|
final boolean appZygote = ActivityThread.currentActivityThread() == null;
|
||||||
if (appZygote) {
|
if (appZygote) {
|
||||||
Log.i(TAG, "Skip loading liblspatch.so for appZygote");
|
Log.i(TAG, "Skip loading libnpatch.so for appZygote");
|
||||||
} else {
|
} else {
|
||||||
bootstrap();
|
bootstrap();
|
||||||
}
|
}
|
||||||
|
|
@ -93,7 +93,7 @@ public class LSPAppComponentFactoryStub extends AppComponentFactory {
|
||||||
transfer(is, os);
|
transfer(is, os);
|
||||||
dex = os.toByteArray();
|
dex = os.toByteArray();
|
||||||
}
|
}
|
||||||
soPath = manager.sourceDir + "!/assets/lspatch/so/" + libName + "/liblspatch.so";
|
soPath = manager.sourceDir + "!/assets/npatch/so/" + libName + "/libnpatch.so";
|
||||||
} else {
|
} else {
|
||||||
Log.i(TAG, "Bootstrap loader from embedment");
|
Log.i(TAG, "Bootstrap loader from embedment");
|
||||||
try (var is = cl.getResourceAsStream(Constants.LOADER_DEX_ASSET_PATH);
|
try (var is = cl.getResourceAsStream(Constants.LOADER_DEX_ASSET_PATH);
|
||||||
|
|
@ -101,7 +101,7 @@ public class LSPAppComponentFactoryStub extends AppComponentFactory {
|
||||||
transfer(is, os);
|
transfer(is, os);
|
||||||
dex = os.toByteArray();
|
dex = os.toByteArray();
|
||||||
}
|
}
|
||||||
soPath = cl.getResource("assets/lspatch/so/" + libName + "/liblspatch.so").getPath().substring(5);
|
soPath = cl.getResource("assets/npatch/so/" + libName + "/libnpatch.so").getPath().substring(5);
|
||||||
}
|
}
|
||||||
|
|
||||||
System.load(soPath);
|
System.load(soPath);
|
||||||
|
|
@ -25,7 +25,7 @@ android {
|
||||||
path("src/main/jni/CMakeLists.txt")
|
path("src/main/jni/CMakeLists.txt")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
namespace = "org.lsposed.lspatch.loader"
|
namespace = "org.lsposed.npatch.loader"
|
||||||
}
|
}
|
||||||
|
|
||||||
androidComponents.onVariants { variant ->
|
androidComponents.onVariants { variant ->
|
||||||
|
|
@ -35,7 +35,7 @@ androidComponents.onVariants { variant ->
|
||||||
dependsOn("assemble$variantCapped")
|
dependsOn("assemble$variantCapped")
|
||||||
from(layout.buildDirectory.file("intermediates/dex/${variant.name}/mergeDex$variantCapped/classes.dex"))
|
from(layout.buildDirectory.file("intermediates/dex/${variant.name}/mergeDex$variantCapped/classes.dex"))
|
||||||
rename("classes.dex", "loader.dex")
|
rename("classes.dex", "loader.dex")
|
||||||
into("${rootProject.projectDir}/out/assets/${variant.name}/lspatch")
|
into("${rootProject.projectDir}/out/assets/${variant.name}/npatch")
|
||||||
}
|
}
|
||||||
|
|
||||||
val copySoTask = tasks.register<Copy>("copySo$variantCapped") {
|
val copySoTask = tasks.register<Copy>("copySo$variantCapped") {
|
||||||
|
|
@ -45,10 +45,10 @@ androidComponents.onVariants { variant ->
|
||||||
from(
|
from(
|
||||||
fileTree(
|
fileTree(
|
||||||
"dir" to layout.buildDirectory.dir("intermediates/stripped_native_libs/${variant.name}/strip${variantCapped}DebugSymbols/out/lib"),
|
"dir" to layout.buildDirectory.dir("intermediates/stripped_native_libs/${variant.name}/strip${variantCapped}DebugSymbols/out/lib"),
|
||||||
"include" to listOf("**/liblspatch.so")
|
"include" to listOf("**/libnpatch.so")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
into("${rootProject.projectDir}/out/assets/${variant.name}/lspatch/so")
|
into("${rootProject.projectDir}/out/assets/${variant.name}/npatch/so")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register("copy$variantCapped") {
|
tasks.register("copy$variantCapped") {
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
package org.lsposed.lspatch.loader;
|
package org.lsposed.npatch.loader;
|
||||||
|
|
||||||
import static org.lsposed.lspatch.share.Constants.CONFIG_ASSET_PATH;
|
import static org.lsposed.npatch.share.Constants.CONFIG_ASSET_PATH;
|
||||||
import static org.lsposed.lspatch.share.Constants.ORIGINAL_APK_ASSET_PATH;
|
import static org.lsposed.npatch.share.Constants.ORIGINAL_APK_ASSET_PATH;
|
||||||
import static org.lsposed.lspatch.share.Constants.PROVIDER_DEX_ASSET_PATH;
|
import static org.lsposed.npatch.share.Constants.PROVIDER_DEX_ASSET_PATH;
|
||||||
|
|
||||||
import android.app.ActivityThread;
|
import android.app.ActivityThread;
|
||||||
import android.app.LoadedApk;
|
import android.app.LoadedApk;
|
||||||
|
|
@ -19,12 +19,12 @@ import com.google.gson.Gson;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
import org.lsposed.lspatch.loader.util.FileUtils;
|
import org.lsposed.npatch.loader.util.FileUtils;
|
||||||
import org.lsposed.lspatch.loader.util.XLog;
|
import org.lsposed.npatch.loader.util.XLog;
|
||||||
import org.lsposed.lspatch.service.IntegrApplicationService;
|
import org.lsposed.npatch.service.IntegrApplicationService;
|
||||||
import org.lsposed.lspatch.service.NeoLocalApplicationService;
|
import org.lsposed.npatch.service.NeoLocalApplicationService;
|
||||||
import org.lsposed.lspatch.service.RemoteApplicationService;
|
import org.lsposed.npatch.service.RemoteApplicationService;
|
||||||
import org.lsposed.lspatch.share.PatchConfig;
|
import org.lsposed.npatch.share.PatchConfig;
|
||||||
import org.lsposed.lspd.core.Startup;
|
import org.lsposed.lspd.core.Startup;
|
||||||
import org.lsposed.lspd.models.Module;
|
import org.lsposed.lspd.models.Module;
|
||||||
import org.lsposed.lspd.service.ILSPApplicationService;
|
import org.lsposed.lspd.service.ILSPApplicationService;
|
||||||
|
|
@ -76,7 +76,7 @@ public class LSPApplication {
|
||||||
|
|
||||||
private static boolean hasEmbeddedModules(Context context) {
|
private static boolean hasEmbeddedModules(Context context) {
|
||||||
try {
|
try {
|
||||||
String[] list = context.getAssets().list("lspatch/modules");
|
String[] list = context.getAssets().list("npatch/modules");
|
||||||
return list != null && list.length > 0;
|
return list != null && list.length > 0;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.loader;
|
package org.lsposed.npatch.loader;
|
||||||
|
|
||||||
import android.app.ActivityThread;
|
import android.app.ActivityThread;
|
||||||
import android.app.LoadedApk;
|
import android.app.LoadedApk;
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
package org.lsposed.lspatch.loader;
|
package org.lsposed.npatch.loader;
|
||||||
|
|
||||||
import static org.lsposed.lspatch.share.Constants.ORIGINAL_APK_ASSET_PATH;
|
import static org.lsposed.npatch.share.Constants.ORIGINAL_APK_ASSET_PATH;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
|
|
@ -15,8 +15,8 @@ import android.util.Log;
|
||||||
|
|
||||||
import com.google.gson.JsonSyntaxException;
|
import com.google.gson.JsonSyntaxException;
|
||||||
|
|
||||||
import org.lsposed.lspatch.loader.util.XLog;
|
import org.lsposed.npatch.loader.util.XLog;
|
||||||
import org.lsposed.lspatch.share.Constants;
|
import org.lsposed.npatch.share.Constants;
|
||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
|
@ -153,7 +153,7 @@ public class SigBypass {
|
||||||
if (sigBypassLevel >= Constants.SIGBYPASS_LV_PM_OPENAT) {
|
if (sigBypassLevel >= Constants.SIGBYPASS_LV_PM_OPENAT) {
|
||||||
String cacheApkPath;
|
String cacheApkPath;
|
||||||
try (ZipFile sourceFile = new ZipFile(context.getPackageResourcePath())) {
|
try (ZipFile sourceFile = new ZipFile(context.getPackageResourcePath())) {
|
||||||
cacheApkPath = context.getCacheDir() + "/lspatch/origin/" + sourceFile.getEntry(ORIGINAL_APK_ASSET_PATH).getCrc() + ".apk";
|
cacheApkPath = context.getCacheDir() + "/npatch/origin/" + sourceFile.getEntry(ORIGINAL_APK_ASSET_PATH).getCrc() + ".apk";
|
||||||
}
|
}
|
||||||
org.lsposed.lspd.nativebridge.SigBypass.enableOpenatHook(context.getPackageResourcePath(), cacheApkPath);
|
org.lsposed.lspd.nativebridge.SigBypass.enableOpenatHook(context.getPackageResourcePath(), cacheApkPath);
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.loader;
|
package org.lsposed.npatch.loader;
|
||||||
|
|
||||||
import android.app.ActivityThread;
|
import android.app.ActivityThread;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
|
@ -6,7 +6,6 @@ import android.util.Log;
|
||||||
import android.util.LogPrinter;
|
import android.util.LogPrinter;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.loader.util;
|
package org.lsposed.npatch.loader.util;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.FileVisitResult;
|
import java.nio.file.FileVisitResult;
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
package org.lsposed.lspatch.loader.util;
|
package org.lsposed.npatch.loader.util;
|
||||||
|
|
||||||
import org.lsposed.lspatch.loader.BuildConfig;
|
import org.lsposed.npatch.loader.BuildConfig;
|
||||||
|
|
||||||
public class XLog {
|
public class XLog {
|
||||||
|
|
||||||
|
|
@ -1,19 +1,17 @@
|
||||||
package org.lsposed.lspatch.service;
|
package org.lsposed.npatch.service;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.Environment;
|
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.lsposed.lspatch.loader.util.FileUtils;
|
import org.lsposed.npatch.loader.util.FileUtils;
|
||||||
import org.lsposed.lspatch.share.Constants;
|
import org.lsposed.npatch.share.Constants;
|
||||||
import org.lsposed.lspatch.util.ModuleLoader;
|
import org.lsposed.npatch.util.ModuleLoader;
|
||||||
import org.lsposed.lspd.models.Module;
|
import org.lsposed.lspd.models.Module;
|
||||||
import org.lsposed.lspd.service.ILSPApplicationService;
|
import org.lsposed.lspd.service.ILSPApplicationService;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
|
|
@ -30,7 +28,7 @@ public class IntegrApplicationService extends ILSPApplicationService.Stub {
|
||||||
|
|
||||||
public IntegrApplicationService(Context context) {
|
public IntegrApplicationService(Context context) {
|
||||||
try {
|
try {
|
||||||
String[] assetsList = context.getAssets().list("lspatch/modules");
|
String[] assetsList = context.getAssets().list("npatch/modules");
|
||||||
if (assetsList == null || assetsList.length == 0) {
|
if (assetsList == null || assetsList.length == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -55,7 +53,7 @@ public class IntegrApplicationService extends ILSPApplicationService.Stub {
|
||||||
Log.i(TAG, "Extracting embedded module: " + packageName);
|
Log.i(TAG, "Extracting embedded module: " + packageName);
|
||||||
FileUtils.deleteFolderIfExists(Paths.get(modulePath));
|
FileUtils.deleteFolderIfExists(Paths.get(modulePath));
|
||||||
Files.createDirectories(Paths.get(modulePath));
|
Files.createDirectories(Paths.get(modulePath));
|
||||||
try (var is = context.getAssets().open("lspatch/modules/" + name)) {
|
try (var is = context.getAssets().open("npatch/modules/" + name)) {
|
||||||
Files.copy(is, Paths.get(cacheApkPath));
|
Files.copy(is, Paths.get(cacheApkPath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,19 +1,13 @@
|
||||||
package org.lsposed.lspatch.service;
|
package org.lsposed.npatch.service;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.pm.ApplicationInfo;
|
|
||||||
import android.content.pm.PackageManager;
|
|
||||||
import android.os.Environment;
|
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
import android.os.ParcelFileDescriptor;
|
import android.os.ParcelFileDescriptor;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
import org.json.JSONException;
|
import org.lsposed.npatch.util.ModuleLoader;
|
||||||
import org.json.JSONObject;
|
|
||||||
import org.lsposed.lspatch.util.ModuleLoader;
|
|
||||||
import org.lsposed.lspd.models.Module;
|
import org.lsposed.lspd.models.Module;
|
||||||
import org.lsposed.lspd.service.ILSPApplicationService;
|
import org.lsposed.lspd.service.ILSPApplicationService;
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.service;
|
package org.lsposed.npatch.service;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
|
|
@ -15,7 +15,7 @@ import android.os.RemoteException;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.lsposed.lspatch.share.Constants;
|
import org.lsposed.npatch.share.Constants;
|
||||||
import org.lsposed.lspd.models.Module;
|
import org.lsposed.lspd.models.Module;
|
||||||
import org.lsposed.lspd.service.ILSPApplicationService;
|
import org.lsposed.lspd.service.ILSPApplicationService;
|
||||||
|
|
||||||
|
|
@ -32,7 +32,7 @@ import java.util.concurrent.TimeoutException;
|
||||||
public class RemoteApplicationService implements ILSPApplicationService {
|
public class RemoteApplicationService implements ILSPApplicationService {
|
||||||
|
|
||||||
private static final String TAG = "NPatch";
|
private static final String TAG = "NPatch";
|
||||||
private static final String MODULE_SERVICE = "org.lsposed.lspatch.manager.ModuleService";
|
private static final String MODULE_SERVICE = "org.lsposed.npatch.manager.ModuleService";
|
||||||
private static final int CONNECTION_TIMEOUT_SEC = 1;
|
private static final int CONNECTION_TIMEOUT_SEC = 1;
|
||||||
|
|
||||||
private volatile ILSPApplicationService service;
|
private volatile ILSPApplicationService service;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
project(lspatch)
|
project(npatch)
|
||||||
cmake_minimum_required(VERSION 3.28)
|
cmake_minimum_required(VERSION 3.28)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 23)
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,8 @@
|
||||||
// Created by loves on 6/19/2021.
|
// Created by loves on 6/19/2021.
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef LSPATCH_PROFILE_SAVER_H
|
#ifndef NPATCH_PROFILE_SAVER_H
|
||||||
#define LSPATCH_PROFILE_SAVER_H
|
#define NPATCH_PROFILE_SAVER_H
|
||||||
|
|
||||||
#include "utils/hook_helper.hpp"
|
#include "utils/hook_helper.hpp"
|
||||||
|
|
||||||
|
|
@ -54,4 +54,4 @@ public:
|
||||||
};
|
};
|
||||||
} // namespace art
|
} // namespace art
|
||||||
|
|
||||||
#endif // LSPATCH_PROFILE_SAVER_H
|
#endif // NPATCH_PROFILE_SAVER_H
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,8 @@
|
||||||
* Copyright (C) 2021 - 2022 LSPosed Contributors
|
* Copyright (C) 2021 - 2022 LSPosed Contributors
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef LSPATCH_OAT_FILE_MANAGER_H
|
#ifndef NPATCH_OAT_FILE_MANAGER_H
|
||||||
#define LSPATCH_OAT_FILE_MANAGER_H
|
#define NPATCH_OAT_FILE_MANAGER_H
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|
@ -69,4 +69,4 @@ public:
|
||||||
};
|
};
|
||||||
} // namespace art
|
} // namespace art
|
||||||
|
|
||||||
#endif // LSPATCH_OAT_FILE_MANAGER_H
|
#endif // NPATCH_OAT_FILE_MANAGER_H
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ namespace lspd {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PatchLoader::SetupEntryClass(JNIEnv* env) {
|
void PatchLoader::SetupEntryClass(JNIEnv* env) {
|
||||||
ScopedLocalRef<jclass> entry_class(FindClassFromLoader(env, GetCurrentClassLoader(), "org.lsposed.lspatch.loader.LSPApplication"));
|
ScopedLocalRef<jclass> entry_class(FindClassFromLoader(env, GetCurrentClassLoader(), "org.lsposed.npatch.loader.LSPApplication"));
|
||||||
if (entry_class) {
|
if (entry_class) {
|
||||||
entry_class_ = JNI_NewGlobalRef(env, entry_class.get());
|
entry_class_ = JNI_NewGlobalRef(env, entry_class.get());
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -102,7 +102,7 @@ namespace lspd {
|
||||||
[](auto symbol) { return GetArt()->getSymbPrefixFirstAddress(symbol); },
|
[](auto symbol) { return GetArt()->getSymbPrefixFirstAddress(symbol); },
|
||||||
};
|
};
|
||||||
|
|
||||||
auto stub = JNI_FindClass(env, "org/lsposed/lspatch/metaloader/LSPAppComponentFactoryStub");
|
auto stub = JNI_FindClass(env, "org/lsposed/npatch/metaloader/LSPAppComponentFactoryStub");
|
||||||
auto dex_field = JNI_GetStaticFieldID(env, stub, "dex", "[B");
|
auto dex_field = JNI_GetStaticFieldID(env, stub, "dex", "[B");
|
||||||
ScopedLocalRef<jbyteArray> array = JNI_GetStaticObjectField(env, stub, dex_field);
|
ScopedLocalRef<jbyteArray> array = JNI_GetStaticObjectField(env, stub, dex_field);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ dependencies {
|
||||||
implementation(projects.apkzlib)
|
implementation(projects.apkzlib)
|
||||||
implementation(projects.share.java)
|
implementation(projects.share.java)
|
||||||
|
|
||||||
implementation(lspatch.commons.io)
|
implementation(npatch.commons.io)
|
||||||
implementation(lspatch.beust.jcommander)
|
implementation(npatch.beust.jcommander)
|
||||||
implementation(lspatch.google.gson)
|
implementation(npatch.google.gson)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
package org.lsposed.patch;
|
package org.lsposed.patch;
|
||||||
|
|
||||||
import static org.lsposed.lspatch.share.Constants.CONFIG_ASSET_PATH;
|
import static org.lsposed.npatch.share.Constants.CONFIG_ASSET_PATH;
|
||||||
import static org.lsposed.lspatch.share.Constants.EMBEDDED_MODULES_ASSET_PATH;
|
import static org.lsposed.npatch.share.Constants.EMBEDDED_MODULES_ASSET_PATH;
|
||||||
import static org.lsposed.lspatch.share.Constants.LOADER_DEX_ASSET_PATH;
|
import static org.lsposed.npatch.share.Constants.LOADER_DEX_ASSET_PATH;
|
||||||
import static org.lsposed.lspatch.share.Constants.ORIGINAL_APK_ASSET_PATH;
|
import static org.lsposed.npatch.share.Constants.ORIGINAL_APK_ASSET_PATH;
|
||||||
import static org.lsposed.lspatch.share.Constants.PROXY_APP_COMPONENT_FACTORY;
|
import static org.lsposed.npatch.share.Constants.PROXY_APP_COMPONENT_FACTORY;
|
||||||
|
|
||||||
import com.android.tools.build.apkzlib.sign.SigningExtension;
|
import com.android.tools.build.apkzlib.sign.SigningExtension;
|
||||||
import com.android.tools.build.apkzlib.sign.SigningOptions;
|
import com.android.tools.build.apkzlib.sign.SigningOptions;
|
||||||
|
|
@ -23,12 +23,11 @@ import com.wind.meditor.property.ModificationProperty;
|
||||||
import com.wind.meditor.property.PermissionMapper;
|
import com.wind.meditor.property.PermissionMapper;
|
||||||
import com.wind.meditor.utils.NodeValue;
|
import com.wind.meditor.utils.NodeValue;
|
||||||
import com.wind.meditor.utils.PermissionType;
|
import com.wind.meditor.utils.PermissionType;
|
||||||
import com.wind.meditor.utils.Utils;
|
|
||||||
|
|
||||||
import org.apache.commons.io.FilenameUtils;
|
import org.apache.commons.io.FilenameUtils;
|
||||||
import org.lsposed.lspatch.share.Constants;
|
import org.lsposed.npatch.share.Constants;
|
||||||
import org.lsposed.lspatch.share.LSPConfig;
|
import org.lsposed.npatch.share.LSPConfig;
|
||||||
import org.lsposed.lspatch.share.PatchConfig;
|
import org.lsposed.npatch.share.PatchConfig;
|
||||||
import org.lsposed.patch.util.ApkSignatureHelper;
|
import org.lsposed.patch.util.ApkSignatureHelper;
|
||||||
import org.lsposed.patch.util.JavaLogger;
|
import org.lsposed.patch.util.JavaLogger;
|
||||||
import org.lsposed.patch.util.Logger;
|
import org.lsposed.patch.util.Logger;
|
||||||
|
|
@ -48,15 +47,13 @@ import java.util.Arrays;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class LSPatch {
|
public class NPatch {
|
||||||
|
|
||||||
static class PatchError extends Error {
|
static class PatchError extends Error {
|
||||||
public PatchError(String message, Throwable cause) {
|
public PatchError(String message, Throwable cause) {
|
||||||
|
|
@ -132,7 +129,7 @@ public class LSPatch {
|
||||||
|
|
||||||
private final Logger logger;
|
private final Logger logger;
|
||||||
|
|
||||||
public LSPatch(Logger logger, String... args) {
|
public NPatch(Logger logger, String... args) {
|
||||||
jCommander = JCommander.newBuilder().addObject(this).build();
|
jCommander = JCommander.newBuilder().addObject(this).build();
|
||||||
try {
|
try {
|
||||||
jCommander.parse(args);
|
jCommander.parse(args);
|
||||||
|
|
@ -154,13 +151,13 @@ public class LSPatch {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String... args) throws IOException {
|
public static void main(String... args) throws IOException {
|
||||||
LSPatch lspatch = new LSPatch(new JavaLogger(), args);
|
NPatch npatch = new NPatch(new JavaLogger(), args);
|
||||||
if (lspatch.help) {
|
if (npatch.help) {
|
||||||
lspatch.jCommander.usage();
|
npatch.jCommander.usage();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
lspatch.doCommandLine();
|
npatch.doCommandLine();
|
||||||
} catch (PatchError e) {
|
} catch (PatchError e) {
|
||||||
e.printStackTrace(System.err);
|
e.printStackTrace(System.err);
|
||||||
}
|
}
|
||||||
|
|
@ -295,7 +292,7 @@ public class LSPatch {
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.i("Adding config...");
|
logger.i("Adding config...");
|
||||||
// save lspatch config to asset..
|
// save npatch config to asset..
|
||||||
try (var is = new ByteArrayInputStream(configBytes)) {
|
try (var is = new ByteArrayInputStream(configBytes)) {
|
||||||
dstZFile.add(CONFIG_ASSET_PATH, is);
|
dstZFile.add(CONFIG_ASSET_PATH, is);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
|
|
@ -319,7 +316,7 @@ public class LSPatch {
|
||||||
|
|
||||||
if (isInjectProvider){
|
if (isInjectProvider){
|
||||||
try (var is = getClass().getClassLoader().getResourceAsStream("assets/provider.dex")) {
|
try (var is = getClass().getClassLoader().getResourceAsStream("assets/provider.dex")) {
|
||||||
dstZFile.add("assets/lspatch/provider.dex", is);
|
dstZFile.add("assets/npatch/provider.dex", is);
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
throw new PatchError("Error when adding dex", e);
|
throw new PatchError("Error when adding dex", e);
|
||||||
}
|
}
|
||||||
|
|
@ -338,9 +335,9 @@ public class LSPatch {
|
||||||
|
|
||||||
logger.i("Adding native lib...");
|
logger.i("Adding native lib...");
|
||||||
// copy so and dex files into the unzipped apk
|
// copy so and dex files into the unzipped apk
|
||||||
// do not put liblspatch.so into apk!lib because x86 native bridge causes crash
|
// do not put libnpatch.so into apk!lib because x86 native bridge causes crash
|
||||||
for (String arch : ARCHES) {
|
for (String arch : ARCHES) {
|
||||||
String entryName = "assets/lspatch/so/" + arch + "/liblspatch.so";
|
String entryName = "assets/npatch/so/" + arch + "/libnpatch.so";
|
||||||
try (var is = getClass().getClassLoader().getResourceAsStream(entryName)) {
|
try (var is = getClass().getClassLoader().getResourceAsStream(entryName)) {
|
||||||
dstZFile.add(entryName, is, false); // no compress for so
|
dstZFile.add(entryName, is, false); // no compress for so
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
|
|
@ -23,7 +23,7 @@ dependencyResolutionManagement {
|
||||||
create("libs") {
|
create("libs") {
|
||||||
from(files("core/gradle/libs.versions.toml"))
|
from(files("core/gradle/libs.versions.toml"))
|
||||||
}
|
}
|
||||||
create("lspatch") {
|
create("npatch") {
|
||||||
from(files("gradle/lspatch.versions.toml"))
|
from(files("gradle/lspatch.versions.toml"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ plugins {
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = "org.lsposed.lspatch.share"
|
namespace = "org.lsposed.npatch.share"
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
androidResources = false
|
androidResources = false
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.util;
|
package org.lsposed.npatch.util;
|
||||||
|
|
||||||
import android.os.SharedMemory;
|
import android.os.SharedMemory;
|
||||||
import android.system.ErrnoException;
|
import android.system.ErrnoException;
|
||||||
|
|
@ -1,18 +1,18 @@
|
||||||
package org.lsposed.lspatch.share;
|
package org.lsposed.npatch.share;
|
||||||
|
|
||||||
public class Constants {
|
public class Constants {
|
||||||
|
|
||||||
final static public String CONFIG_ASSET_PATH = "assets/lspatch/config.json";
|
final static public String CONFIG_ASSET_PATH = "assets/npatch/config.json";
|
||||||
final static public String LOADER_DEX_ASSET_PATH = "assets/lspatch/loader.dex";
|
final static public String LOADER_DEX_ASSET_PATH = "assets/npatch/loader.dex";
|
||||||
final static public String META_LOADER_DEX_ASSET_PATH = "assets/lspatch/metaloader.dex";
|
final static public String META_LOADER_DEX_ASSET_PATH = "assets/npatch/metaloader.dex";
|
||||||
final static public String PROVIDER_DEX_ASSET_PATH = "assets/lspatch/provider.dex";
|
final static public String PROVIDER_DEX_ASSET_PATH = "assets/npatch/provider.dex";
|
||||||
final static public String ORIGINAL_APK_ASSET_PATH = "assets/lspatch/origin.apk";
|
final static public String ORIGINAL_APK_ASSET_PATH = "assets/npatch/origin.apk";
|
||||||
final static public String EMBEDDED_MODULES_ASSET_PATH = "assets/lspatch/modules/";
|
final static public String EMBEDDED_MODULES_ASSET_PATH = "assets/npatch/modules/";
|
||||||
|
|
||||||
final static public String PATCH_FILE_SUFFIX = "-npatched.apk";
|
final static public String PATCH_FILE_SUFFIX = "-npatched.apk";
|
||||||
final static public String PROXY_APP_COMPONENT_FACTORY = "org.lsposed.lspatch.metaloader.LSPAppComponentFactoryStub";
|
final static public String PROXY_APP_COMPONENT_FACTORY = "org.lsposed.npatch.metaloader.LSPAppComponentFactoryStub";
|
||||||
final static public String MANAGER_PACKAGE_NAME = "org.lsposed.npatch";
|
final static public String MANAGER_PACKAGE_NAME = "org.lsposed.npatch";
|
||||||
final static public int MIN_ROLLING_VERSION_CODE = 335;
|
final static public int MIN_ROLLING_VERSION_CODE = 400;
|
||||||
|
|
||||||
final static public int SIGBYPASS_LV_DISABLE = 0;
|
final static public int SIGBYPASS_LV_DISABLE = 0;
|
||||||
final static public int SIGBYPASS_LV_PM = 1;
|
final static public int SIGBYPASS_LV_PM = 1;
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.share;
|
package org.lsposed.npatch.share;
|
||||||
|
|
||||||
public class PatchConfig {
|
public class PatchConfig {
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package org.lsposed.lspatch.share;
|
package org.lsposed.npatch.share;
|
||||||
|
|
||||||
public class LSPConfig {
|
public class LSPConfig {
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue