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
+ Through jar
1. Download `lspatch.jar`
1. Run `java -jar lspatch.jar`
1. Download `npatch.jar`
1. Run `java -jar npatch.jar`
+ Through manager
1. Download and install `manager.apk` on an Android device

View File

@ -10,8 +10,8 @@ import org.gradle.kotlin.dsl.extra
plugins {
alias(libs.plugins.agp.lib) apply false
alias(libs.plugins.agp.app) apply false
alias(lspatch.plugins.compose.compiler) apply false
alias(lspatch.plugins.kotlin.android) apply false
alias(npatch.plugins.compose.compiler) apply false
alias(npatch.plugins.kotlin.android) apply false
}
buildscript {
@ -156,6 +156,7 @@ fun Project.configureBaseExtension() {
}
}
named("release") {
signingConfig = null
externalNativeBuild {
cmake {
val flags = arrayOf(
@ -197,9 +198,12 @@ fun Project.configureBaseExtension() {
extensions.findByType(ApplicationAndroidComponentsExtension::class)?.let { androidComponents ->
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(
androidComponents.sdkComponents.sdkDirectory.get().asFile,
"build-tools/${androidBuildToolsVersion}/aapt2"
"build-tools/${androidBuildToolsVersion}/$aapt2Name"
)
val zip = java.nio.file.Paths.get(
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.enableAppCompileTimeRClass=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")
destinationDirectory.set(file("${rootProject.projectDir}/out/$variant"))
manifest {
attributes("Main-Class" to "org.lsposed.patch.LSPatch")
attributes("Main-Class" to "org.lsposed.patch.NPatch")
}
dependsOn(configurations.runtimeClasspath)
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 {
alias(libs.plugins.agp.app)
alias(lspatch.plugins.compose.compiler)
alias(lspatch.plugins.google.devtools.ksp)
alias(lspatch.plugins.rikka.tools.refine)
alias(lspatch.plugins.kotlin.android)
alias(npatch.plugins.compose.compiler)
alias(npatch.plugins.google.devtools.ksp)
alias(npatch.plugins.rikka.tools.refine)
alias(npatch.plugins.kotlin.android)
id("kotlin-parcelize")
}
@ -47,7 +47,7 @@ android {
kotlinCompilerExtensionVersion = "1.5.13"
}
namespace = "org.lsposed.lspatch"
namespace = "org.lsposed.npatch"
applicationVariants.all {
kotlin.sourceSets {
@ -86,35 +86,35 @@ dependencies {
implementation(projects.services.daemonService)
implementation(projects.share.android)
implementation(projects.share.java)
implementation(platform(lspatch.androidx.compose.bom))
implementation(platform(npatch.androidx.compose.bom))
annotationProcessor(lspatch.androidx.room.compiler)
compileOnly(lspatch.rikka.hidden.stub)
debugImplementation(lspatch.androidx.compose.ui.tooling)
debugImplementation(lspatch.androidx.customview)
debugImplementation(lspatch.androidx.customview.poolingcontainer)
implementation(lspatch.androidx.activity.compose)
implementation(lspatch.androidx.compose.material.icons.extended)
implementation(lspatch.androidx.compose.material3)
implementation(lspatch.androidx.compose.ui)
implementation(lspatch.androidx.compose.ui.tooling.preview)
implementation(lspatch.androidx.core.ktx)
implementation(lspatch.androidx.lifecycle.viewmodel.compose)
implementation(lspatch.androidx.navigation.compose)
annotationProcessor(npatch.androidx.room.compiler)
compileOnly(npatch.rikka.hidden.stub)
debugImplementation(npatch.androidx.compose.ui.tooling)
debugImplementation(npatch.androidx.customview)
debugImplementation(npatch.androidx.customview.poolingcontainer)
implementation(npatch.androidx.activity.compose)
implementation(npatch.androidx.compose.material.icons.extended)
implementation(npatch.androidx.compose.material3)
implementation(npatch.androidx.compose.ui)
implementation(npatch.androidx.compose.ui.tooling.preview)
implementation(npatch.androidx.core.ktx)
implementation(npatch.androidx.lifecycle.viewmodel.compose)
implementation(npatch.androidx.navigation.compose)
implementation(libs.androidx.preference)
implementation(lspatch.androidx.room.ktx)
implementation(lspatch.androidx.room.runtime)
implementation(lspatch.google.accompanist.navigation.animation)
implementation(lspatch.google.accompanist.pager)
implementation(lspatch.google.accompanist.swiperefresh)
implementation(npatch.androidx.room.ktx)
implementation(npatch.androidx.room.runtime)
implementation(npatch.google.accompanist.navigation.animation)
implementation(npatch.google.accompanist.pager)
implementation(npatch.google.accompanist.swiperefresh)
implementation(libs.material)
implementation(libs.gson)
implementation(lspatch.rikka.shizuku.api)
implementation(lspatch.rikka.shizuku.provider)
implementation(lspatch.rikka.refine)
implementation(lspatch.raamcosta.compose.destinations)
implementation(npatch.rikka.shizuku.api)
implementation(npatch.rikka.shizuku.provider)
implementation(npatch.rikka.refine)
implementation(npatch.raamcosta.compose.destinations)
implementation(libs.appiconloader)
implementation(libs.hiddenapibypass)
ksp(lspatch.androidx.room.compiler)
ksp(lspatch.raamcosta.compose.destinations.ksp)
ksp(npatch.androidx.room.compiler)
ksp(npatch.raamcosta.compose.destinations.ksp)
}

View File

@ -1,9 +1,9 @@
-dontobfuscate
-keep class com.beust.jcommander.** { *; }
-keep class org.lsposed.lspatch.Patcher$Options { *; }
-keep class org.lsposed.lspatch.share.LSPConfig { *; }
-keep class org.lsposed.lspatch.share.PatchConfig { *; }
-keepclassmembers class org.lsposed.patch.LSPatch {
-keep class org.lsposed.npatch.Patcher$Options { *; }
-keep class org.lsposed.npatch.share.LSPConfig { *; }
-keep class org.lsposed.npatch.share.PatchConfig { *; }
-keepclassmembers class org.lsposed.patch.NPatch {
private <fields>;
}
-dontwarn com.google.auto.value.AutoValue$Builder

View File

@ -10,11 +10,11 @@
}
-keep class com.beust.jcommander.** { *; }
-keep class org.lsposed.lspatch.database.** { *; }
-keep class org.lsposed.lspatch.Patcher$Options { *; }
-keep class org.lsposed.lspatch.share.LSPConfig { *; }
-keep class org.lsposed.lspatch.share.PatchConfig { *; }
-keepclassmembers class org.lsposed.patch.LSPatch {
-keep class org.lsposed.npatch.database.** { *; }
-keep class org.lsposed.npatch.Patcher$Options { *; }
-keep class org.lsposed.npatch.share.LSPConfig { *; }
-keep class org.lsposed.npatch.share.PatchConfig { *; }
-keepclassmembers class org.lsposed.patch.NPatch {
private <fields>;
}
-dontwarn com.google.auto.value.AutoValue$Builder

View File

@ -46,7 +46,7 @@
android:name=".ui.activity.InstallActivity"
android:enabled="false"
android:exported="true"
android:targetActivity="org.lsposed.lspatch.ui.activity.MainActivity">
android:targetActivity="org.lsposed.npatch.ui.activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<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.content.Context
@ -7,9 +7,9 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.lsposed.hiddenapibypass.HiddenApiBypass
import org.lsposed.lspatch.manager.AppBroadcastReceiver
import org.lsposed.lspatch.util.LSPPackageManager
import org.lsposed.lspatch.util.ShizukuApi
import org.lsposed.npatch.manager.AppBroadcastReceiver
import org.lsposed.npatch.util.NPackageManager
import org.lsposed.npatch.util.ShizukuApi
import java.io.File
lateinit var lspApp: LSPApplication
@ -31,6 +31,6 @@ class LSPApplication : Application() {
prefs = lspApp.getSharedPreferences("settings", Context.MODE_PRIVATE)
ShizukuApi.init()
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.documentfile.provider.DocumentFile
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.lsposed.lspatch.config.Configs
import org.lsposed.lspatch.config.MyKeyStore
import org.lsposed.lspatch.share.Constants
import org.lsposed.lspatch.share.PatchConfig
import org.lsposed.patch.LSPatch
import org.lsposed.npatch.config.Configs
import org.lsposed.npatch.config.MyKeyStore
import org.lsposed.npatch.share.Constants
import org.lsposed.npatch.share.PatchConfig
import org.lsposed.patch.NPatch
import org.lsposed.patch.util.Logger
import java.io.File
import java.io.IOException
import java.util.Collections.addAll
object Patcher {
@ -47,7 +46,7 @@ object Patcher {
suspend fun patch(logger: Logger, options: Options) {
withContext(Dispatchers.IO) {
LSPatch(logger, *options.toStringArray()).doCommandLine()
NPatch(logger, *options.toStringArray()).doCommandLine()
val uri = Configs.storageDirectory?.toUri()
?: 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.util.Log
@ -6,11 +6,11 @@ import androidx.room.Room
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.withContext
import org.lsposed.lspatch.database.LSPDatabase
import org.lsposed.lspatch.database.entity.Module
import org.lsposed.lspatch.database.entity.Scope
import org.lsposed.lspatch.lspApp
import org.lsposed.lspatch.util.ModuleLoader
import org.lsposed.npatch.database.LSPDatabase
import org.lsposed.npatch.database.entity.Module
import org.lsposed.npatch.database.entity.Scope
import org.lsposed.npatch.lspApp
import org.lsposed.npatch.util.ModuleLoader
import java.io.File
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.lspatch.ui.util.delegateStateOf
import org.lsposed.lspatch.ui.util.getValue
import org.lsposed.lspatch.ui.util.setValue
import org.lsposed.npatch.lspApp
import org.lsposed.npatch.ui.util.delegateStateOf
import org.lsposed.npatch.ui.util.getValue
import org.lsposed.npatch.ui.util.setValue
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.mutableStateOf
import androidx.compose.runtime.setValue
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.lsposed.lspatch.lspApp
import org.lsposed.npatch.lspApp
import java.io.File
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.RoomDatabase
import org.lsposed.lspatch.database.dao.ModuleDao
import org.lsposed.lspatch.database.dao.ScopeDao
import org.lsposed.npatch.database.dao.ModuleDao
import org.lsposed.npatch.database.dao.ScopeDao
import org.lsposed.lspatch.database.entity.Module
import org.lsposed.lspatch.database.entity.Scope
import org.lsposed.npatch.database.entity.Module
import org.lsposed.npatch.database.entity.Scope
@Database(entities = [Module::class, Scope::class], version = 1)
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.Delete
import androidx.room.Insert
import androidx.room.OnConflictStrategy
import androidx.room.Query
import org.lsposed.lspatch.database.entity.Module
import org.lsposed.npatch.database.entity.Module
@Dao
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.Delete
import androidx.room.Insert
import androidx.room.Query
import org.lsposed.lspatch.database.entity.Module
import org.lsposed.lspatch.database.entity.Scope
import org.lsposed.npatch.database.entity.Module
import org.lsposed.npatch.database.entity.Scope
@Dao
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.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.ForeignKey

View File

@ -1,4 +1,4 @@
package org.lsposed.lspatch.manager
package org.lsposed.npatch.manager
import android.content.BroadcastReceiver
import android.content.Context
@ -6,8 +6,8 @@ import android.content.Intent
import android.content.IntentFilter
import android.util.Log
import kotlinx.coroutines.launch
import org.lsposed.lspatch.lspApp
import org.lsposed.lspatch.util.LSPPackageManager
import org.lsposed.npatch.lspApp
import org.lsposed.npatch.util.NPackageManager
class AppBroadcastReceiver : BroadcastReceiver() {
@ -33,7 +33,7 @@ class AppBroadcastReceiver : BroadcastReceiver() {
if (intent.action in actions) {
lspApp.globalScope.launch {
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.Bundle
import android.os.IBinder
import android.os.ParcelFileDescriptor
import android.util.Log
import kotlinx.coroutines.runBlocking
import org.lsposed.lspatch.config.ConfigManager
import org.lsposed.lspatch.lspApp
import org.lsposed.npatch.config.ConfigManager
import org.lsposed.npatch.lspApp
import org.lsposed.lspd.models.Module
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.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 androidx.activity.ComponentActivity
@ -15,13 +15,13 @@ import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.NavHostController
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
import com.ramcosta.composedestinations.DestinationsNavHost
import org.lsposed.lspatch.ui.page.BottomBarDestination
import org.lsposed.lspatch.ui.page.NavGraphs
import org.lsposed.lspatch.ui.page.appCurrentDestinationAsState
import org.lsposed.lspatch.ui.page.destinations.Destination
import org.lsposed.lspatch.ui.page.startAppDestination
import org.lsposed.lspatch.ui.theme.LSPTheme
import org.lsposed.lspatch.ui.util.LocalSnackbarHost
import org.lsposed.npatch.ui.page.BottomBarDestination
import org.lsposed.npatch.ui.page.NavGraphs
import org.lsposed.npatch.ui.page.appCurrentDestinationAsState
import org.lsposed.npatch.ui.page.destinations.Destination
import org.lsposed.npatch.ui.page.startAppDestination
import org.lsposed.npatch.ui.theme.LSPTheme
import org.lsposed.npatch.ui.util.LocalSnackbarHost
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.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 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.unit.dp
import androidx.core.graphics.drawable.toBitmap
import org.lsposed.lspatch.ui.theme.LSPTheme
import org.lsposed.npatch.ui.theme.LSPTheme
@Composable
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.ExperimentalMaterial3Api
@ -9,7 +9,7 @@ import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import org.lsposed.lspatch.ui.util.SampleStringProvider
import org.lsposed.npatch.ui.util.SampleStringProvider
@OptIn(ExperimentalMaterial3Api::class)
@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.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 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.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.foundation.background
@ -10,7 +10,6 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
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.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.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.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.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.compose.material.icons.Icons
@ -6,8 +6,8 @@ import androidx.compose.material.icons.filled.*
import androidx.compose.material.icons.outlined.*
import androidx.compose.ui.graphics.vector.ImageVector
import com.ramcosta.composedestinations.spec.DirectionDestinationSpec
import org.lsposed.lspatch.R
import org.lsposed.lspatch.ui.page.destinations.*
import org.lsposed.npatch.R
import org.lsposed.npatch.ui.page.destinations.*
enum class BottomBarDestination(
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.content.ClipData
@ -35,14 +35,14 @@ import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.annotation.RootNavGraph
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import kotlinx.coroutines.launch
import org.lsposed.lspatch.R
import org.lsposed.lspatch.share.LSPConfig
import org.lsposed.lspatch.ui.component.CenterTopBar
import org.lsposed.lspatch.ui.page.destinations.ManageScreenDestination
import org.lsposed.lspatch.ui.page.destinations.NewPatchScreenDestination
import org.lsposed.lspatch.ui.util.HtmlText
import org.lsposed.lspatch.ui.util.LocalSnackbarHost
import org.lsposed.lspatch.util.ShizukuApi
import org.lsposed.npatch.R
import org.lsposed.npatch.share.LSPConfig
import org.lsposed.npatch.ui.component.CenterTopBar
import org.lsposed.npatch.ui.page.destinations.ManageScreenDestination
import org.lsposed.npatch.ui.page.destinations.NewPatchScreenDestination
import org.lsposed.npatch.ui.util.HtmlText
import org.lsposed.npatch.ui.util.LocalSnackbarHost
import org.lsposed.npatch.util.ShizukuApi
import rikka.shizuku.Shizuku
@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.padding
@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import com.ramcosta.composedestinations.annotation.Destination
import org.lsposed.lspatch.ui.component.CenterTopBar
import org.lsposed.npatch.ui.component.CenterTopBar
@OptIn(ExperimentalMaterial3Api::class)
@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.Column
@ -16,12 +16,12 @@ import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.navigation.DestinationsNavigator
import com.ramcosta.composedestinations.result.ResultRecipient
import kotlinx.coroutines.launch
import org.lsposed.lspatch.R
import org.lsposed.lspatch.ui.component.CenterTopBar
import org.lsposed.lspatch.ui.page.destinations.SelectAppsScreenDestination
import org.lsposed.lspatch.ui.page.manage.AppManageBody
import org.lsposed.lspatch.ui.page.manage.AppManageFab
import org.lsposed.lspatch.ui.page.manage.ModuleManageBody
import org.lsposed.npatch.R
import org.lsposed.npatch.ui.component.CenterTopBar
import org.lsposed.npatch.ui.page.destinations.SelectAppsScreenDestination
import org.lsposed.npatch.ui.page.manage.AppManageBody
import org.lsposed.npatch.ui.page.manage.AppManageFab
import org.lsposed.npatch.ui.page.manage.ModuleManageBody
@OptIn(ExperimentalMaterial3Api::class, ExperimentalPagerApi::class)
@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.content.ClipData
@ -34,13 +34,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.platform.LocalContext
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.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.viewmodel.compose.viewModel
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.ResultRecipient
import kotlinx.coroutines.launch
import org.lsposed.lspatch.R
import org.lsposed.lspatch.lspApp
import org.lsposed.lspatch.ui.component.AnywhereDropdown
import org.lsposed.lspatch.ui.component.SelectionColumn
import org.lsposed.lspatch.ui.component.ShimmerAnimation
import org.lsposed.lspatch.ui.component.settings.SettingsCheckBox
import org.lsposed.lspatch.ui.component.settings.SettingsEditor
import org.lsposed.lspatch.ui.component.settings.SettingsItem
import org.lsposed.lspatch.ui.page.destinations.SelectAppsScreenDestination
import org.lsposed.lspatch.ui.util.InstallResultReceiver
import org.lsposed.lspatch.ui.util.LocalSnackbarHost
import org.lsposed.lspatch.ui.util.checkIsApkFixedByLSP
import org.lsposed.lspatch.ui.util.installApk
import org.lsposed.lspatch.ui.util.installApks
import org.lsposed.lspatch.ui.util.isScrolledToEnd
import org.lsposed.lspatch.ui.util.lastItemIndex
import org.lsposed.lspatch.ui.util.uninstallApkByPackageName
import org.lsposed.lspatch.ui.viewmodel.NewPatchViewModel
import org.lsposed.lspatch.ui.viewmodel.NewPatchViewModel.PatchState
import org.lsposed.lspatch.ui.viewmodel.NewPatchViewModel.ViewAction
import org.lsposed.lspatch.util.LSPPackageManager
import org.lsposed.lspatch.util.LSPPackageManager.AppInfo
import org.lsposed.lspatch.util.ShizukuApi
import org.lsposed.npatch.lspApp
import org.lsposed.npatch.R
import org.lsposed.npatch.ui.component.AnywhereDropdown
import org.lsposed.npatch.ui.component.SelectionColumn
import org.lsposed.npatch.ui.component.ShimmerAnimation
import org.lsposed.npatch.ui.component.settings.SettingsCheckBox
import org.lsposed.npatch.ui.component.settings.SettingsEditor
import org.lsposed.npatch.ui.component.settings.SettingsItem
import org.lsposed.npatch.ui.page.destinations.SelectAppsScreenDestination
import org.lsposed.npatch.ui.util.InstallResultReceiver
import org.lsposed.npatch.ui.util.LocalSnackbarHost
import org.lsposed.npatch.ui.util.checkIsApkFixedByLSP
import org.lsposed.npatch.ui.util.installApk
import org.lsposed.npatch.ui.util.installApks
import org.lsposed.npatch.ui.util.isScrolledToEnd
import org.lsposed.npatch.ui.util.lastItemIndex
import org.lsposed.npatch.ui.util.uninstallApkByPackageName
import org.lsposed.npatch.ui.viewmodel.NewPatchViewModel
import org.lsposed.npatch.ui.viewmodel.NewPatchViewModel.PatchState
import org.lsposed.npatch.ui.viewmodel.NewPatchViewModel.ViewAction
import org.lsposed.npatch.util.NPackageManager
import org.lsposed.npatch.util.NPackageManager.AppInfo
import org.lsposed.npatch.util.ShizukuApi
private const val TAG = "NewPatchPage"
@ -97,7 +93,7 @@ fun NewPatchScreen(
return@rememberLauncherForActivityResult
}
scope.launch {
LSPPackageManager.getAppInfoFromApks(apks)
NPackageManager.getAppInfoFromApks(apks)
.onSuccess {
viewModel.dispatch(ViewAction.ConfigurePatch(it.first()))
}
@ -116,7 +112,7 @@ fun NewPatchScreen(
return@rememberLauncherForActivityResult
}
scope.launch {
LSPPackageManager.getAppInfoFromApks(apks).onSuccess { appInfos ->
NPackageManager.getAppInfoFromApks(apks).onSuccess { appInfos ->
val modules = appInfos.filter { it.isXposedModule }
if (modules.isEmpty()) {
snackbarHost.showSnackbar(noXposedModules)
@ -133,7 +129,7 @@ fun NewPatchScreen(
when (viewModel.patchState) {
PatchState.INIT -> {
LaunchedEffect(Unit) {
LSPPackageManager.cleanTmpApkDir()
NPackageManager.cleanTmpApkDir()
when (id) {
ACTION_STORAGE -> {
storageLauncher.launch(arrayOf("application/vnd.android.package-archive"))
@ -148,7 +144,7 @@ fun NewPatchScreen(
ACTION_INTENT_INSTALL -> {
data?.let { uri ->
scope.launch {
LSPPackageManager.getAppInfoFromApks(listOf(uri)).onSuccess {
NPackageManager.getAppInfoFromApks(listOf(uri)).onSuccess {
viewModel.dispatch(ViewAction.ConfigurePatch(it.first()))
}.onFailure {
snackbarHost.showSnackbar(it.message ?: errorUnknown)
@ -467,7 +463,7 @@ private fun DoPatchBody(modifier: Modifier, navigator: DestinationsNavigator) {
if (status == PackageInstaller.STATUS_SUCCESS) {
snackbarHost.showSnackbar(installSuccessfully)
navigator.navigateUp()
} else if (status != LSPPackageManager.STATUS_USER_CANCELLED) {
} else if (status != NPackageManager.STATUS_USER_CANCELLED) {
val result = snackbarHost.showSnackbar(installFailed, copyError)
if (result == SnackbarResult.ActionPerformed) {
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() {
Log.i(TAG, "Installing app ${patchApp.app.packageName}")
installing = 1
val (status, message) = LSPPackageManager.install()
val (status, message) = NPackageManager.install()
installing = 0
Log.i(TAG, "Installation end: $status, $message")
onFinish(status, message)
@ -570,19 +566,19 @@ private fun InstallDialog(patchApp: AppInfo, onFinish: (Int, String?) -> Unit) {
LaunchedEffect(uninstallFirst) {
if (!uninstallFirst && installing == 0) {
onFinish(LSPPackageManager.STATUS_USER_CANCELLED, "User cancelled")
onFinish(NPackageManager.STATUS_USER_CANCELLED, "User cancelled")
doInstall()
}
}
if (uninstallFirst) {
UninstallConfirmationDialog(
onDismiss = { onFinish(LSPPackageManager.STATUS_USER_CANCELLED, "User cancelled") },
onDismiss = { onFinish(NPackageManager.STATUS_USER_CANCELLED, "User cancelled") },
onConfirm = {
scope.launch {
Log.i(TAG, "Uninstalling app ${patchApp.app.packageName}")
installing = 2
val (status, message) = LSPPackageManager.uninstall(patchApp.app.packageName)
val (status, message) = NPackageManager.uninstall(patchApp.app.packageName)
installing = 0
Log.i(TAG, "Uninstallation end: $status, $message")
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.")
doInstall()
// 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) {
UninstallConfirmationDialog(
onDismiss = { onFinish(LSPPackageManager.STATUS_USER_CANCELLED, "User cancelled") },
onDismiss = { onFinish(NPackageManager.STATUS_USER_CANCELLED, "User cancelled") },
onConfirm = {
scope.launch {
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.padding
@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import com.ramcosta.composedestinations.annotation.Destination
import org.lsposed.lspatch.ui.component.CenterTopBar
import org.lsposed.npatch.ui.component.CenterTopBar
@OptIn(ExperimentalMaterial3Api::class)
@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.os.Parcelable
@ -25,12 +25,12 @@ import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultBackNavigator
import kotlinx.parcelize.Parcelize
import org.lsposed.lspatch.R
import org.lsposed.lspatch.ui.component.AppItem
import org.lsposed.lspatch.ui.component.SearchAppBar
import org.lsposed.lspatch.ui.viewmodel.SelectAppsViewModel
import org.lsposed.lspatch.util.LSPPackageManager
import org.lsposed.lspatch.util.LSPPackageManager.AppInfo
import org.lsposed.npatch.R
import org.lsposed.npatch.ui.component.AppItem
import org.lsposed.npatch.ui.component.SearchAppBar
import org.lsposed.npatch.ui.viewmodel.SelectAppsViewModel
import org.lsposed.npatch.util.NPackageManager
import org.lsposed.npatch.util.NPackageManager.AppInfo
@Parcelize
sealed class SelectAppsResult : Parcelable {
@ -60,7 +60,7 @@ fun SelectAppsScreen(
viewModel.filterAppList(false, filter)
initialSelected?.let {
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
.animateItem(spring(stiffness = Spring.StiffnessLow))
.clickable { onSelect(it) },
icon = LSPPackageManager.getIcon(it),
icon = NPackageManager.getIcon(it),
label = it.label,
packageName = it.app.packageName
)
@ -153,7 +153,7 @@ private fun MultiSelect() {
if (checked) viewModel.multiSelected.remove(it)
else viewModel.multiSelected.add(it)
},
icon = LSPPackageManager.getIcon(it),
icon = NPackageManager.getIcon(it),
label = it.label,
packageName = it.app.packageName,
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.content.Intent
@ -29,15 +29,14 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.ramcosta.composedestinations.annotation.Destination
import kotlinx.coroutines.launch
import org.lsposed.lspatch.R
import org.lsposed.lspatch.config.Configs
import org.lsposed.lspatch.config.MyKeyStore
import org.lsposed.lspatch.ui.component.AnywhereDropdown
import org.lsposed.lspatch.ui.component.CenterTopBar
import org.lsposed.lspatch.ui.component.settings.SettingsItem
import org.lsposed.lspatch.ui.component.settings.SettingsSlot
import org.lsposed.lspatch.ui.component.settings.SettingsSwitch
import org.lsposed.lspatch.ui.util.LocalSnackbarHost
import org.lsposed.npatch.R
import org.lsposed.npatch.config.Configs
import org.lsposed.npatch.config.MyKeyStore
import org.lsposed.npatch.ui.component.AnywhereDropdown
import org.lsposed.npatch.ui.component.CenterTopBar
import org.lsposed.npatch.ui.component.settings.SettingsItem
import org.lsposed.npatch.ui.component.settings.SettingsSwitch
import org.lsposed.npatch.ui.util.LocalSnackbarHost
import java.io.IOException
import java.security.GeneralSecurityException
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.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.util.Log
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.LocalDensity
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.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Dialog
import androidx.core.net.toUri
import androidx.documentfile.provider.DocumentFile
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.ResultRecipient
import kotlinx.coroutines.launch
import org.lsposed.lspatch.BuildConfig
import org.lsposed.lspatch.R
import org.lsposed.lspatch.config.ConfigManager
import org.lsposed.lspatch.config.Configs
import org.lsposed.lspatch.database.entity.Module
import org.lsposed.lspatch.lspApp
import org.lsposed.lspatch.share.Constants
import org.lsposed.lspatch.share.LSPConfig
import org.lsposed.lspatch.ui.component.AnywhereDropdown
import org.lsposed.lspatch.ui.component.AppItem
import org.lsposed.lspatch.ui.component.LoadingDialog
import org.lsposed.lspatch.ui.page.ACTION_APPLIST
import org.lsposed.lspatch.ui.page.ACTION_STORAGE
import org.lsposed.lspatch.ui.page.SelectAppsResult
import org.lsposed.lspatch.ui.page.destinations.NewPatchScreenDestination
import org.lsposed.lspatch.ui.page.destinations.SelectAppsScreenDestination
import org.lsposed.lspatch.ui.util.LocalSnackbarHost
import org.lsposed.lspatch.ui.viewmodel.manage.AppManageViewModel
import org.lsposed.lspatch.ui.viewstate.ProcessingState
import org.lsposed.lspatch.util.LSPPackageManager
import org.lsposed.lspatch.util.ShizukuApi
import org.lsposed.npatch.R
import org.lsposed.npatch.BuildConfig
import org.lsposed.npatch.config.ConfigManager
import org.lsposed.npatch.config.Configs
import org.lsposed.npatch.database.entity.Module
import org.lsposed.npatch.lspApp
import org.lsposed.npatch.share.Constants
import org.lsposed.npatch.share.LSPConfig
import org.lsposed.npatch.ui.component.AnywhereDropdown
import org.lsposed.npatch.ui.component.AppItem
import org.lsposed.npatch.ui.component.LoadingDialog
import org.lsposed.npatch.ui.page.ACTION_APPLIST
import org.lsposed.npatch.ui.page.ACTION_STORAGE
import org.lsposed.npatch.ui.page.SelectAppsResult
import org.lsposed.npatch.ui.page.destinations.NewPatchScreenDestination
import org.lsposed.npatch.ui.page.destinations.SelectAppsScreenDestination
import org.lsposed.npatch.ui.util.LocalSnackbarHost
import org.lsposed.npatch.ui.viewmodel.manage.AppManageViewModel
import org.lsposed.npatch.ui.viewstate.ProcessingState
import org.lsposed.npatch.util.NPackageManager
import org.lsposed.npatch.util.ShizukuApi
import java.io.IOException
private const val TAG = "AppManagePage"
@ -78,7 +73,7 @@ fun AppManageBody(
Text(
modifier = Modifier.align(Alignment.Center),
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)
},
fontFamily = FontFamily.Serif,
@ -155,7 +150,7 @@ fun AppManageBody(
onLongClick = { expanded = true },
surface = {
AppItem(
icon = LSPPackageManager.getIcon(appInfo),
icon = NPackageManager.getIcon(appInfo),
label = appInfo.label,
packageName = appInfo.app.packageName,
additionalContent = {
@ -218,7 +213,7 @@ fun AppManageBody(
scope.launch {
scopeApp = appInfo.app.packageName
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
}
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.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.FontWeight
import androidx.lifecycle.viewmodel.compose.viewModel
import org.lsposed.lspatch.R
import org.lsposed.lspatch.ui.component.AnywhereDropdown
import org.lsposed.lspatch.ui.component.AppItem
import org.lsposed.lspatch.ui.viewmodel.manage.ModuleManageViewModel
import org.lsposed.lspatch.util.LSPPackageManager
import org.lsposed.npatch.ui.component.AnywhereDropdown
import org.lsposed.npatch.ui.component.AppItem
import org.lsposed.npatch.R
import org.lsposed.npatch.ui.viewmodel.manage.ModuleManageViewModel
import org.lsposed.npatch.util.NPackageManager
@Composable
fun ModuleManageBody() {
@ -37,7 +37,7 @@ fun ModuleManageBody() {
Text(
modifier = Modifier.align(Alignment.Center),
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)
},
fontFamily = FontFamily.Serif,
@ -51,7 +51,7 @@ fun ModuleManageBody() {
key = { it.first.app.packageName }
) {
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(
expanded = expanded,
onDismissRequest = { expanded = false },
@ -59,7 +59,7 @@ fun ModuleManageBody() {
onLongClick = { expanded = true },
surface = {
AppItem(
icon = LSPPackageManager.getIcon(it.first),
icon = NPackageManager.getIcon(it.first),
label = it.first.label,
packageName = it.first.app.packageName,
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.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.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.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.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.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

View File

@ -1,4 +1,4 @@
package org.lsposed.lspatch.ui.util
package org.lsposed.npatch.ui.util
import android.app.PendingIntent
import android.content.BroadcastReceiver
@ -14,7 +14,7 @@ import androidx.core.content.FileProvider
import androidx.core.net.toUri
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.lsposed.lspatch.BuildConfig
import org.lsposed.npatch.BuildConfig
import java.io.File
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 androidx.compose.runtime.getValue
@ -8,10 +8,10 @@ import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
import org.lsposed.lspatch.Patcher
import org.lsposed.lspatch.share.PatchConfig
import org.lsposed.lspatch.util.LSPPackageManager
import org.lsposed.lspatch.util.LSPPackageManager.AppInfo
import org.lsposed.npatch.Patcher
import org.lsposed.npatch.share.PatchConfig
import org.lsposed.npatch.util.NPackageManager
import org.lsposed.npatch.util.NPackageManager.AppInfo
import org.lsposed.patch.util.Logger
class NewPatchViewModel : ViewModel() {
@ -120,7 +120,7 @@ class NewPatchViewModel : ViewModel() {
logger.e(t.stackTraceToString())
PatchState.ERROR
} 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 androidx.compose.runtime.getValue
@ -8,8 +8,8 @@ import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
import org.lsposed.lspatch.util.LSPPackageManager
import org.lsposed.lspatch.util.LSPPackageManager.AppInfo
import org.lsposed.npatch.util.NPackageManager
import org.lsposed.npatch.util.NPackageManager.AppInfo
class SelectAppsViewModel : ViewModel() {
@ -31,12 +31,12 @@ class SelectAppsViewModel : ViewModel() {
fun filterAppList(refresh: Boolean, filter: (AppInfo) -> Boolean) {
viewModelScope.launch {
if (LSPPackageManager.appList.isEmpty() || refresh) {
if (NPackageManager.appList.isEmpty() || refresh) {
isRefreshing = true
LSPPackageManager.fetchAppList()
NPackageManager.fetchAppList()
isRefreshing = false
}
filteredList = LSPPackageManager.appList.filter(filter)
filteredList = NPackageManager.appList.filter(filter)
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.util.Base64
@ -13,16 +13,16 @@ import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.lsposed.lspatch.Patcher
import org.lsposed.lspatch.lspApp
import org.lsposed.lspatch.share.Constants
import org.lsposed.lspatch.share.PatchConfig
import org.lsposed.lspatch.ui.util.installApk
import org.lsposed.lspatch.ui.util.installApks
import org.lsposed.lspatch.ui.viewstate.ProcessingState
import org.lsposed.lspatch.util.LSPPackageManager
import org.lsposed.lspatch.util.LSPPackageManager.AppInfo
import org.lsposed.lspatch.util.ShizukuApi
import org.lsposed.npatch.Patcher
import org.lsposed.npatch.lspApp
import org.lsposed.npatch.share.Constants
import org.lsposed.npatch.share.PatchConfig
import org.lsposed.npatch.ui.util.installApk
import org.lsposed.npatch.ui.util.installApks
import org.lsposed.npatch.ui.viewstate.ProcessingState
import org.lsposed.npatch.util.NPackageManager
import org.lsposed.npatch.util.NPackageManager.AppInfo
import org.lsposed.npatch.util.ShizukuApi
import org.lsposed.patch.util.Logger
import java.io.FileNotFoundException
import java.util.zip.ZipFile
@ -41,7 +41,7 @@ class AppManageViewModel : ViewModel() {
}
val appList: List<Pair<AppInfo, PatchConfig>> by derivedStateOf {
LSPPackageManager.appList.mapNotNull { appInfo ->
NPackageManager.appList.mapNotNull { appInfo ->
runCatching {
appInfo.app.metaData?.getString("npatch")?.let {
val json = Base64.decode(it, Base64.DEFAULT).toString(Charsets.UTF_8)
@ -91,7 +91,7 @@ class AppManageViewModel : ViewModel() {
updateLoaderState = ProcessingState.Processing
val result = runCatching {
withContext(Dispatchers.IO) {
LSPPackageManager.apply {
NPackageManager.apply {
cleanTmpApkDir()
cleanExternalTmpApkDir()
}
@ -101,7 +101,7 @@ class AppManageViewModel : ViewModel() {
for (apk in apkPaths) {
ZipFile(apk).use { zip ->
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")
zip.getInputStream(entry).use { input ->
val dst = lspApp.tmpApkDir.resolve(apk.substringAfterLast('/'))
@ -138,7 +138,7 @@ class AppManageViewModel : ViewModel() {
installApk(lspApp, apkFiles.first())
}
} else {
val (status, message) = LSPPackageManager.install()
val (status, message) = NPackageManager.install()
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 androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.lifecycle.ViewModel
import org.lsposed.lspatch.util.LSPPackageManager
import org.lsposed.npatch.util.NPackageManager
class ModuleManageViewModel : ViewModel() {
@ -18,8 +18,8 @@ class ModuleManageViewModel : ViewModel() {
val scope: List<String>
)
val appList: List<Pair<LSPPackageManager.AppInfo, XposedInfo>> by derivedStateOf {
LSPPackageManager.appList.mapNotNull { appInfo ->
val appList: List<Pair<NPackageManager.AppInfo, XposedInfo>> by derivedStateOf {
NPackageManager.appList.mapNotNull { appInfo ->
val metaData = appInfo.app.metaData ?: return@mapNotNull null
appInfo to XposedInfo(
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> {
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.IIntentSender

View File

@ -1,4 +1,4 @@
package org.lsposed.lspatch.util
package org.lsposed.npatch.util
import android.annotation.SuppressLint
import android.content.Intent
@ -22,10 +22,10 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import kotlinx.parcelize.Parcelize
import me.zhanghai.android.appiconloader.AppIconLoader
import org.lsposed.lspatch.config.ConfigManager
import org.lsposed.lspatch.config.Configs
import org.lsposed.lspatch.lspApp
import org.lsposed.lspatch.share.Constants
import org.lsposed.npatch.config.ConfigManager
import org.lsposed.npatch.config.Configs
import org.lsposed.npatch.lspApp
import org.lsposed.npatch.share.Constants
import java.io.File
import java.io.IOException
import java.text.Collator
@ -33,7 +33,7 @@ import java.util.*
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
object LSPPackageManager {
object NPackageManager {
private const val TAG = "LSPPackageManager"
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.pm.*

View File

@ -15,7 +15,7 @@ android {
proguardFiles("proguard-rules.pro")
}
}
namespace = "org.lsposed.lspatch.metaloader"
namespace = "org.lsposed.npatch.metaloader"
}
androidComponents.onVariants { variant ->
@ -29,7 +29,7 @@ androidComponents.onVariants { variant ->
"$buildDir/intermediates/dex/$variantLowered/mergeDex$variantCapped"
from(dexOutPath)
rename("classes.dex", "metaloader.dex")
into("${rootProject.projectDir}/out/assets/${variant.name}/lspatch")
into("${rootProject.projectDir}/out/assets/${variant.name}/npatch")
}
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;
<init>();
}

View File

@ -1,4 +1,4 @@
package org.lsposed.lspatch.metaloader;
package org.lsposed.npatch.metaloader;
import android.annotation.SuppressLint;
import android.app.ActivityThread;
@ -12,7 +12,7 @@ import android.util.JsonReader;
import android.util.Log;
import org.lsposed.hiddenapibypass.HiddenApiBypass;
import org.lsposed.lspatch.share.Constants;
import org.lsposed.npatch.share.Constants;
import java.io.ByteArrayOutputStream;
import java.io.File;
@ -37,7 +37,7 @@ public class LSPAppComponentFactoryStub extends AppComponentFactory {
static {
final boolean appZygote = ActivityThread.currentActivityThread() == null;
if (appZygote) {
Log.i(TAG, "Skip loading liblspatch.so for appZygote");
Log.i(TAG, "Skip loading libnpatch.so for appZygote");
} else {
bootstrap();
}
@ -93,7 +93,7 @@ public class LSPAppComponentFactoryStub extends AppComponentFactory {
transfer(is, os);
dex = os.toByteArray();
}
soPath = manager.sourceDir + "!/assets/lspatch/so/" + libName + "/liblspatch.so";
soPath = manager.sourceDir + "!/assets/npatch/so/" + libName + "/libnpatch.so";
} else {
Log.i(TAG, "Bootstrap loader from embedment");
try (var is = cl.getResourceAsStream(Constants.LOADER_DEX_ASSET_PATH);
@ -101,7 +101,7 @@ public class LSPAppComponentFactoryStub extends AppComponentFactory {
transfer(is, os);
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);

View File

@ -25,7 +25,7 @@ android {
path("src/main/jni/CMakeLists.txt")
}
}
namespace = "org.lsposed.lspatch.loader"
namespace = "org.lsposed.npatch.loader"
}
androidComponents.onVariants { variant ->
@ -35,7 +35,7 @@ androidComponents.onVariants { variant ->
dependsOn("assemble$variantCapped")
from(layout.buildDirectory.file("intermediates/dex/${variant.name}/mergeDex$variantCapped/classes.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") {
@ -45,10 +45,10 @@ androidComponents.onVariants { variant ->
from(
fileTree(
"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") {

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.lspatch.share.Constants.ORIGINAL_APK_ASSET_PATH;
import static org.lsposed.lspatch.share.Constants.PROVIDER_DEX_ASSET_PATH;
import static org.lsposed.npatch.share.Constants.CONFIG_ASSET_PATH;
import static org.lsposed.npatch.share.Constants.ORIGINAL_APK_ASSET_PATH;
import static org.lsposed.npatch.share.Constants.PROVIDER_DEX_ASSET_PATH;
import android.app.ActivityThread;
import android.app.LoadedApk;
@ -19,12 +19,12 @@ import com.google.gson.Gson;
import org.json.JSONArray;
import org.json.JSONObject;
import org.lsposed.lspatch.loader.util.FileUtils;
import org.lsposed.lspatch.loader.util.XLog;
import org.lsposed.lspatch.service.IntegrApplicationService;
import org.lsposed.lspatch.service.NeoLocalApplicationService;
import org.lsposed.lspatch.service.RemoteApplicationService;
import org.lsposed.lspatch.share.PatchConfig;
import org.lsposed.npatch.loader.util.FileUtils;
import org.lsposed.npatch.loader.util.XLog;
import org.lsposed.npatch.service.IntegrApplicationService;
import org.lsposed.npatch.service.NeoLocalApplicationService;
import org.lsposed.npatch.service.RemoteApplicationService;
import org.lsposed.npatch.share.PatchConfig;
import org.lsposed.lspd.core.Startup;
import org.lsposed.lspd.models.Module;
import org.lsposed.lspd.service.ILSPApplicationService;
@ -76,7 +76,7 @@ public class LSPApplication {
private static boolean hasEmbeddedModules(Context context) {
try {
String[] list = context.getAssets().list("lspatch/modules");
String[] list = context.getAssets().list("npatch/modules");
return list != null && list.length > 0;
} catch (IOException e) {
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.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.pm.ApplicationInfo;
@ -15,8 +15,8 @@ import android.util.Log;
import com.google.gson.JsonSyntaxException;
import org.lsposed.lspatch.loader.util.XLog;
import org.lsposed.lspatch.share.Constants;
import org.lsposed.npatch.loader.util.XLog;
import org.lsposed.npatch.share.Constants;
import org.json.JSONException;
import org.json.JSONObject;
@ -153,7 +153,7 @@ public class SigBypass {
if (sigBypassLevel >= Constants.SIGBYPASS_LV_PM_OPENAT) {
String cacheApkPath;
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);
}

View File

@ -1,4 +1,4 @@
package org.lsposed.lspatch.loader;
package org.lsposed.npatch.loader;
import android.app.ActivityThread;
import android.os.Environment;
@ -6,7 +6,6 @@ import android.util.Log;
import android.util.LogPrinter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
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.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 {

View File

@ -1,19 +1,17 @@
package org.lsposed.lspatch.service;
package org.lsposed.npatch.service;
import android.content.Context;
import android.os.Environment;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.util.Log;
import org.lsposed.lspatch.loader.util.FileUtils;
import org.lsposed.lspatch.share.Constants;
import org.lsposed.lspatch.util.ModuleLoader;
import org.lsposed.npatch.loader.util.FileUtils;
import org.lsposed.npatch.share.Constants;
import org.lsposed.npatch.util.ModuleLoader;
import org.lsposed.lspd.models.Module;
import org.lsposed.lspd.service.ILSPApplicationService;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
@ -30,7 +28,7 @@ public class IntegrApplicationService extends ILSPApplicationService.Stub {
public IntegrApplicationService(Context context) {
try {
String[] assetsList = context.getAssets().list("lspatch/modules");
String[] assetsList = context.getAssets().list("npatch/modules");
if (assetsList == null || assetsList.length == 0) {
return;
}
@ -55,7 +53,7 @@ public class IntegrApplicationService extends ILSPApplicationService.Stub {
Log.i(TAG, "Extracting embedded module: " + packageName);
FileUtils.deleteFolderIfExists(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));
}
}

View File

@ -1,19 +1,13 @@
package org.lsposed.lspatch.service;
package org.lsposed.npatch.service;
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.RemoteException;
import android.os.ParcelFileDescriptor;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.lsposed.lspatch.util.ModuleLoader;
import org.lsposed.npatch.util.ModuleLoader;
import org.lsposed.lspd.models.Module;
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.content.ComponentName;
@ -15,7 +15,7 @@ import android.os.RemoteException;
import android.os.UserHandle;
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.service.ILSPApplicationService;
@ -32,7 +32,7 @@ import java.util.concurrent.TimeoutException;
public class RemoteApplicationService implements ILSPApplicationService {
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 volatile ILSPApplicationService service;

View File

@ -1,4 +1,4 @@
project(lspatch)
project(npatch)
cmake_minimum_required(VERSION 3.28)
set(CMAKE_CXX_STANDARD 23)

View File

@ -2,8 +2,8 @@
// Created by loves on 6/19/2021.
//
#ifndef LSPATCH_PROFILE_SAVER_H
#define LSPATCH_PROFILE_SAVER_H
#ifndef NPATCH_PROFILE_SAVER_H
#define NPATCH_PROFILE_SAVER_H
#include "utils/hook_helper.hpp"
@ -54,4 +54,4 @@ public:
};
} // namespace art
#endif // LSPATCH_PROFILE_SAVER_H
#endif // NPATCH_PROFILE_SAVER_H

View File

@ -17,8 +17,8 @@
* Copyright (C) 2021 - 2022 LSPosed Contributors
*/
#ifndef LSPATCH_OAT_FILE_MANAGER_H
#define LSPATCH_OAT_FILE_MANAGER_H
#ifndef NPATCH_OAT_FILE_MANAGER_H
#define NPATCH_OAT_FILE_MANAGER_H
#include <vector>
@ -69,4 +69,4 @@ public:
};
} // 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) {
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) {
entry_class_ = JNI_NewGlobalRef(env, entry_class.get());
} else {
@ -102,7 +102,7 @@ namespace lspd {
[](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");
ScopedLocalRef<jbyteArray> array = JNI_GetStaticObjectField(env, stub, dex_field);

View File

@ -21,7 +21,7 @@ dependencies {
implementation(projects.apkzlib)
implementation(projects.share.java)
implementation(lspatch.commons.io)
implementation(lspatch.beust.jcommander)
implementation(lspatch.google.gson)
implementation(npatch.commons.io)
implementation(npatch.beust.jcommander)
implementation(npatch.google.gson)
}

View File

@ -1,10 +1,10 @@
package org.lsposed.patch;
import static org.lsposed.lspatch.share.Constants.CONFIG_ASSET_PATH;
import static org.lsposed.lspatch.share.Constants.EMBEDDED_MODULES_ASSET_PATH;
import static org.lsposed.lspatch.share.Constants.LOADER_DEX_ASSET_PATH;
import static org.lsposed.lspatch.share.Constants.ORIGINAL_APK_ASSET_PATH;
import static org.lsposed.lspatch.share.Constants.PROXY_APP_COMPONENT_FACTORY;
import static org.lsposed.npatch.share.Constants.CONFIG_ASSET_PATH;
import static org.lsposed.npatch.share.Constants.EMBEDDED_MODULES_ASSET_PATH;
import static org.lsposed.npatch.share.Constants.LOADER_DEX_ASSET_PATH;
import static org.lsposed.npatch.share.Constants.ORIGINAL_APK_ASSET_PATH;
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.SigningOptions;
@ -23,12 +23,11 @@ import com.wind.meditor.property.ModificationProperty;
import com.wind.meditor.property.PermissionMapper;
import com.wind.meditor.utils.NodeValue;
import com.wind.meditor.utils.PermissionType;
import com.wind.meditor.utils.Utils;
import org.apache.commons.io.FilenameUtils;
import org.lsposed.lspatch.share.Constants;
import org.lsposed.lspatch.share.LSPConfig;
import org.lsposed.lspatch.share.PatchConfig;
import org.lsposed.npatch.share.Constants;
import org.lsposed.npatch.share.LSPConfig;
import org.lsposed.npatch.share.PatchConfig;
import org.lsposed.patch.util.ApkSignatureHelper;
import org.lsposed.patch.util.JavaLogger;
import org.lsposed.patch.util.Logger;
@ -48,15 +47,13 @@ import java.util.Arrays;
import java.util.Base64;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;
public class LSPatch {
public class NPatch {
static class PatchError extends Error {
public PatchError(String message, Throwable cause) {
@ -132,7 +129,7 @@ public class LSPatch {
private final Logger logger;
public LSPatch(Logger logger, String... args) {
public NPatch(Logger logger, String... args) {
jCommander = JCommander.newBuilder().addObject(this).build();
try {
jCommander.parse(args);
@ -154,13 +151,13 @@ public class LSPatch {
}
public static void main(String... args) throws IOException {
LSPatch lspatch = new LSPatch(new JavaLogger(), args);
if (lspatch.help) {
lspatch.jCommander.usage();
NPatch npatch = new NPatch(new JavaLogger(), args);
if (npatch.help) {
npatch.jCommander.usage();
return;
}
try {
lspatch.doCommandLine();
npatch.doCommandLine();
} catch (PatchError e) {
e.printStackTrace(System.err);
}
@ -295,7 +292,7 @@ public class LSPatch {
}
logger.i("Adding config...");
// save lspatch config to asset..
// save npatch config to asset..
try (var is = new ByteArrayInputStream(configBytes)) {
dstZFile.add(CONFIG_ASSET_PATH, is);
} catch (Throwable e) {
@ -319,7 +316,7 @@ public class LSPatch {
if (isInjectProvider){
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) {
throw new PatchError("Error when adding dex", e);
}
@ -338,9 +335,9 @@ public class LSPatch {
logger.i("Adding native lib...");
// 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) {
String entryName = "assets/lspatch/so/" + arch + "/liblspatch.so";
String entryName = "assets/npatch/so/" + arch + "/libnpatch.so";
try (var is = getClass().getClassLoader().getResourceAsStream(entryName)) {
dstZFile.add(entryName, is, false); // no compress for so
} catch (Throwable e) {

View File

@ -23,7 +23,7 @@ dependencyResolutionManagement {
create("libs") {
from(files("core/gradle/libs.versions.toml"))
}
create("lspatch") {
create("npatch") {
from(files("gradle/lspatch.versions.toml"))
}
}

View File

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

View File

@ -1,4 +1,4 @@
package org.lsposed.lspatch.util;
package org.lsposed.npatch.util;
import android.os.SharedMemory;
import android.system.ErrnoException;

View File

@ -1,18 +1,18 @@
package org.lsposed.lspatch.share;
package org.lsposed.npatch.share;
public class Constants {
final static public String CONFIG_ASSET_PATH = "assets/lspatch/config.json";
final static public String LOADER_DEX_ASSET_PATH = "assets/lspatch/loader.dex";
final static public String META_LOADER_DEX_ASSET_PATH = "assets/lspatch/metaloader.dex";
final static public String PROVIDER_DEX_ASSET_PATH = "assets/lspatch/provider.dex";
final static public String ORIGINAL_APK_ASSET_PATH = "assets/lspatch/origin.apk";
final static public String EMBEDDED_MODULES_ASSET_PATH = "assets/lspatch/modules/";
final static public String CONFIG_ASSET_PATH = "assets/npatch/config.json";
final static public String LOADER_DEX_ASSET_PATH = "assets/npatch/loader.dex";
final static public String META_LOADER_DEX_ASSET_PATH = "assets/npatch/metaloader.dex";
final static public String PROVIDER_DEX_ASSET_PATH = "assets/npatch/provider.dex";
final static public String ORIGINAL_APK_ASSET_PATH = "assets/npatch/origin.apk";
final static public String EMBEDDED_MODULES_ASSET_PATH = "assets/npatch/modules/";
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 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_PM = 1;

View File

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

View File

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