Refactor:Replace all instances of `lspatch` with `npatch`

嘗試规避關鍵詞檢測
This commit is contained in:
NkBe 2025-12-02 22:49:37 +08:00
parent fd8dc4d3c9
commit 5aa809dc5a
No known key found for this signature in database
GPG Key ID: 525137026FF031DF
84 changed files with 368 additions and 388 deletions

View File

@ -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

View File

@ -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

@ -1 +1 @@
Subproject commit 290818e2660f6295fd4913c46e0703d91644ce21 Subproject commit f8c4b6c5a52e6fe07d288d96f3765fd18aaa928c

View File

@ -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

View File

@ -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) })

View File

@ -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)
} }

View File

@ -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

View File

@ -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

View File

@ -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" />

View File

@ -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() }
} }
} }

View File

@ -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")

View File

@ -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 {

View File

@ -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 {

View File

@ -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 {

View File

@ -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() {

View File

@ -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 {

View File

@ -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 {

View File

@ -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

View File

@ -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

View File

@ -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()
} }
} }
} }

View File

@ -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

View File

@ -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

View File

@ -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() {

View File

@ -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

View File

@ -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(

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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,

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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}")

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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))

View File

@ -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 = {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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()
} }
} }
} }

View File

@ -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")
} }
} }

View File

@ -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)
} }
} }

View File

@ -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 },

View File

@ -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>()

View File

@ -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

View File

@ -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"

View File

@ -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.*

View File

@ -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") {

View File

@ -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>();
} }

View File

@ -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);

View File

@ -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") {

View File

@ -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;

View File

@ -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;

View File

@ -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);
} }

View File

@ -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;

View File

@ -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;

View File

@ -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 {

View File

@ -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));
} }
} }

View File

@ -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;

View File

@ -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;

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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);

View File

@ -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)
} }

View File

@ -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) {

View File

@ -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"))
} }
} }

View File

@ -3,7 +3,7 @@ plugins {
} }
android { android {
namespace = "org.lsposed.lspatch.share" namespace = "org.lsposed.npatch.share"
buildFeatures { buildFeatures {
androidResources = false androidResources = false

View File

@ -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;

View File

@ -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;

View File

@ -1,4 +1,4 @@
package org.lsposed.lspatch.share; package org.lsposed.npatch.share;
public class PatchConfig { public class PatchConfig {

View File

@ -1,4 +1,4 @@
package org.lsposed.lspatch.share; package org.lsposed.npatch.share;
public class LSPConfig { public class LSPConfig {