.
================================================
FILE: README.md
================================================
# Vanced Manager
[](https://github.com/YTVanced/VancedManager/releases/latest) [](https://github.com/YTVanced/VancedManager/releases/latest)
# **Now discontinued https://twitter.com/YTVanced/status/1503052250268286980**
Hi, when we released Vanced 15.05.54, people were upset because it used the .apks format, which was way harder to install than a traditional .apk file. Even though we wrote clear instructions on how to install the new Vanced build, people still couldn't figure it out.
Then we thought, "why don't we make a manager for vanced, which will download, update and uninstall Vanced and MicroG, have an easy and understandable UI and be less than 10mb?" and that's how Vanced Manager was born.
After 3 months of development, we are finally ready to introduce Vanced Manager to the masses. Vanced manager can easily install and uninstall vanced and microg, has various settings for customisation and better experience. The Manager comes with an easy-to-use interface
##### Background download/installation feature is no longer supported due to problems with some ROMs, please do NOT report issues regarding background activity.
## Contributions
Pull requests should be made to the Dev branch as that is the working branch, master is for release code.
For anyone who wants to provide translations please submit them to https://crowdin.com/project/vanced-manager as we also use it for Vanced. Any issues with translations should be posted there too.
## Building
[](https://github.com/YTVanced/VancedManager/actions/workflows/debug.yml)
### Using Android Studio
Clone the repo, open it in Android Studio and build the app.
### Using command line
#### On Windows:
```powershell
.\gradlew.bat assembleDebug
```
#### On Linux/macOS:
```bash
chmod +x gradlew
./gradlew assembleDebug
```
================================================
FILE: READMEME.md
================================================

# Prelude
Hi, my name is Steve Cock, I'm the main developer for the upcoming Vanced Manager. When xfileFIN first published Vanced 15.05.54, people were upset because new Vanced used split apk files. The reason for that was pretty simple:
1) YouTube itself does that
2) Split apk files reduce the size of the downloaded file itself
No one really thought there would be problems with this format, because installation was pretty simple, at least that's what xfile thought...
## Problems with .apks format
Main problems with new format were either with device CPU architecture or MemeUI shit with MiUI optimisations. We wrote instructions for VancedHelper but no one used it for troubleshooting. Then some users complained about new format and refused to upgrade to newest version (We don't give a fuck about that) because "I dOn'T WaNT To HaVe OnE MoRE apP To insTalL VanCeD" so we decided to make an installer for Vanced
# Vanced Manager
Ladies and gentlemen, I'm very proud to introduce the new **Vancad Banger 2.0.0.0.0.0.0.0.0.0.0.0.0™** (typo intended)
Vanced Manager is an universal utility for installing/updating Vanced and MicroG. It will push notifications once the update is ready (Now that's what I call pwetty epic).
Vanced Manager comes with a slick UI ~~that was stolen from the new Magisk Manager (I'm very sorry John but I looked at your code for about 100 times). Actually, while UI may look very similar to new Magisk Manager's UI, It's still very different (that's a blatant lie, I know).~~ <- diz shit completely invalid now so suck my balls
Main Menu screenshot taken from tablet

Isn't this lovely and beautiful?
## Manager (clap) Reviews (clap)
- 1337Potato: shit
- Response: Yes
===================
- Noobbot: The app is not useful because I have YT Premium. Thank you bye
- Response: I hope you get sucked by a di-
===================
- Vortextriangle: The app is so useful that I uninstalled it after installing Vanced
- Response: yo that's finna woke
## How does it suck?™
Vanced Manager sucks 100% of your CPU to mine Bitcoins, this is a new technique called CryptocurrencySucker2077. Basically we load up your shit MediaTek MT 8163 with processes that help us mine cryptocurrency, this is how Vanced Team makes money (excluding BAT and AdGuard referrals)
## Credits
### Vanced Manager developers
- X1nto (UI, UX, Downloader, Installer, Signature Checker, PussiSlayer69, Collector of 400 BAT, A great liar)
- Koopah (Unix lord, Unmounter of /system, Code criticizer)
### The Vanced Team
- xfileFIN

- KevinX8

- Zanezam

- Laura Almeida

================================================
FILE: app/.gitignore
================================================
/build
/release
================================================
FILE: app/build.gradle.kts
================================================
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions
plugins {
id("com.android.application")
kotlin("android")
id("kotlin-parcelize")
kotlin("plugin.serialization")
}
val composeVersion = "1.1.1"
android {
compileSdk = 31
defaultConfig {
minSdk = 21
targetSdk = 31
applicationId = "com.vanced.manager"
versionCode = 3000
versionName = "3.0.0 (Re@Composed)"
vectorDrawables.useSupportLibrary = true
buildConfigField("String[]", "MANAGER_LANGUAGES", "{$languages}")
}
lint {
disable += "MissingTranslation"
disable += "ExtraTranslation"
}
buildTypes {
getByName("release") {
isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
}
}
buildFeatures {
compose = true
}
packagingOptions {
resources.excludes.add("META-INF/DEPENDENCIES")
resources.excludes.add("META-INF/*.kotlin_module")
}
// To inline the bytecode built with JVM target 1.8 into
// bytecode that is being built with JVM target 1.6. (e.g. navArgs)
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
composeOptions {
kotlinCompilerExtensionVersion = composeVersion
}
}
tasks.withType().configureEach {
kotlinOptions {
jvmTarget = "11"
optIn("androidx.compose.material3.ExperimentalMaterial3Api")
optIn("androidx.compose.animation.ExperimentalAnimationApi")
optIn("androidx.compose.foundation.ExperimentalFoundationApi")
}
}
fun KotlinJvmOptions.optIn(library: String) {
freeCompilerArgs = freeCompilerArgs +
"-opt-in=$library"
}
val languages: String get() {
val langs = arrayListOf("en", "bn_BD", "bn_IN", "pa_IN", "pa_PK", "pt_BR", "pt_PT", "zh_CN", "zh_TW")
val exceptions = arrayOf("bn", "pa", "pt", "zh")
File("$projectDir/src/main/res").listFiles()?.filter {
val name = it.name
name.startsWith("values") && !name.contains("v23") && !name.contains("night")
}?.forEach { dir ->
val dirname = dir.name.substringAfter("-").substringBefore("-")
if (!exceptions.contains(dirname)) {
langs.add(dirname)
}
}
return langs.joinToString(", ") { "\"$it\"" }
}
dependencies {
implementation(kotlin("reflect"))
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2")
// AndroidX
implementation("androidx.core:core-ktx:1.7.0")
implementation("androidx.appcompat:appcompat:1.4.1")
implementation("androidx.browser:browser:1.4.0")
implementation("androidx.preference:preference-ktx:1.2.0")
implementation("androidx.activity:activity-compose:1.4.0")
val lifecycleVersion = "2.4.1"
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion")
// Compose
implementation("androidx.compose.compiler:compiler:$composeVersion")
implementation("androidx.compose.foundation:foundation:$composeVersion")
implementation("androidx.compose.material:material-icons-core:$composeVersion")
implementation("androidx.compose.material:material-icons-extended:$composeVersion")
implementation("androidx.compose.material:material:$composeVersion")
implementation("androidx.compose.material3:material3:1.0.0-alpha06")
implementation("androidx.compose.runtime:runtime-livedata:$composeVersion")
implementation("androidx.compose.ui:ui-tooling:$composeVersion")
implementation("androidx.compose.ui:ui-util:$composeVersion")
implementation("androidx.compose.ui:ui:$composeVersion")
// Google
implementation("com.google.android.material:material:1.5.0")
val accompanistVersion = "0.22.1-rc"
implementation("com.google.accompanist:accompanist-navigation-animation:$accompanistVersion")
implementation("com.google.accompanist:accompanist-placeholder-material:$accompanistVersion")
implementation("com.google.accompanist:accompanist-swiperefresh:$accompanistVersion")
implementation("com.google.accompanist:accompanist-systemuicontroller:$accompanistVersion")
// Other
implementation("com.github.zsoltk:compose-router:0.28.0")
implementation("io.coil-kt:coil-compose:1.4.0")
implementation("com.github.skydoves:orchestra-colorpicker:1.1.0")
val libsuVersion = "3.2.1"
implementation("com.github.topjohnwu.libsu:core:$libsuVersion")
implementation("com.github.topjohnwu.libsu:io:$libsuVersion")
implementation("com.github.topjohnwu.libsu:busybox:$libsuVersion")
val koinVersion = "3.1.3"
implementation("io.insert-koin:koin-android:$koinVersion")
implementation("io.insert-koin:koin-androidx-compose:$koinVersion")
val retrofitVersion = "2.9.0"
implementation("com.squareup.retrofit2:retrofit:$retrofitVersion")
implementation("com.squareup.retrofit2:converter-gson:$retrofitVersion")
implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0")
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.1.3")
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
}
================================================
FILE: app/google-services.json
================================================
{
"project_info": {
"project_number": "840099702732",
"firebase_url": "https://vanced-manager-official.firebaseio.com",
"project_id": "vanced-manager-official",
"storage_bucket": "vanced-manager-official.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:840099702732:android:ca65567b49f622bc359f69",
"android_client_info": {
"package_name": "com.vanced.manager"
}
},
"oauth_client": [
{
"client_id": "840099702732-4fjjofq6on2bpd7jb6f96bk0mkrjkkf6.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAPI1RUaoCHmmWz9-TLvTKYPYs0ZVKkS2U"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "840099702732-4fjjofq6on2bpd7jb6f96bk0mkrjkkf6.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}
================================================
FILE: app/proguard-rules.pro
================================================
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.kts.kts.kts.kts.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
-keep class com.vanced.manager.network.dto.GithubReleaseDto {
*;
}
-keep class com.vanced.manager.network.dto.GithubReleaseAssetDto {
*;
}
# Uncomment this to preserve the line number information for
# debugging stack traces.
-keepattributes SourceFile, LineNumberTable
# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile
================================================
FILE: app/src/main/AndroidManifest.xml
================================================
================================================
FILE: app/src/main/java/com/vanced/manager/ManagerApplication.kt
================================================
package com.vanced.manager
import android.app.Application
import com.vanced.manager.di.*
import org.koin.android.ext.koin.androidContext
import org.koin.core.context.startKoin
class ManagerApplication : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@ManagerApplication)
modules(
apiModule,
customTabsModule,
datasourceModule,
downloaderModule,
installerModule,
managerModule,
networkModule,
repositoryModule,
serviceModule,
viewModelModule,
)
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/di/APIModule.kt
================================================
package com.vanced.manager.di
import com.vanced.manager.downloader.api.MicrogAPI
import com.vanced.manager.downloader.api.MusicAPI
import com.vanced.manager.downloader.api.VancedAPI
import com.vanced.manager.network.util.BASE
import okhttp3.OkHttpClient
import org.koin.dsl.module
import retrofit2.Retrofit
import retrofit2.create
//TODO Add mirror support
val apiModule = module {
fun provideVancedAPI(
okHttpClient: OkHttpClient
): VancedAPI {
return Retrofit.Builder()
.baseUrl(BASE)
.client(okHttpClient)
.build()
.create()
}
fun provideMusicAPI(
okHttpClient: OkHttpClient
): MusicAPI {
return Retrofit.Builder()
.baseUrl(BASE)
.client(okHttpClient)
.build()
.create()
}
fun provideMicrogAPI(
okHttpClient: OkHttpClient
): MicrogAPI {
return Retrofit.Builder()
.baseUrl("https://github.com/YTVanced/VancedMicroG/")
.client(okHttpClient)
.build()
.create(MicrogAPI::class.java)
}
single { provideVancedAPI(get()) }
single { provideMusicAPI(get()) }
single { provideMicrogAPI(get()) }
}
================================================
FILE: app/src/main/java/com/vanced/manager/di/CustomTabsModule.kt
================================================
package com.vanced.manager.di
import androidx.browser.customtabs.CustomTabsIntent
import org.koin.dsl.module
val customTabsModule = module {
fun provideChromeCustomTabs(): CustomTabsIntent {
return CustomTabsIntent.Builder()
.build()
}
single { provideChromeCustomTabs() }
}
================================================
FILE: app/src/main/java/com/vanced/manager/di/DatasourceModule.kt
================================================
package com.vanced.manager.di
import android.content.Context
import com.vanced.manager.repository.source.PreferenceDatasource
import com.vanced.manager.repository.source.PreferenceDatasourceImpl
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module
val datasourceModule = module {
fun providePreferenceDatasource(
context: Context
): PreferenceDatasource {
return PreferenceDatasourceImpl(
sharedPreferences = context.getSharedPreferences(
"manager_settings",
Context.MODE_PRIVATE
)
)
}
single { providePreferenceDatasource(androidContext()) }
}
================================================
FILE: app/src/main/java/com/vanced/manager/di/DownloaderModule.kt
================================================
package com.vanced.manager.di
import android.content.Context
import com.vanced.manager.downloader.api.MicrogAPI
import com.vanced.manager.downloader.api.MusicAPI
import com.vanced.manager.downloader.api.VancedAPI
import com.vanced.manager.downloader.impl.MicrogDownloader
import com.vanced.manager.downloader.impl.MusicDownloader
import com.vanced.manager.downloader.impl.VancedDownloader
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module
val downloaderModule = module {
fun provideVancedDownloader(
vancedAPI: VancedAPI,
context: Context,
): VancedDownloader {
return VancedDownloader(
vancedAPI = vancedAPI,
context = context
)
}
fun provideMusicDownloader(
musicAPI: MusicAPI,
context: Context,
): MusicDownloader {
return MusicDownloader(
musicAPI = musicAPI,
context = context
)
}
fun provideMicrogDownloader(
microgAPI: MicrogAPI,
context: Context,
): MicrogDownloader {
return MicrogDownloader(
microgAPI = microgAPI,
context = context
)
}
single { provideVancedDownloader(get(), androidContext()) }
single { provideMusicDownloader(get(), androidContext()) }
single { provideMicrogDownloader(get(), androidContext()) }
}
================================================
FILE: app/src/main/java/com/vanced/manager/di/InstallerModuke.kt
================================================
package com.vanced.manager.di
import android.content.Context
import com.vanced.manager.installer.impl.MicrogInstaller
import com.vanced.manager.installer.impl.MusicInstaller
import com.vanced.manager.installer.impl.VancedInstaller
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.RootPackageManager
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module
val installerModule = module {
fun provideVancedInstaller(
context: Context,
nonrootPackageManager: NonrootPackageManager,
rootPackageManager: RootPackageManager
): VancedInstaller {
return VancedInstaller(
context = context,
nonrootPackageManager = nonrootPackageManager,
rootPackageManager = rootPackageManager
)
}
fun provideMusicInstaller(
context: Context,
nonrootPackageManager: NonrootPackageManager,
rootPackageManager: RootPackageManager
): MusicInstaller {
return MusicInstaller(
context = context,
nonrootPackageManager = nonrootPackageManager,
rootPackageManager = rootPackageManager
)
}
fun provideMicrogInstaller(
context: Context,
nonrootPackageManager: NonrootPackageManager,
): MicrogInstaller {
return MicrogInstaller(
context = context,
nonrootPackageManager = nonrootPackageManager
)
}
single { provideVancedInstaller(androidContext(), get(), get()) }
single { provideMusicInstaller(androidContext(), get(), get()) }
single { provideMicrogInstaller(androidContext(), get()) }
}
================================================
FILE: app/src/main/java/com/vanced/manager/di/ManagerModule.kt
================================================
package com.vanced.manager.di
import android.content.Context
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.RootPackageManager
import org.koin.android.ext.koin.androidContext
import org.koin.dsl.module
val managerModule = module {
fun provideNonrootPackageManager(
context: Context
): NonrootPackageManager {
return NonrootPackageManager(
context = context
)
}
fun provideRootPackageManager(): RootPackageManager {
return RootPackageManager()
}
single { provideNonrootPackageManager(androidContext()) }
single { provideRootPackageManager() }
}
================================================
FILE: app/src/main/java/com/vanced/manager/di/NetworkModule.kt
================================================
package com.vanced.manager.di
import okhttp3.OkHttpClient
import org.koin.dsl.module
val networkModule = module {
fun provideOkHttpClient(): OkHttpClient {
return OkHttpClient.Builder()
.build()
}
single { provideOkHttpClient() }
}
================================================
FILE: app/src/main/java/com/vanced/manager/di/RepositoryModule.kt
================================================
package com.vanced.manager.di
import com.vanced.manager.network.GithubService
import com.vanced.manager.repository.AppRepository
import com.vanced.manager.repository.AppRepositoryImpl
import com.vanced.manager.repository.PreferenceRepository
import com.vanced.manager.repository.PreferenceRepositoryImpl
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.RootPackageManager
import com.vanced.manager.repository.source.PreferenceDatasource
import org.koin.dsl.module
val repositoryModule = module {
fun provideGithubRepository(
githubService: GithubService,
nonrootPackageManager: NonrootPackageManager,
rootPackageManager: RootPackageManager,
): AppRepository {
return AppRepositoryImpl(
githubService = githubService,
nonrootPackageManager = nonrootPackageManager,
rootPackageManager = rootPackageManager
)
}
fun providePreferenceRepository(
preferenceDatasource: PreferenceDatasource
): PreferenceRepository {
return PreferenceRepositoryImpl(
preferenceDatasource = preferenceDatasource
)
}
single { provideGithubRepository(get(), get(), get()) }
single { providePreferenceRepository(get()) }
}
================================================
FILE: app/src/main/java/com/vanced/manager/di/ServiceModule.kt
================================================
package com.vanced.manager.di
import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory
import com.vanced.manager.network.GithubService
import com.vanced.manager.network.util.GITHUB_API_BASE
import kotlinx.serialization.json.Json
import okhttp3.MediaType
import okhttp3.OkHttpClient
import org.koin.dsl.module
import retrofit2.Retrofit
import retrofit2.create
private val json = Json {
ignoreUnknownKeys = true
}
val serviceModule = module {
fun provideGithubService(
okHttpClient: OkHttpClient
): GithubService {
return Retrofit.Builder()
.baseUrl(GITHUB_API_BASE)
.addConverterFactory(json.asConverterFactory(MediaType.get("application/json")))
.client(okHttpClient)
.build()
.create()
}
single { provideGithubService(get()) }
}
================================================
FILE: app/src/main/java/com/vanced/manager/di/ViewModelModule.kt
================================================
package com.vanced.manager.di
import android.app.Application
import com.vanced.manager.downloader.impl.MicrogDownloader
import com.vanced.manager.downloader.impl.MusicDownloader
import com.vanced.manager.downloader.impl.VancedDownloader
import com.vanced.manager.installer.impl.MicrogInstaller
import com.vanced.manager.installer.impl.MusicInstaller
import com.vanced.manager.installer.impl.VancedInstaller
import com.vanced.manager.repository.AppRepository
import com.vanced.manager.repository.PreferenceRepository
import com.vanced.manager.ui.viewmodel.ConfigurationViewModel
import com.vanced.manager.ui.viewmodel.InstallViewModel
import com.vanced.manager.ui.viewmodel.MainViewModel
import com.vanced.manager.ui.viewmodel.SettingsViewModel
import org.koin.android.ext.koin.androidApplication
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module
val viewModelModule = module {
fun provideMainViewModel(
appRepository: AppRepository,
preferenceRepository: PreferenceRepository,
app: Application,
): MainViewModel {
return MainViewModel(
appRepository = appRepository,
preferenceRepository = preferenceRepository,
app = app
)
}
fun provideInstallViewModel(
vancedDownloader: VancedDownloader,
musicDownloader: MusicDownloader,
microgDownloader: MicrogDownloader,
vancedInstaller: VancedInstaller,
musicInstaller: MusicInstaller,
microgInstaller: MicrogInstaller,
): InstallViewModel {
return InstallViewModel(
vancedDownloader = vancedDownloader,
musicDownloader = musicDownloader,
microgDownloader = microgDownloader,
vancedInstaller = vancedInstaller,
musicInstaller = musicInstaller,
microgInstaller = microgInstaller
)
}
fun provideConfigurationViewModel(): ConfigurationViewModel {
return ConfigurationViewModel()
}
fun provideSettingsViewModel(
preferenceRepository: PreferenceRepository
): SettingsViewModel {
return SettingsViewModel(
preferenceRepository = preferenceRepository
)
}
viewModel { provideMainViewModel(get(), get(), androidApplication()) }
viewModel { provideInstallViewModel(get(), get(), get(), get(), get(), get()) }
viewModel { provideConfigurationViewModel() }
viewModel { provideSettingsViewModel(get()) }
}
================================================
FILE: app/src/main/java/com/vanced/manager/domain/model/App.kt
================================================
package com.vanced.manager.domain.model
import androidx.annotation.DrawableRes
import com.vanced.manager.R
data class App(
val name: String,
@DrawableRes val iconResId: Int,
val changelog: String,
val remoteVersionCode: Int,
val remoteVersionName: String,
val installedVersionCode: Int?,
val installedVersionName: String?,
val packageName: String,
val launchActivity: String,
val state: AppState,
val app: AppType
)
object AppData {
const val NAME_VANCED_YOUTUBE = "YouTube Vanced"
const val NAME_VANCED_YOUTUBE_MUSIC = "YouTube Vanced Music"
const val NAME_VANCED_MICROG = "Vanced microG"
const val NAME_VANCED_MANAGER = "Vanced Manager"
const val ICON_VANCED_YOUTUBE = R.drawable.ic_vanced
const val ICON_VANCED_YOUTUBE_MUSIC = R.drawable.ic_music
const val ICON_VANCED_MICROG = R.drawable.ic_microg
const val ICON_VANCED_MANAGER = R.drawable.ic_manager
const val PACKAGE_VANCED_YOUTUBE = "com.vanced.android.youtube"
const val PACKAGE_VANCED_YOUTUBE_MUSIC = "com.vanced.android.youtube.apps.music"
const val PACKAGE_VANCED_MICROG = "com.mgoogle.android.gms"
const val PACKAGE_VANCED_MANAGER = "com.vanced.manager"
const val PACKAGE_ROOT_VANCED_YOUTUBE = "com.google.android.youtube"
const val PACKAGE_ROOT_VANCED_YOUTUBE_MUSIC = "com.google.android.youtube.apps.music"
const val LAUNCH_ACTIVITY_VANCED_YOUTUBE = "com.google.android.youtube.HomeActivity"
const val LAUNCH_ACTIVITY_VANCED_YOUTUBE_MUSIC =
"com.google.android.apps.youtube.music.activities.MusicActivity"
const val LAUNCH_ACTIVITY_VANCED_MICROG = "org.microg.gms.ui.SettingsActivity"
const val LAUNCH_ACTIVITY_VANCED_MANAGER = ""
}
enum class AppType {
VANCED_YOUTUBE,
VANCED_YOUTUBE_MUSIC,
VANCED_MICROG,
VANCED_MANAGER,
}
enum class AppState {
NOT_INSTALLED,
INSTALLED,
NEEDS_UPDATE
}
================================================
FILE: app/src/main/java/com/vanced/manager/domain/model/InstallationOption.kt
================================================
package com.vanced.manager.domain.model
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
sealed interface InstallationOption : Parcelable {
val titleId: Int
val items: List
@Parcelize
data class MultiSelect(
override val titleId: Int,
override val items: List,
val getOption: () -> Set,
val addOption: (String) -> Unit,
val removeOption: (String) -> Unit
) : InstallationOption
@Parcelize
data class SingleSelect(
override val titleId: Int,
override val items: List,
val getOption: () -> String,
val setOption: (String) -> Unit,
) : InstallationOption
}
@Parcelize
data class InstallationOptionItem(
val key: String,
val displayText: (key: String) -> String,
) : Parcelable
================================================
FILE: app/src/main/java/com/vanced/manager/downloader/api/MicrogAPI.kt
================================================
package com.vanced.manager.downloader.api
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Streaming
interface MicrogAPI {
@GET("releases/latest/download/microg.apk")
@Streaming
fun getFile(): Call
}
================================================
FILE: app/src/main/java/com/vanced/manager/downloader/api/MusicAPI.kt
================================================
package com.vanced.manager.downloader.api
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Path
import retrofit2.http.Streaming
interface MusicAPI {
@GET("music/v{version}/{variant}.apk")
@Streaming
fun getFiles(
@Path("version") version: String,
@Path("variant") variant: String,
): Call
}
================================================
FILE: app/src/main/java/com/vanced/manager/downloader/api/VancedAPI.kt
================================================
package com.vanced.manager.downloader.api
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.Path
import retrofit2.http.Streaming
interface VancedAPI {
@GET("apks/v{version}/{variant}/{type}/{apkName}")
@Streaming
fun getFiles(
@Path("version") version: String,
@Path("variant") variant: String,
@Path("type") type: String,
@Path("apkName") apkName: String,
): Call
}
================================================
FILE: app/src/main/java/com/vanced/manager/downloader/base/AppDownloader.kt
================================================
package com.vanced.manager.downloader.base
import com.vanced.manager.util.writeFile
import okhttp3.ResponseBody
import retrofit2.Call
import retrofit2.awaitResponse
abstract class AppDownloader {
data class DownloadFile(
val fileName: String,
val call: Call,
)
sealed class DownloadStatus {
object Success : DownloadStatus()
data class Error(val error: String, val fileName: String) : DownloadStatus()
val isSuccess
get() = this is Success
val isError
get() = this is Error
}
abstract suspend fun download(
appVersions: List?,
onProgress: (Float) -> Unit,
onFile: (String) -> Unit
): DownloadStatus
abstract suspend fun downloadRoot(
appVersions: List?,
onProgress: (Float) -> Unit,
onFile: (String) -> Unit
): DownloadStatus
abstract fun getSavedFilePath(): String
suspend inline fun downloadFiles(
files: Array,
onProgress: (Float) -> Unit,
onFile: (String) -> Unit
): DownloadStatus {
for (file in files) {
try {
onFile(file.fileName)
val response = file.call.awaitResponse()
if (response.isSuccessful) {
response.body()?.writeFile(getSavedFilePath() + "/${file.fileName}", onProgress)
continue
}
val error = response.errorBody()?.toString()
if (error != null) {
return DownloadStatus.Error(error, file.fileName)
}
} catch (e: Exception) {
return DownloadStatus.Error(e.stackTraceToString(), file.fileName)
}
}
return DownloadStatus.Success
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/downloader/impl/MicrogDownloader.kt
================================================
package com.vanced.manager.downloader.impl
import android.content.Context
import com.vanced.manager.downloader.api.MicrogAPI
import com.vanced.manager.downloader.base.AppDownloader
import com.vanced.manager.downloader.util.getMicrogPath
import java.io.File
class MicrogDownloader(
private val microgAPI: MicrogAPI,
private val context: Context,
) : AppDownloader() {
override suspend fun download(
appVersions: List?,
onProgress: (Float) -> Unit,
onFile: (String) -> Unit
): DownloadStatus {
val downloadStatus = downloadFiles(
files = arrayOf(
DownloadFile(
call = microgAPI.getFile(),
fileName = "microg.apk"
)
),
onProgress = onProgress,
onFile = onFile
)
if (downloadStatus.isError)
return downloadStatus
return DownloadStatus.Success
}
override suspend fun downloadRoot(
appVersions: List?,
onProgress: (Float) -> Unit,
onFile: (String) -> Unit
): DownloadStatus {
throw IllegalAccessException("Vanced microG does not have a root downloader")
}
override fun getSavedFilePath(): String {
val directory = File(getMicrogPath(context))
if (!directory.exists())
directory.mkdirs()
return directory.path
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/downloader/impl/MusicDownloader.kt
================================================
package com.vanced.manager.downloader.impl
import android.content.Context
import com.vanced.manager.downloader.api.MusicAPI
import com.vanced.manager.downloader.base.AppDownloader
import com.vanced.manager.downloader.util.getVancedYoutubeMusicPath
import com.vanced.manager.preferences.holder.managerVariantPref
import com.vanced.manager.preferences.holder.musicVersionPref
import com.vanced.manager.util.getLatestOrProvidedAppVersion
import java.io.File
class MusicDownloader(
private val musicAPI: MusicAPI,
private val context: Context,
) : AppDownloader() {
private lateinit var absoluteVersion: String
override suspend fun download(
appVersions: List?,
onProgress: (Float) -> Unit,
onFile: (String) -> Unit
): DownloadStatus {
absoluteVersion = getLatestOrProvidedAppVersion(musicVersionPref, appVersions)
val downloadStatus = downloadFiles(
files = arrayOf(
DownloadFile(
call = musicAPI.getFiles(
version = absoluteVersion,
variant = managerVariantPref,
),
fileName = "music.apk"
)
),
onProgress = onProgress,
onFile = onFile
)
if (downloadStatus.isError)
return downloadStatus
return DownloadStatus.Success
}
override suspend fun downloadRoot(
appVersions: List?,
onProgress: (Float) -> Unit,
onFile: (String) -> Unit
): DownloadStatus {
return DownloadStatus.Success
}
override fun getSavedFilePath(): String {
val directory =
File(getVancedYoutubeMusicPath(absoluteVersion, managerVariantPref, context))
if (!directory.exists())
directory.mkdirs()
return directory.path
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/downloader/impl/VancedDownloader.kt
================================================
package com.vanced.manager.downloader.impl
import android.content.Context
import com.vanced.manager.downloader.api.VancedAPI
import com.vanced.manager.downloader.base.AppDownloader
import com.vanced.manager.downloader.util.getVancedYoutubePath
import com.vanced.manager.preferences.holder.managerVariantPref
import com.vanced.manager.preferences.holder.vancedLanguagesPref
import com.vanced.manager.preferences.holder.vancedThemePref
import com.vanced.manager.preferences.holder.vancedVersionPref
import com.vanced.manager.util.arch
import com.vanced.manager.util.getLatestOrProvidedAppVersion
import java.io.File
class VancedDownloader(
private val vancedAPI: VancedAPI,
private val context: Context,
) : AppDownloader() {
private lateinit var absoluteVersion: String
override suspend fun download(
appVersions: List?,
onProgress: (Float) -> Unit,
onFile: (String) -> Unit
): DownloadStatus {
absoluteVersion = getLatestOrProvidedAppVersion(vancedVersionPref, appVersions)
val files = arrayOf(
getFile(
type = "Theme",
apkName = "$vancedThemePref.apk",
),
getFile(
type = "Arch",
apkName = "split_config.$arch.apk",
)
) + vancedLanguagesPref.map { language ->
getFile(
type = "Language",
apkName = "split_config.$language.apk",
)
}
val downloadStatus = downloadFiles(
files = files,
onProgress = onProgress,
onFile = onFile,
)
if (downloadStatus.isError)
return downloadStatus
return DownloadStatus.Success
}
override suspend fun downloadRoot(
appVersions: List?,
onProgress: (Float) -> Unit,
onFile: (String) -> Unit
): DownloadStatus {
return DownloadStatus.Success
}
override fun getSavedFilePath(): String {
val directory = File(getVancedYoutubePath(absoluteVersion, managerVariantPref, context))
if (!directory.exists())
directory.mkdirs()
return directory.path
}
private fun getFile(
type: String,
apkName: String,
) = DownloadFile(
call = vancedAPI.getFiles(
version = absoluteVersion,
variant = managerVariantPref,
type = type,
apkName = apkName
),
fileName = apkName
)
}
================================================
FILE: app/src/main/java/com/vanced/manager/downloader/util/DownloadPath.kt
================================================
package com.vanced.manager.downloader.util
import android.content.Context
fun getVancedYoutubePath(
version: String,
variant: String,
context: Context
) = context.getExternalFilesDirPath("vanced_youtube") + "/$version/$variant"
fun getVancedYoutubeMusicPath(
version: String,
variant: String,
context: Context
) = context.getExternalFilesDirPath("vanced_music") + "/$version/$variant"
fun getMicrogPath(
context: Context
) = context.getExternalFilesDirPath("microg")
fun getStockYoutubePath(
version: String,
context: Context
) = context.getExternalFilesDirPath("stock_youtube") + "/$version"
fun getStockYoutubeMusicPath(
version: String,
context: Context
) = context.getExternalFilesDirPath("stock_youtube_music") + "/$version"
private fun Context.getExternalFilesDirPath(
type: String
): String {
val filesDir = getExternalFilesDir(type)!! //fuck null safety, amirite?
if (!filesDir.exists())
filesDir.mkdirs()
return filesDir.path
}
================================================
FILE: app/src/main/java/com/vanced/manager/installer/base/AppInstaller.kt
================================================
package com.vanced.manager.installer.base
import com.vanced.manager.repository.manager.PackageManagerResult
abstract class AppInstaller {
abstract suspend fun install(appVersions: List?)
abstract suspend fun installRoot(appVersions: List?): PackageManagerResult
}
================================================
FILE: app/src/main/java/com/vanced/manager/installer/impl/MicrogInstaller.kt
================================================
package com.vanced.manager.installer.impl
import android.content.Context
import com.vanced.manager.downloader.util.getMicrogPath
import com.vanced.manager.installer.base.AppInstaller
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.PackageManagerResult
import java.io.File
class MicrogInstaller(
private val context: Context,
private val nonrootPackageManager: NonrootPackageManager,
) : AppInstaller() {
override suspend fun install(appVersions: List?) {
val musicApk = File(getMicrogPath(context), "microg.apk")
nonrootPackageManager.installApp(musicApk)
}
override suspend fun installRoot(appVersions: List?): PackageManagerResult {
throw IllegalAccessException("Vanced microG does not have a root installer")
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/installer/impl/MusicInstaller.kt
================================================
package com.vanced.manager.installer.impl
import android.content.Context
import com.vanced.manager.domain.model.AppData
import com.vanced.manager.downloader.util.getStockYoutubeMusicPath
import com.vanced.manager.downloader.util.getVancedYoutubeMusicPath
import com.vanced.manager.installer.base.AppInstaller
import com.vanced.manager.installer.util.RootPatchHelper
import com.vanced.manager.preferences.holder.managerVariantPref
import com.vanced.manager.preferences.holder.musicVersionPref
import com.vanced.manager.preferences.holder.vancedVersionPref
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.PackageManagerResult
import com.vanced.manager.repository.manager.RootPackageManager
import com.vanced.manager.util.getLatestOrProvidedAppVersion
import java.io.File
class MusicInstaller(
private val context: Context,
private val rootPackageManager: RootPackageManager,
private val nonrootPackageManager: NonrootPackageManager,
) : AppInstaller() {
override suspend fun install(appVersions: List?) {
val absoluteVersion = getLatestOrProvidedAppVersion(musicVersionPref, appVersions)
val musicApk = File(
getVancedYoutubeMusicPath(
absoluteVersion,
managerVariantPref,
context
) + "/music.apk"
)
nonrootPackageManager.installApp(musicApk)
}
override suspend fun installRoot(appVersions: List?): PackageManagerResult {
val absoluteVersion = getLatestOrProvidedAppVersion(vancedVersionPref, appVersions)
val stock = File(getStockYoutubeMusicPath(absoluteVersion, context), "base.apk")
val vanced = File(getVancedYoutubeMusicPath(absoluteVersion, "root", context), "base.apk")
val prepareStock = RootPatchHelper.prepareStock(
stockPackage = AppData.PACKAGE_ROOT_VANCED_YOUTUBE_MUSIC,
stockVersion = absoluteVersion
) {
rootPackageManager.installApp(stock)
}
if (prepareStock.isError)
return prepareStock
val patchStock = RootPatchHelper.patchStock(
patchPath = vanced.absolutePath,
stockPackage = AppData.PACKAGE_ROOT_VANCED_YOUTUBE_MUSIC,
app = APP_KEY
)
if (patchStock.isError)
return patchStock
return PackageManagerResult.Success(null)
}
companion object {
const val APP_KEY = "youtube_music_vanced"
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/installer/impl/VancedInstaller.kt
================================================
package com.vanced.manager.installer.impl
import android.content.Context
import com.vanced.manager.domain.model.AppData
import com.vanced.manager.downloader.util.getStockYoutubePath
import com.vanced.manager.downloader.util.getVancedYoutubePath
import com.vanced.manager.installer.base.AppInstaller
import com.vanced.manager.installer.util.RootPatchHelper
import com.vanced.manager.preferences.holder.vancedVersionPref
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.PackageManagerResult
import com.vanced.manager.repository.manager.RootPackageManager
import com.vanced.manager.util.getLatestOrProvidedAppVersion
import java.io.File
class VancedInstaller(
private val context: Context,
private val rootPackageManager: RootPackageManager,
private val nonrootPackageManager: NonrootPackageManager,
) : AppInstaller() {
override suspend fun install(appVersions: List?) {
val absoluteVersion = getLatestOrProvidedAppVersion(vancedVersionPref, appVersions)
val apks = File(getVancedYoutubePath(absoluteVersion, "nonroot", context))
.listFiles()
nonrootPackageManager.installSplitApp(apks!!)
}
override suspend fun installRoot(appVersions: List?): PackageManagerResult {
val absoluteVersion = getLatestOrProvidedAppVersion(vancedVersionPref, appVersions)
val stockApks = File(getStockYoutubePath(absoluteVersion, context))
.listFiles()
val vancedBaseApk = getVancedYoutubePath(absoluteVersion, "root", context) + "/base.apk"
val prepareStock = RootPatchHelper.prepareStock(
stockPackage = AppData.PACKAGE_ROOT_VANCED_YOUTUBE,
stockVersion = absoluteVersion,
) {
rootPackageManager.installSplitApp(stockApks!!)
}
if (prepareStock.isError)
return prepareStock
val patchStock = RootPatchHelper.patchStock(
patchPath = vancedBaseApk,
stockPackage = AppData.PACKAGE_ROOT_VANCED_YOUTUBE,
app = APP_KEY
)
if (patchStock.isError)
return patchStock
return PackageManagerResult.Success(null)
}
companion object {
const val APP_KEY = "youtube_vanced"
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/installer/service/AppInstallService.kt
================================================
package com.vanced.manager.installer.service
import android.app.Service
import android.content.Intent
import android.content.pm.PackageInstaller
import android.os.IBinder
class AppInstallService : Service() {
override fun onStartCommand(
intent: Intent,
flags: Int,
startId: Int
): Int {
val extraStatus = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)
val extraStatusMessage = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE)
when (extraStatus) {
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
startActivity(
intent.getParcelableExtra(Intent.EXTRA_INTENT).apply {
this?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
)
}
else -> {
sendBroadcast(Intent().apply {
action = APP_INSTALL_ACTION
putExtra(EXTRA_INSTALL_STATUS, extraStatus)
putExtra(EXTRA_INSTALL_STATUS_MESSAGE, extraStatusMessage)
})
}
}
stopSelf()
return START_NOT_STICKY
}
override fun onBind(intent: Intent?): IBinder? = null
companion object {
const val APP_INSTALL_ACTION = "APP_INSTALL_ACTION"
const val EXTRA_INSTALL_STATUS = "EXTRA_INSTALL_STATUS"
const val EXTRA_INSTALL_STATUS_MESSAGE = "EXTRA_INSTALL_STATUS_MESSAGE"
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/installer/service/AppUninstallService.kt
================================================
package com.vanced.manager.installer.service
import android.app.Service
import android.content.Intent
import android.content.pm.PackageInstaller
import android.os.IBinder
class AppUninstallService : Service() {
override fun onStartCommand(
intent: Intent,
flags: Int,
startId: Int
): Int {
when (intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)) {
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
startActivity(
intent.getParcelableExtra(Intent.EXTRA_INTENT).apply {
this?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
)
}
else -> {
sendBroadcast(Intent().apply {
action = APP_UNINSTALL_ACTION
})
}
}
stopSelf()
return START_NOT_STICKY
}
override fun onBind(intent: Intent?): IBinder? = null
companion object {
const val APP_UNINSTALL_ACTION = "APP_UNINSTALL_ACTION"
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/installer/util/PM.kt
================================================
package com.vanced.manager.installer.util
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
import android.content.pm.PackageManager
import android.os.Build
import com.vanced.manager.installer.service.AppInstallService
import com.vanced.manager.installer.service.AppUninstallService
import java.io.File
private const val byteArraySize = 1024 * 1024 // Because 1,048,576 is not readable
object PM {
fun installApp(apk: File, context: Context) {
val packageInstaller = context.packageManager.packageInstaller
val session =
packageInstaller.openSession(packageInstaller.createSession(sessionParams))
session.writeApk(apk)
session.commit(context.installIntentSender)
session.close()
}
fun installSplitApp(apks: Array, context: Context) {
val packageInstaller = context.packageManager.packageInstaller
val session =
packageInstaller.openSession(packageInstaller.createSession(sessionParams))
for (apk in apks) {
session.writeApk(apk)
}
session.commit(context.installIntentSender)
session.close()
}
fun uninstallPackage(pkg: String, context: Context) {
val packageInstaller = context.packageManager.packageInstaller
packageInstaller.uninstall(pkg, context.uninstallIntentSender)
}
}
private fun PackageInstaller.Session.writeApk(apk: File) {
apk.inputStream().use { inputStream ->
openWrite(apk.name, 0, apk.length()).use { outputStream ->
inputStream.copyTo(outputStream, byteArraySize)
fsync(outputStream)
}
}
}
private val intentFlags
get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
PendingIntent.FLAG_MUTABLE
else
0
private val sessionParams
get() = PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL
).apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
setInstallReason(PackageManager.INSTALL_REASON_USER)
}
}
private val Context.installIntentSender
get() = PendingIntent.getService(
this,
0,
Intent(this, AppInstallService::class.java),
intentFlags
).intentSender
private val Context.uninstallIntentSender
get() = PendingIntent.getService(
this,
0,
Intent(this, AppUninstallService::class.java),
intentFlags
).intentSender
================================================
FILE: app/src/main/java/com/vanced/manager/installer/util/PMRoot.kt
================================================
package com.vanced.manager.installer.util
import com.topjohnwu.superuser.Shell
import com.topjohnwu.superuser.io.SuFile
import com.topjohnwu.superuser.io.SuFileOutputStream
import com.vanced.manager.repository.manager.PackageManagerResult
import com.vanced.manager.repository.manager.PackageManagerError
import com.vanced.manager.repository.manager.getEnumForInstallFailed
import com.vanced.manager.util.errString
import com.vanced.manager.util.outString
import java.io.File
import java.io.IOException
object PMRoot {
fun installApp(apkPath: String): PackageManagerResult {
val apk = File(apkPath)
val tmpApk = copyApkToTemp(apk).getOrElse { exception ->
return PackageManagerResult.Error(
PackageManagerError.SESSION_FAILED_COPY,
exception.stackTraceToString()
)
}
val install = Shell.su("pm", "install", "-r", tmpApk.absolutePath).exec()
tmpApk.delete()
if (!install.isSuccess) {
val errString = install.errString
return PackageManagerResult.Error(getEnumForInstallFailed(errString), errString)
}
return PackageManagerResult.Success(null)
}
fun installSplitApp(apkPaths: List): PackageManagerResult {
val installCreate = Shell.su("pm", "install-create", "-r").exec()
if (!installCreate.isSuccess)
return PackageManagerResult.Error(PackageManagerError.SESSION_FAILED_CREATE, installCreate.errString)
val sessionId = installCreate.outString
if (sessionId.toIntOrNull() == null)
return PackageManagerResult.Error(PackageManagerError.SESSION_INVALID_ID, installCreate.errString)
for (apkPath in apkPaths) {
val apk = File(apkPath)
val tmpApk = copyApkToTemp(apk).getOrElse { exception ->
return PackageManagerResult.Error(
PackageManagerError.SESSION_FAILED_COPY,
exception.stackTraceToString()
)
}
val installWrite =
Shell.su("pm", "install-write", sessionId, tmpApk.name, tmpApk.absolutePath)
.exec()
tmpApk.delete()
if (!installWrite.isSuccess)
return PackageManagerResult.Error(PackageManagerError.SESSION_FAILED_WRITE, installWrite.errString)
}
val installCommit = Shell.su("pm", "install-commit", sessionId).exec()
if (!installCommit.isSuccess) {
val errString = installCommit.errString
return PackageManagerResult.Error(getEnumForInstallFailed(errString), errString)
}
return PackageManagerResult.Success(null)
}
fun uninstallApp(pkg: String): PackageManagerResult {
val uninstall = Shell.su("pm", "uninstall", pkg).exec()
if (!uninstall.isSuccess)
return PackageManagerResult.Error(PackageManagerError.UNINSTALL_FAILED, uninstall.errString)
return PackageManagerResult.Success(null)
}
fun setInstallerPackage(targetPkg: String, installerPkg: String): PackageManagerResult {
val setInstaller = Shell.su("pm", "set-installer", targetPkg, installerPkg)
.exec()
if (!setInstaller.isSuccess)
return PackageManagerResult.Error(
PackageManagerError.SET_FAILED_INSTALLER,
setInstaller.errString
)
return PackageManagerResult.Success(null)
}
fun forceStopApp(pkg: String): PackageManagerResult {
val stopApp = Shell.su("am", "force-stop", pkg).exec()
if (!stopApp.isSuccess)
return PackageManagerResult.Error(PackageManagerError.APP_FAILED_FORCE_STOP, stopApp.errString)
return PackageManagerResult.Success(null)
}
fun getPackageVersionName(pkg: String): PackageManagerResult {
val keyword = "versionName="
val dumpsys = Shell.su("dumpsys", "package", pkg, "|", "grep", keyword).exec()
if (!dumpsys.isSuccess)
return PackageManagerResult.Error(
PackageManagerError.GET_FAILED_PACKAGE_VERSION_NAME,
dumpsys.errString
)
return PackageManagerResult.Success(dumpsys.outString.removePrefix(keyword))
}
fun getPackageVersionCode(pkg: String): PackageManagerResult {
val keyword = "versionCode="
val dumpsys = Shell.su("dumpsys", "package", pkg, "|", "grep", keyword).exec()
if (!dumpsys.isSuccess)
return PackageManagerResult.Error(
PackageManagerError.GET_FAILED_PACKAGE_VERSION_CODE,
dumpsys.errString
)
return PackageManagerResult.Success(
dumpsys.outString.removePrefix(keyword).substringAfter("minSdk")
.toLong()
)
}
fun getPackageDir(pkg: String): PackageManagerResult {
val keyword = "path: "
val dumpsys = Shell.su("dumpsys", "package", pkg, "|", "grep", keyword).exec()
if (!dumpsys.isSuccess)
return PackageManagerResult.Error(PackageManagerError.GET_FAILED_PACKAGE_DIR, dumpsys.errString)
return PackageManagerResult.Success(dumpsys.outString.removePrefix(keyword))
}
}
private fun copyApkToTemp(apk: File): Result {
val tmpPath = "/data/local/tmp/${apk.name}"
val tmpApk = SuFile(tmpPath).apply {
createNewFile()
}
try {
SuFileOutputStream.open(tmpApk).use {
it.write(apk.readBytes())
it.flush()
}
} catch (e: IOException) {
return Result.failure(e)
}
return Result.success(tmpApk)
}
================================================
FILE: app/src/main/java/com/vanced/manager/installer/util/PMRootResult.kt
================================================
package com.vanced.manager.installer.util
enum class PMRootStatus {
ACTION_FAILED_SET_INSTALLER,
ACTION_FAILED_GET_PACKAGE_DIR,
ACTION_FAILED_GET_PACKAGE_VERSION_NAME,
ACTION_FAILED_GET_PACKAGE_VERSION_CODE,
ACTION_FAILED_FORCE_STOP_APP,
INSTALL_SUCCESSFUL,
INSTALL_FAILED_ABORTED,
INSTALL_FAILED_ALREADY_EXISTS,
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE,
INSTALL_FAILED_INSUFFICIENT_STORAGE,
INSTALL_FAILED_INVALID_APK,
INSTALL_FAILED_VERSION_DOWNGRADE,
INSTALL_FAILED_PARSE_NO_CERTIFICATES,
INSTALL_FAILED_UNKNOWN,
LINK_FAILED_UNMOUNT,
LINK_FAILED_MOUNT,
PATCH_FAILED_COPY,
PATCH_FAILED_CHMOD,
PATCH_FAILED_CHOWN,
PATCH_FAILED_CHCON,
PATCH_FAILED_DESTROY,
SESSION_FAILED_CREATE,
SESSION_FAILED_WRITE,
SESSION_FAILED_COPY,
SESSION_INVALID_ID,
SCRIPT_FAILED_SETUP_POST_FS,
SCRIPT_FAILED_SETUP_SERVICE_D,
SCRIPT_FAILED_DESTROY_POST_FS,
SCRIPT_FAILED_DESTROY_SERVICE_D,
UNINSTALL_SUCCESSFUL,
UNINSTALL_FAILED,
}
sealed class PMRootResult {
data class Success(val value: V? = null) : PMRootResult()
data class Error(val error: PMRootStatus, val message: String) : PMRootResult()
val isError
get() = this is Error
val isSuccess
get() = this is Success
}
inline fun PMRootResult.getOrElse(onError: (PMRootResult.Error) -> R): R? {
return when (this) {
is PMRootResult.Error -> onError(this)
is PMRootResult.Success -> return this.value
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/installer/util/Patcher.kt
================================================
package com.vanced.manager.installer.util
import com.topjohnwu.superuser.Shell
import com.topjohnwu.superuser.io.SuFile
import com.topjohnwu.superuser.io.SuFileOutputStream
import com.vanced.manager.io.ManagerSuFile
import com.vanced.manager.io.SUIOException
import com.vanced.manager.repository.manager.PackageManagerResult
import com.vanced.manager.repository.manager.PackageManagerError
import com.vanced.manager.util.errString
import java.io.File
import java.io.IOException
object Patcher {
fun setupScript(
app: String,
stockPackage: String,
stockPath: String,
): PackageManagerResult {
val postFsDataScriptPath = getAppPostFsScriptPath(app)
val serviceDScriptPath = getAppServiceDScriptPath(app)
val postFsDataScript = getPostFsDataScript(stockPackage)
val serviceDScript = getServiceDScript(getAppPatchPath(app), stockPath)
val copyServiceDScript = copyScriptToDestination(postFsDataScript, postFsDataScriptPath)
if (copyServiceDScript.isFailure)
return PackageManagerResult.Error(
PackageManagerError.SCRIPT_FAILED_SETUP_POST_FS,
copyServiceDScript.exceptionOrNull()!!.stackTraceToString()
)
val copyPostFsDataScript = copyScriptToDestination(serviceDScript, serviceDScriptPath)
if (copyPostFsDataScript.isFailure)
return PackageManagerResult.Error(
PackageManagerError.SCRIPT_FAILED_SETUP_SERVICE_D,
copyPostFsDataScript.exceptionOrNull()!!.stackTraceToString()
)
return PackageManagerResult.Success(null)
}
fun movePatchToDataAdb(patchPath: String, app: String): PackageManagerResult {
val newPatchPath = getAppPatchPath(app)
val patchApk = File(patchPath)
val newPatchApk = SuFile(newPatchPath).apply {
if (exists())
delete()
createNewFile()
}
try {
patchApk.copyTo(newPatchApk)
} catch (e: IOException) {
return PackageManagerResult.Error(PackageManagerError.PATCH_FAILED_COPY, e.stackTraceToString())
}
val chmod = Shell.su("chmod", "644", newPatchPath).exec()
if (!chmod.isSuccess)
return PackageManagerResult.Error(PackageManagerError.PATCH_FAILED_CHMOD, chmod.errString)
val chown = Shell.su("chown", "system:system", newPatchPath).exec()
if (!chmod.isSuccess)
return PackageManagerResult.Error(PackageManagerError.PATCH_FAILED_CHOWN, chown.errString)
return PackageManagerResult.Success(null)
}
fun chconPatch(app: String): PackageManagerResult {
val chcon = Shell.su("chcon u:object_r:apk_data_file:s0 ${getAppPatchPath(app)}").exec()
if (!chcon.isSuccess)
return PackageManagerResult.Error(PackageManagerError.PATCH_FAILED_CHCON, chcon.errString)
return PackageManagerResult.Success(null)
}
fun linkPatch(app: String, stockPackage: String, stockPath: String): PackageManagerResult {
val umount =
Shell.su("""for i in ${'$'}(ls /data/app/ | grep $stockPackage | tr " "); do umount -l "/data/app/${"$"}i/base.apk"; done """)
.exec()
if (!umount.isSuccess)
return PackageManagerResult.Error(PackageManagerError.LINK_FAILED_UNMOUNT, umount.errString)
val mount =
Shell.su("su", "-mm", "-c", """"mount -o bind ${getAppPatchPath(app)} $stockPath"""")
.exec()
if (!mount.isSuccess)
return PackageManagerResult.Error(PackageManagerError.LINK_FAILED_MOUNT, mount.errString)
return PackageManagerResult.Success(null)
}
fun destroyPatch(app: String) =
cleanPatchFiles(
postFsPath = getAppPostFsScriptPath(app),
serviceDPath = getAppServiceDScriptPath(app),
patchPath = getAppPatchPath(app)
)
//TODO
fun destroyOldPatch(app: String) =
cleanPatchFiles(
postFsPath = "",
serviceDPath = "",
patchPath = ""
)
}
private fun getAppPatchPath(app: String) = "${getAppPatchFolderPath(app)}/base.apk"
private fun getAppPatchFolderPath(app: String) = "/data/adb/vanced_manager/$app"
private fun getAppPostFsScriptPath(app: String) = "/data/adb/post-fs-data.d/$app.sh"
private fun getAppServiceDScriptPath(app: String) = "/data/adb/service.d/$app.sh"
//TODO support dynamic sleep timer
private fun getServiceDScript(patchPath: String, stockPath: String) =
"""
#!/system/bin/sh
while [ "${'$'}(getprop sys.boot_completed | tr -d '\r')" != "1" ]; do sleep 1; done
sleep 1
chcon u:object_r:apk_data_file:s0 $patchPath
mount -o bind $patchPath $stockPath
""".trimIndent()
private fun getPostFsDataScript(stockPackage: String) =
"""
#!/system/bin/sh
while read line; do echo \${'$'}{line} | grep $stockPackage | awk '{print \${'$'}2}' | xargs umount -l; done< /proc/mounts
""".trimIndent()
private fun cleanPatchFiles(
postFsPath: String,
serviceDPath: String,
patchPath: String,
): PackageManagerResult {
val files = mapOf(
postFsPath to PackageManagerError.SCRIPT_FAILED_DESTROY_POST_FS,
serviceDPath to PackageManagerError.SCRIPT_FAILED_DESTROY_SERVICE_D,
patchPath to PackageManagerError.PATCH_FAILED_DESTROY,
)
for ((filePath, errorStatusType) in files) {
try {
with(ManagerSuFile(filePath)) {
if (exists()) delete()
}
} catch (e: SUIOException) {
return PackageManagerResult.Error(errorStatusType, e.stackTraceToString())
}
}
return PackageManagerResult.Success(null)
}
private fun copyScriptToDestination(
script: String,
destination: String,
): Result {
val scriptFile = SuFile(destination)
.apply {
if (!exists()) createNewFile()
}
try {
SuFileOutputStream.open(scriptFile).use {
it.write(script.toByteArray())
it.flush()
}
val chmod = Shell.su("chmod", "744", scriptFile.absolutePath).exec()
if (!chmod.isSuccess) {
return Result.failure(Exception(chmod.errString))
}
} catch (e: IOException) {
return Result.failure(e)
}
return Result.success(null)
}
================================================
FILE: app/src/main/java/com/vanced/manager/installer/util/RootPatchHelper.kt
================================================
package com.vanced.manager.installer.util
import com.vanced.manager.repository.manager.PackageManagerResult
import com.vanced.manager.repository.manager.getOrElse
object RootPatchHelper {
fun cleanPatches(app: String): PackageManagerResult {
val cleanOldPatches = Patcher.destroyOldPatch(app)
if (cleanOldPatches.isError)
return cleanOldPatches
val cleanPatches = Patcher.destroyPatch(app)
if (cleanOldPatches.isError)
return cleanPatches
return PackageManagerResult.Success(null)
}
inline fun prepareStock(
stockPackage: String,
stockVersion: String,
install: () -> PackageManagerResult
): PackageManagerResult {
val stockYoutubeVersion = PMRoot.getPackageVersionName(stockPackage)
.getOrElse { null }
if (stockYoutubeVersion != stockVersion) {
val uninstallStock = PMRoot.uninstallApp(stockPackage)
if (uninstallStock.isError)
return uninstallStock
val installStock = install()
if (installStock.isError)
return installStock
}
return PackageManagerResult.Success(null)
}
fun patchStock(
patchPath: String,
stockPackage: String,
app: String
): PackageManagerResult {
val movePatch = Patcher.movePatchToDataAdb(patchPath, app)
if (movePatch.isError)
return movePatch
val chconPatch = Patcher.chconPatch(app)
if (chconPatch.isError)
return chconPatch
val stockPackageDir = PMRoot.getPackageDir(stockPackage)
.getOrElse { error -> return error }!!
val setupScript = Patcher.setupScript(app, stockPackage, stockPackageDir)
if (setupScript is PackageManagerResult.Error)
return setupScript
val linkPatch = Patcher.linkPatch(app, stockPackage, stockPackageDir)
if (linkPatch is PackageManagerResult.Error)
return linkPatch
return PackageManagerResult.Success(null)
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/io/ManagerSuFile.kt
================================================
package com.vanced.manager.io
import com.topjohnwu.superuser.Shell
import com.topjohnwu.superuser.io.SuFile
import com.vanced.manager.util.errString
import com.vanced.manager.util.outString
import java.io.File
class ManagerSuFile : SuFile {
sealed class SuFileResult {
data class Success(val output: String) : SuFileResult()
data class Error(val error: String) : SuFileResult()
}
constructor(pathName: String) : super(pathName)
constructor(parent: String, child: String) : super(parent, child)
constructor(parent: File, child: String) : super(parent, child)
private fun cmd(input: String): SuFileResult {
val cmd = Shell.su(input.replace("@@", escapedPath)).exec()
if (!cmd.isSuccess)
return SuFileResult.Error(cmd.errString)
return SuFileResult.Success(cmd.outString)
}
override fun delete(): Boolean {
val result = cmd("rm -f @@ || rmdir -f @@")
if (result is SuFileResult.Error)
throw SUIOException(result.error)
return true
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/io/SUIOException.kt
================================================
package com.vanced.manager.io
import java.io.IOException
class SUIOException : IOException {
constructor(message: String) : super(message)
constructor(message: String, cause: Throwable) : super(message, cause)
constructor(cause: Throwable) : super(cause)
}
================================================
FILE: app/src/main/java/com/vanced/manager/network/GithubService.kt
================================================
package com.vanced.manager.network
import com.vanced.manager.network.dto.GithubReleaseDto
import retrofit2.http.GET
private const val REPOS_VANCED = "repos/YTVanced"
interface GithubService {
@GET("$REPOS_VANCED/Vanced/releases/latest")
suspend fun getVancedYoutubeRelease(): GithubReleaseDto
@GET("$REPOS_VANCED/VancedMusic/releases/latest")
suspend fun getVancedYoutubeMusicRelease(): GithubReleaseDto
@GET("$REPOS_VANCED/VancedMicrog/releases/latest")
suspend fun getVancedMicrogRelease(): GithubReleaseDto
@GET("$REPOS_VANCED/VancedManager/releases/latest")
suspend fun getVancedManagerRelease(): GithubReleaseDto
}
================================================
FILE: app/src/main/java/com/vanced/manager/network/dto/GithubDto.kt
================================================
package com.vanced.manager.network.dto
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
data class GithubReleaseDto(
@SerialName("tag_name")
val tagName: String,
@SerialName("body")
val body: String,
@SerialName("assets")
val assets: List
)
@Serializable
data class GithubReleaseAssetDto(
@SerialName("name")
val name: String,
@SerialName("browser_download_url")
val browserDownloadUrl: String
)
================================================
FILE: app/src/main/java/com/vanced/manager/network/util/Constants.kt
================================================
package com.vanced.manager.network.util
const val BASE = "https://api.vancedapp.com/api/v1/"
const val GITHUB_API_BASE = "https://api.github.com/"
const val VANCED_NAME = "YouTube Vanced"
const val MUSIC_NAME = "YouTube Vanced Music"
const val MICROG_NAME = "Vanced microG"
const val URL_SPONSOR_BRAVE = "https://vancedapp.com/brave"
const val URL_SPONSOR_ADGUARD = "https://adguard.com/?aid=31141&source=manager"
const val URL_MEDIA_INSTAGRAM = "https://instagram.com/vanced.youtube"
const val URL_MEDIA_YOUTUBE = "https://youtube.com/c/YouTubeVanced"
const val URL_MEDIA_GITHUB = "https://github.com/YTVanced/VancedManager"
const val URL_MEDIA_WEBSITE = "https://vancedapp.com"
const val URL_MEDIA_TELEGRAM = "https://t.me/joinchat/AAAAAEHf-pi4jH1SDlAL4w"
const val URL_MEDIA_TWITTER = "https://twitter.com/YTVanced"
const val URL_MEDIA_DISCORD = "https://discord.gg/WCGNdRruzb"
const val URL_MEDIA_REDDIT = "https://www.reddit.com/r/Vanced/"
================================================
FILE: app/src/main/java/com/vanced/manager/preferences/ManagerPreference.kt
================================================
package com.vanced.manager.preferences
import android.content.SharedPreferences
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.core.content.edit
import org.koin.core.component.KoinComponent
import org.koin.core.component.inject
import kotlin.reflect.KProperty
fun managerStringPreference(
key: String,
defaultValue: String = ""
) = ManagerPreference(
key = key,
defaultValue = defaultValue,
getter = SharedPreferences::getString,
setter = SharedPreferences.Editor::putString
)
fun managerStringSetPreference(
key: String,
defaultValue: Set = setOf()
) = ManagerPreference(
key = key,
defaultValue = defaultValue,
getter = SharedPreferences::getStringSet,
setter = SharedPreferences.Editor::putStringSet
)
fun managerBooleanPreference(
key: String,
defaultValue: Boolean = false
) = ManagerPreference(
key = key,
defaultValue = defaultValue,
getter = SharedPreferences::getBoolean,
setter = SharedPreferences.Editor::putBoolean
)
fun managerIntPreference(
key: String,
defaultValue: Int = 0
) = ManagerPreference(
key = key,
defaultValue = defaultValue,
getter = SharedPreferences::getInt,
setter = SharedPreferences.Editor::putInt
)
fun managerLongPreference(
key: String,
defaultValue: Long = 0
) = ManagerPreference(
key = key,
defaultValue = defaultValue,
getter = SharedPreferences::getLong,
setter = SharedPreferences.Editor::putLong
)
class ManagerPreference(
private val key: String,
private val defaultValue: T,
private val getter: SharedPreferences.(key: String, defaultValue: T) -> T?,
private val setter: SharedPreferences.Editor.(key: String, newValue: T) -> Unit
) : KoinComponent {
private val sharedPreferences: SharedPreferences by inject()
var value by mutableStateOf(sharedPreferences.getter(key, defaultValue) ?: defaultValue)
private set
operator fun getValue(
thisRef: Any?,
property: KProperty<*>
) = value
operator fun setValue(
thisRef: Any?,
property: KProperty<*>,
newValue: T
) {
value = newValue
sharedPreferences.edit {
setter(key, newValue)
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/preferences/holder/PreferenceDefaultValueHolder.kt
================================================
package com.vanced.manager.preferences.holder
const val MANAGER_VARIANT_DEFAULT_VALUE = "nonroot"
const val MANAGER_THEME_DEFAULT_VALUE = "System Default"
const val VANCED_THEME_DEFAULT_VALUE = "dark"
val VANCED_LANGUAGE_DEFAULT_VALUE = setOf("en")
const val APP_VERSION_DEFAULT_VALUE = "latest"
const val APP_ENABLED_DEFAULT_VALUE = true
================================================
FILE: app/src/main/java/com/vanced/manager/preferences/holder/PreferenceHolder.kt
================================================
package com.vanced.manager.preferences.holder
import com.vanced.manager.preferences.managerStringPreference
import com.vanced.manager.preferences.managerStringSetPreference
var managerVariantPref by managerStringPreference(
MANAGER_VARIANT_KEY,
MANAGER_VARIANT_DEFAULT_VALUE
)
var vancedThemePref by managerStringPreference(APP_VANCED_THEME_KEY, VANCED_THEME_DEFAULT_VALUE)
var vancedVersionPref by managerStringPreference(APP_VANCED_VERSION_KEY, APP_VERSION_DEFAULT_VALUE)
var vancedLanguagesPref by managerStringSetPreference(
APP_VANCED_LANGUAGE_KEY,
VANCED_LANGUAGE_DEFAULT_VALUE
)
var musicVersionPref by managerStringPreference(APP_MUSIC_VERSION_KEY, APP_VERSION_DEFAULT_VALUE)
================================================
FILE: app/src/main/java/com/vanced/manager/preferences/holder/PreferenceKeyHolder.kt
================================================
package com.vanced.manager.preferences.holder
const val USE_CUSTOM_TABS_KEY = "use_custom_tabs"
const val MANAGER_VARIANT_KEY = "manager_variant"
const val MANAGER_THEME_KEY = "manager_theme"
const val MANAGER_ACCENT_COLOR_KEY = "manager_accent_color"
const val APP_VANCED_THEME_KEY = "app_vanced_theme"
const val APP_VANCED_VERSION_KEY = "app_vanced_version"
const val APP_VANCED_LANGUAGE_KEY = "app_vanced_language"
const val APP_MUSIC_VERSION_KEY = "app_music_version"
const val VANCED_ENABLED_KEY = "manager_vanced_enabled"
const val MUSIC_ENABLED_KEY = "manager_music_enabled"
================================================
FILE: app/src/main/java/com/vanced/manager/repository/AppRepository.kt
================================================
package com.vanced.manager.repository
import com.vanced.manager.domain.model.App
import com.vanced.manager.domain.model.AppData
import com.vanced.manager.domain.model.AppState
import com.vanced.manager.domain.model.AppType
import com.vanced.manager.network.GithubService
import com.vanced.manager.network.dto.GithubReleaseDto
import com.vanced.manager.repository.manager.NonrootPackageManager
import com.vanced.manager.repository.manager.PackageManager
import com.vanced.manager.repository.manager.RootPackageManager
interface AppRepository {
suspend fun getVancedYoutubeNonroot(): App
suspend fun getVancedYoutubeRoot(): App
suspend fun getVancedYoutubeMusicNonroot(): App
suspend fun getVancedYoutubeMusicRoot(): App
suspend fun getVancedMicrog(): App
suspend fun getVancedManager(): App
}
class AppRepositoryImpl(
private val githubService: GithubService,
private val nonrootPackageManager: NonrootPackageManager,
private val rootPackageManager: RootPackageManager,
) : AppRepository {
override suspend fun getVancedYoutubeNonroot(): App {
val githubRelease = githubService.getVancedYoutubeRelease()
val remoteVersionCode = githubRelease.getVersionCode()
val remoteVersionName = githubRelease.getVersionName()
val installedVersionCode =
nonrootPackageManager.getVersionCode(AppData.PACKAGE_VANCED_YOUTUBE).getValueOrNull()
val installedVersionName =
nonrootPackageManager.getVersionName(AppData.PACKAGE_VANCED_YOUTUBE).getValueOrNull()
return App(
name = AppData.NAME_VANCED_YOUTUBE,
iconResId = AppData.ICON_VANCED_YOUTUBE,
changelog = githubRelease.body,
remoteVersionCode = remoteVersionCode,
remoteVersionName = remoteVersionName,
installedVersionCode = installedVersionCode,
installedVersionName = installedVersionName,
packageName = AppData.PACKAGE_VANCED_YOUTUBE,
launchActivity = AppData.LAUNCH_ACTIVITY_VANCED_YOUTUBE,
state = getNoonrotAppState(installedVersionCode, remoteVersionCode),
app = AppType.VANCED_YOUTUBE,
)
}
override suspend fun getVancedYoutubeRoot(): App {
val githubRelease = githubService.getVancedYoutubeRelease()
val remoteVersionCode = githubRelease.getVersionCode()
val remoteVersionName = githubRelease.getVersionName()
val installedVersionCode =
rootPackageManager.getVersionCode(AppData.PACKAGE_ROOT_VANCED_YOUTUBE).getValueOrNull()
val installedVersionName =
rootPackageManager.getVersionName(AppData.PACKAGE_ROOT_VANCED_YOUTUBE).getValueOrNull()
return App(
name = AppData.NAME_VANCED_YOUTUBE,
iconResId = AppData.ICON_VANCED_YOUTUBE,
changelog = githubRelease.body,
remoteVersionCode = remoteVersionCode,
remoteVersionName = remoteVersionName,
installedVersionCode = installedVersionCode,
installedVersionName = installedVersionName,
packageName = AppData.PACKAGE_VANCED_YOUTUBE,
launchActivity = AppData.LAUNCH_ACTIVITY_VANCED_YOUTUBE,
state = getNoonrotAppState(installedVersionCode, remoteVersionCode),
app = AppType.VANCED_YOUTUBE,
)
}
override suspend fun getVancedYoutubeMusicNonroot(): App {
val githubRelease = githubService.getVancedYoutubeMusicRelease()
val remoteVersionCode = githubRelease.getVersionCode()
val remoteVersionName = githubRelease.getVersionName()
val installedVersionCode =
nonrootPackageManager.getVersionCode(AppData.PACKAGE_VANCED_YOUTUBE_MUSIC).getValueOrNull()
val installedVersionName =
nonrootPackageManager.getVersionName(AppData.PACKAGE_VANCED_YOUTUBE_MUSIC).getValueOrNull()
return App(
name = AppData.NAME_VANCED_YOUTUBE_MUSIC,
iconResId = AppData.ICON_VANCED_YOUTUBE_MUSIC,
changelog = githubRelease.body,
remoteVersionCode = remoteVersionCode,
remoteVersionName = remoteVersionName,
installedVersionCode = installedVersionCode,
installedVersionName = installedVersionName,
packageName = AppData.PACKAGE_VANCED_YOUTUBE_MUSIC,
launchActivity = AppData.LAUNCH_ACTIVITY_VANCED_YOUTUBE_MUSIC,
state = getNoonrotAppState(installedVersionCode, remoteVersionCode),
app = AppType.VANCED_YOUTUBE_MUSIC,
)
}
override suspend fun getVancedYoutubeMusicRoot(): App {
val githubRelease = githubService.getVancedYoutubeMusicRelease()
val remoteVersionCode = githubRelease.getVersionCode()
val remoteVersionName = githubRelease.getVersionName()
val installedVersionCode =
rootPackageManager.getVersionCode(AppData.PACKAGE_ROOT_VANCED_YOUTUBE_MUSIC).getValueOrNull()
val installedVersionName =
rootPackageManager.getVersionName(AppData.PACKAGE_ROOT_VANCED_YOUTUBE_MUSIC).getValueOrNull()
return App(
name = AppData.NAME_VANCED_YOUTUBE_MUSIC,
iconResId = AppData.ICON_VANCED_YOUTUBE_MUSIC,
changelog = githubRelease.body,
remoteVersionCode = remoteVersionCode,
remoteVersionName = remoteVersionName,
installedVersionCode = installedVersionCode,
installedVersionName = installedVersionName,
packageName = AppData.PACKAGE_VANCED_YOUTUBE_MUSIC,
launchActivity = AppData.LAUNCH_ACTIVITY_VANCED_YOUTUBE_MUSIC,
state = getNoonrotAppState(installedVersionCode, remoteVersionCode),
app = AppType.VANCED_YOUTUBE_MUSIC,
)
}
override suspend fun getVancedMicrog(): App {
val githubRelease = githubService.getVancedMicrogRelease()
val remoteVersionCode = githubRelease.getVersionCode()
val remoteVersionName = githubRelease.getVersionName()
val installedVersionCode =
nonrootPackageManager.getVersionCode(AppData.PACKAGE_VANCED_MICROG).getValueOrNull()
val installedVersionName =
nonrootPackageManager.getVersionName(AppData.PACKAGE_VANCED_MICROG).getValueOrNull()
return App(
name = AppData.NAME_VANCED_MICROG,
iconResId = AppData.ICON_VANCED_MICROG,
changelog = githubRelease.body,
remoteVersionCode = remoteVersionCode,
remoteVersionName = remoteVersionName,
installedVersionCode = installedVersionCode,
installedVersionName = installedVersionName,
packageName = AppData.PACKAGE_VANCED_MICROG,
launchActivity = AppData.LAUNCH_ACTIVITY_VANCED_MICROG,
state = getNoonrotAppState(installedVersionCode, remoteVersionCode),
app = AppType.VANCED_MICROG,
)
}
override suspend fun getVancedManager(): App {
val githubRelease = githubService.getVancedManagerRelease()
val remoteVersionCode = githubRelease.getVersionCode()
val remoteVersionName = githubRelease.getVersionName()
val installedVersionCode =
nonrootPackageManager.getVersionCode(AppData.PACKAGE_VANCED_MANAGER).getValueOrNull()
val installedVersionName =
nonrootPackageManager.getVersionName(AppData.PACKAGE_VANCED_MANAGER).getValueOrNull()
return App(
name = AppData.NAME_VANCED_MANAGER,
iconResId = AppData.ICON_VANCED_MANAGER,
changelog = githubRelease.body,
remoteVersionCode = remoteVersionCode,
remoteVersionName = remoteVersionName,
installedVersionCode = installedVersionCode,
installedVersionName = installedVersionName,
packageName = AppData.PACKAGE_VANCED_MANAGER,
launchActivity = AppData.LAUNCH_ACTIVITY_VANCED_MANAGER,
state = getNoonrotAppState(installedVersionCode, remoteVersionCode),
app = AppType.VANCED_MANAGER,
)
}
private fun getNoonrotAppState(
installedVersionCode: Int?,
remoteVersionCode: Int
): AppState {
return when {
installedVersionCode == null -> AppState.NOT_INSTALLED
installedVersionCode < remoteVersionCode -> AppState.NEEDS_UPDATE
installedVersionCode >= remoteVersionCode -> AppState.INSTALLED
else -> AppState.NOT_INSTALLED
}
}
private fun GithubReleaseDto.getVersionCode() = tagName.substringAfter("-").toInt()
private fun GithubReleaseDto.getVersionName() = tagName.substringBefore("-")
}
================================================
FILE: app/src/main/java/com/vanced/manager/repository/PreferenceRepository.kt
================================================
package com.vanced.manager.repository
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
import com.vanced.manager.repository.source.PreferenceData
import com.vanced.manager.repository.source.PreferenceDatasource
interface PreferenceRepository {
var managerUseCustomTabs: Boolean
var managerMode: ManagerMode
var managerTheme: ManagerTheme
}
class PreferenceRepositoryImpl(
private val preferenceDatasource: PreferenceDatasource
) : PreferenceRepository {
override var managerUseCustomTabs: Boolean
get() = preferenceDatasource.managerUseCustomTabs
set(value) {
preferenceDatasource.managerUseCustomTabs = value
}
override var managerMode: ManagerMode
get() = ManagerMode.fromValue(preferenceDatasource.managerMode)
set(value) {
preferenceDatasource.managerMode = value.value
}
override var managerTheme: ManagerTheme
get() = ManagerTheme.fromValue(preferenceDatasource.managerTheme)
set(value) {
preferenceDatasource.managerTheme = value.value
}
}
enum class ManagerTheme(val value: String) {
LIGHT(PreferenceData.MANAGER_THEME_VALUE_LIGHT),
DARK(PreferenceData.MANAGER_THEME_VALUE_DARK),
SYSTEM_DEFAULT(PreferenceData.MANAGER_THEME_VALUE_SYSTEM_DEFAULT);
@Composable
fun isDark() = when (this) {
LIGHT -> false
DARK -> true
SYSTEM_DEFAULT -> isSystemInDarkTheme()
}
companion object {
fun fromValue(value: String?): ManagerTheme {
return values().find {
it.value == value
} ?: SYSTEM_DEFAULT
}
}
}
enum class ManagerMode(val value: String) {
ROOT(PreferenceData.MANAGER_MODE_VALUE_ROOT),
NONROOT(PreferenceData.MANAGER_MODE_VALUE_NONROOT);
val isRoot get() = this == ROOT
val isNonroot get() = this == NONROOT
companion object {
fun fromValue(value: String?): ManagerMode {
return when (value) {
"root" -> ROOT
else -> NONROOT
}
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/repository/manager/PackageManager.kt
================================================
package com.vanced.manager.repository.manager
import android.annotation.SuppressLint
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
import android.os.Build
import com.topjohnwu.superuser.Shell
import com.topjohnwu.superuser.io.SuFile
import com.topjohnwu.superuser.io.SuFileInputStream
import com.topjohnwu.superuser.io.SuFileOutputStream
import com.vanced.manager.installer.service.AppInstallService
import com.vanced.manager.installer.service.AppUninstallService
import com.vanced.manager.util.*
import java.io.File
import java.io.FileNotFoundException
import java.io.IOException
import kotlin.jvm.Throws
interface PackageManager {
suspend fun getVersionCode(packageName: String): PackageManagerResult
suspend fun getVersionName(packageName: String): PackageManagerResult
suspend fun getInstallationDir(packageName: String): PackageManagerResult
suspend fun setInstaller(targetPackage: String, installerPackage: String): PackageManagerResult
suspend fun forceStop(packageName: String): PackageManagerResult
suspend fun installApp(apk: File): PackageManagerResult
suspend fun installSplitApp(apks: Array): PackageManagerResult
suspend fun uninstallApp(packageName: String): PackageManagerResult
}
class NonrootPackageManager(
private val context: Context
) : PackageManager {
@SuppressLint("WrongConstant")
@Suppress("DEPRECATION")
override suspend fun getVersionCode(packageName: String): PackageManagerResult {
return try {
val packageInfo = context.packageManager.getPackageInfo(packageName, FLAG_NOTHING)
val versionCode = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
packageInfo.longVersionCode.and(VERSION_IGNORE_MAJOR).toInt()
} else {
packageInfo.versionCode
}
PackageManagerResult.Success(versionCode)
} catch (e: android.content.pm.PackageManager.NameNotFoundException) {
PackageManagerResult.Error(
error = PackageManagerError.GET_FAILED_PACKAGE_VERSION_CODE,
message = e.stackTraceToString()
)
}
}
@SuppressLint("WrongConstant")
override suspend fun getVersionName(packageName: String): PackageManagerResult {
return try {
val versionName = context.packageManager
.getPackageInfo(packageName, FLAG_NOTHING)
.versionName
PackageManagerResult.Success(versionName)
} catch (e: android.content.pm.PackageManager.NameNotFoundException) {
PackageManagerResult.Error(
error = PackageManagerError.GET_FAILED_PACKAGE_VERSION_NAME,
message = e.stackTraceToString()
)
}
}
@SuppressLint("WrongConstant")
override suspend fun getInstallationDir(packageName: String): PackageManagerResult {
return try {
val installationDir = context.packageManager
.getPackageInfo(packageName, FLAG_NOTHING)
.applicationInfo
.sourceDir
PackageManagerResult.Success(installationDir)
} catch (e: android.content.pm.PackageManager.NameNotFoundException) {
PackageManagerResult.Error(
error = PackageManagerError.GET_FAILED_PACKAGE_DIR,
message = e.stackTraceToString()
)
}
}
override suspend fun setInstaller(
targetPackage: String,
installerPackage: String
): PackageManagerResult {
return PackageManagerResult.Error(
error = PackageManagerError.SET_FAILED_INSTALLER,
message = "Unsupported"
)
}
override suspend fun forceStop(packageName: String): PackageManagerResult {
return PackageManagerResult.Error(
error = PackageManagerError.APP_FAILED_FORCE_STOP,
message = "Unsupported"
)
}
override suspend fun installApp(apk: File): PackageManagerResult {
return createInstallationSession {
writeApkToSession(apk)
}
}
override suspend fun installSplitApp(apks: Array): PackageManagerResult {
return createInstallationSession {
for (apk in apks) {
writeApkToSession(apk)
}
}
}
override suspend fun uninstallApp(packageName: String): PackageManagerResult {
val packageInstaller = context.packageManager.packageInstaller
val pendingIntent = PendingIntent.getService(
context,
0,
Intent(context, AppUninstallService::class.java),
intentFlags
).intentSender
packageInstaller.uninstall(packageName, pendingIntent)
return PackageManagerResult.Success(null)
}
private inline fun createInstallationSession(
block: PackageInstaller.Session.() -> Unit
): PackageManagerResult {
val packageInstaller = context.packageManager.packageInstaller
val sessionParams = PackageInstaller.SessionParams(
PackageInstaller.SessionParams.MODE_FULL_INSTALL
).apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
setInstallReason(android.content.pm.PackageManager.INSTALL_REASON_USER)
}
}
val pendingIntent = PendingIntent.getService(
context,
0,
Intent(context, AppInstallService::class.java),
intentFlags
).intentSender
val sessionId = tripleUnionTryCatch(
onCatch = {
return PackageManagerResult.Error(
error = PackageManagerError.SESSION_FAILED_CREATE,
message = it.stackTraceToString()
)
}
) {
packageInstaller.createSession(sessionParams)
}
val session = doubleUnionTryCatch(
onCatch = {
return PackageManagerResult.Error(
error = PackageManagerError.SESSION_FAILED_CREATE,
message = it.stackTraceToString()
)
}
) {
packageInstaller.openSession(sessionId)
}
try {
session.use {
it.block()
it.commit(pendingIntent)
}
} catch (e: IOException) {
return PackageManagerResult.Error(
error = PackageManagerError.SESSION_FAILED_WRITE,
message = e.stackTraceToString()
)
} catch (e: SecurityException) {
return PackageManagerResult.Error(
error = PackageManagerError.SESSION_FAILED_COMMIT,
message = e.stackTraceToString()
)
}
return PackageManagerResult.Success(null)
}
private fun PackageInstaller.Session.writeApkToSession(apk: File) {
apk.inputStream().use { inputStream ->
openWrite(apk.name, 0, apk.length()).use { outputStream ->
inputStream.copyTo(outputStream, byteArraySize)
fsync(outputStream)
}
}
}
private val intentFlags: Int
get() {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
PendingIntent.FLAG_MUTABLE
else
0
}
private companion object {
const val byteArraySize = 1024 * 1024
const val FLAG_NOTHING = 0
const val VERSION_IGNORE_MAJOR = 0xFFFFFFFF
}
}
class RootPackageManager : PackageManager {
override suspend fun getVersionCode(packageName: String): PackageManagerResult {
return try {
val keyword = "versionCode="
val dumpsys = Shell.su("dumpsys", "package", packageName, "|", "grep", keyword).awaitOutputOrThrow()
val versionCode = dumpsys.removePrefix(keyword).substringAfter("minSdk").toInt()
PackageManagerResult.Success(versionCode)
} catch (e: SuException) {
PackageManagerResult.Error(
error = PackageManagerError.GET_FAILED_PACKAGE_VERSION_CODE,
message = e.stderrOut
)
} catch (e: java.lang.NumberFormatException) {
PackageManagerResult.Error(
error = PackageManagerError.GET_FAILED_PACKAGE_VERSION_CODE,
message = e.stackTraceToString()
)
}
}
override suspend fun getVersionName(packageName: String): PackageManagerResult {
return try {
val keyword = "versionName="
val dumpsys = Shell.su("dumpsys", "package", packageName, "|", "grep", keyword).awaitOutputOrThrow()
val versionName = dumpsys.removePrefix(keyword)
PackageManagerResult.Success(versionName)
} catch (e: SuException) {
PackageManagerResult.Error(
error = PackageManagerError.GET_FAILED_PACKAGE_VERSION_NAME,
message = e.stderrOut
)
}
}
override suspend fun getInstallationDir(packageName: String): PackageManagerResult {
return try {
val keyword = "path: "
val dumpsys = Shell.su("dumpsys", "package", packageName, "|", "grep", keyword).awaitOutputOrThrow()
val installationDir = dumpsys.removePrefix(keyword)
PackageManagerResult.Success(installationDir)
} catch (e: SuException) {
PackageManagerResult.Error(
error = PackageManagerError.GET_FAILED_PACKAGE_DIR,
message = e.stderrOut
)
}
}
override suspend fun setInstaller(
targetPackage: String,
installerPackage: String
): PackageManagerResult {
return try {
Shell.su("pm", "set-installer", targetPackage, installerPackage).awaitOutputOrThrow()
PackageManagerResult.Success(null)
} catch (e: SuException) {
PackageManagerResult.Error(
error = PackageManagerError.SET_FAILED_INSTALLER,
message = e.stderrOut
)
}
}
override suspend fun forceStop(packageName: String): PackageManagerResult {
return try {
Shell.su("am", "force-stop", packageName).awaitOutputOrThrow()
PackageManagerResult.Success(null)
} catch (e: SuException) {
PackageManagerResult.Error(
error = PackageManagerError.APP_FAILED_FORCE_STOP,
message = e.stderrOut
)
}
}
override suspend fun installApp(apk: File): PackageManagerResult {
var tempApk: File? = null
return try {
tempApk = copyApkToTemp(apk)
Shell.su("pm", "install", "-r", tempApk.absolutePath).awaitOutputOrThrow()
PackageManagerResult.Success(null)
} catch (e: IOException) {
PackageManagerResult.Error(
error = PackageManagerError.SESSION_FAILED_COPY,
message = e.stackTraceToString()
)
} catch (e: SuException) {
PackageManagerResult.Error(
error = getEnumForInstallFailed(e.stderrOut),
message = e.stderrOut
)
} finally {
tempApk?.delete()
}
}
override suspend fun installSplitApp(apks: Array): PackageManagerResult {
val sessionId = try {
val installCreate = Shell.su("pm", "install-create", "-r").awaitOutputOrThrow()
installCreate.toInt()
} catch (e: SuException) {
return PackageManagerResult.Error(
error = PackageManagerError.SESSION_FAILED_CREATE,
message = e.stderrOut
)
} catch (e: NumberFormatException) {
return PackageManagerResult.Error(
error = PackageManagerError.SESSION_INVALID_ID,
message = e.stackTraceToString()
)
}
for (apk in apks) {
var tempApk: File? = null
try {
tempApk = copyApkToTemp(apk)
Shell.su("pm", "install-write", sessionId.toString(), tempApk.name, tempApk.absolutePath).awaitOutputOrThrow()
} catch (e: SuException) {
return PackageManagerResult.Error(
error = PackageManagerError.SESSION_FAILED_WRITE,
message = e.stderrOut
)
} catch (e: IOException) {
return PackageManagerResult.Error(
error = PackageManagerError.SESSION_FAILED_COPY,
message = e.stackTraceToString()
)
} finally {
tempApk?.delete()
}
}
return try {
Shell.su("pm", "install-commit", sessionId.toString()).awaitOutputOrThrow()
PackageManagerResult.Success(null)
} catch (e: SuException) {
PackageManagerResult.Error(
error = getEnumForInstallFailed(e.stderrOut),
message = e.stderrOut
)
}
}
override suspend fun uninstallApp(packageName: String): PackageManagerResult {
return try {
Shell.su("pm", "uninstall", packageName).awaitOutputOrThrow()
PackageManagerResult.Success(null)
} catch (e: SuException) {
PackageManagerResult.Error(
error = PackageManagerError.UNINSTALL_FAILED,
message = e.stderrOut
)
}
}
@Throws(
IOException::class,
FileNotFoundException::class
)
private fun copyApkToTemp(apk: File): SuFile {
val tmpPath = "/data/local/tmp/${apk.name}"
val tmpApk = SuFile(tmpPath).apply {
createNewFile()
}
SuFileInputStream.open(tmpApk).use { inputStream ->
SuFileOutputStream.open(tmpApk).use { outputStream ->
inputStream.copyTo(outputStream)
outputStream.flush()
}
}
return tmpApk
}
}
enum class PackageManagerError {
SET_FAILED_INSTALLER,
GET_FAILED_PACKAGE_DIR,
GET_FAILED_PACKAGE_VERSION_NAME,
GET_FAILED_PACKAGE_VERSION_CODE,
APP_FAILED_FORCE_STOP,
SESSION_FAILED_CREATE,
SESSION_FAILED_COMMIT,
SESSION_FAILED_WRITE,
SESSION_FAILED_COPY,
SESSION_FAILED_OPEN,
SESSION_INVALID_ID,
INSTALL_FAILED_ABORTED,
INSTALL_FAILED_ALREADY_EXISTS,
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE,
INSTALL_FAILED_INSUFFICIENT_STORAGE,
INSTALL_FAILED_INVALID_APK,
INSTALL_FAILED_VERSION_DOWNGRADE,
INSTALL_FAILED_PARSE_NO_CERTIFICATES,
INSTALL_FAILED_UNKNOWN,
UNINSTALL_FAILED,
LINK_FAILED_UNMOUNT,
LINK_FAILED_MOUNT,
PATCH_FAILED_COPY,
PATCH_FAILED_CHMOD,
PATCH_FAILED_CHOWN,
PATCH_FAILED_CHCON,
PATCH_FAILED_DESTROY,
SCRIPT_FAILED_SETUP_POST_FS,
SCRIPT_FAILED_SETUP_SERVICE_D,
SCRIPT_FAILED_DESTROY_POST_FS,
SCRIPT_FAILED_DESTROY_SERVICE_D,
}
fun getEnumForInstallFailed(outString: String): PackageManagerError {
return when {
outString.contains("INSTALL_FAILED_ABORTED") -> PackageManagerError.INSTALL_FAILED_ABORTED
outString.contains("INSTALL_FAILED_ALREADY_EXISTS") -> PackageManagerError.INSTALL_FAILED_ALREADY_EXISTS
outString.contains("INSTALL_FAILED_CPU_ABI_INCOMPATIBLE") -> PackageManagerError.INSTALL_FAILED_CPU_ABI_INCOMPATIBLE
outString.contains("INSTALL_FAILED_INSUFFICIENT_STORAGE") -> PackageManagerError.INSTALL_FAILED_INSUFFICIENT_STORAGE
outString.contains("INSTALL_FAILED_INVALID_APK") -> PackageManagerError.INSTALL_FAILED_INVALID_APK
outString.contains("INSTALL_FAILED_VERSION_DOWNGRADE") -> PackageManagerError.INSTALL_FAILED_VERSION_DOWNGRADE
outString.contains("INSTALL_PARSE_FAILED_NO_CERTIFICATES") -> PackageManagerError.INSTALL_FAILED_PARSE_NO_CERTIFICATES
else -> PackageManagerError.INSTALL_FAILED_UNKNOWN
}
}
sealed class PackageManagerResult {
data class Success(val value: V?) : PackageManagerResult()
data class Error(val error: PackageManagerError, val message: String) : PackageManagerResult()
fun getValueOrNull(): V? = getOrElse { null }
val isError
get() = this is Error
val isSuccess
get() = this is Success
}
inline fun PackageManagerResult.getOrElse(
onError: (PackageManagerResult.Error) -> R?
): R? {
return when (this) {
is PackageManagerResult.Success -> this.value
is PackageManagerResult.Error -> onError(this)
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/repository/source/PreferenceDatasource.kt
================================================
package com.vanced.manager.repository.source
import android.content.SharedPreferences
interface PreferenceDatasource {
var managerUseCustomTabs: Boolean
var managerMode: String
var managerTheme: String
}
class PreferenceDatasourceImpl(
private val sharedPreferences: SharedPreferences
) : PreferenceDatasource {
override var managerUseCustomTabs: Boolean
get() = getBoolean(
PreferenceData.MANAGER_USE_CUSTOM_TABS_KEY,
PreferenceData.MANAGER_USE_CUSTOM_TABS_DEFAULT_VALUE
)
set(value) {
putBoolean(PreferenceData.MANAGER_USE_CUSTOM_TABS_KEY, value)
}
override var managerMode: String
get() = getString(
PreferenceData.MANAGER_MODE_KEY,
PreferenceData.MANAGER_MODE_DEFAULT_VALUE
)
set(value) {
putString(PreferenceData.MANAGER_MODE_KEY, value)
}
override var managerTheme: String
get() = getString(
PreferenceData.MANAGER_THEME_KEY,
PreferenceData.MANAGER_THEME_DEFAULT_VALUE
)
set(value) {
putString(PreferenceData.MANAGER_THEME_KEY, value)
}
private fun getString(key: String, defaultValue: String): String {
return sharedPreferences.getString(key, defaultValue) ?: defaultValue
}
private fun getBoolean(key: String, defaultValue: Boolean): Boolean {
return sharedPreferences.getBoolean(key, defaultValue)
}
private fun putString(key: String, value: String) {
sharedPreferences.edit().putString(key, value).apply()
}
private fun putBoolean(key: String, value: Boolean) {
sharedPreferences.edit().putBoolean(key, value).apply()
}
}
object PreferenceData {
const val MANAGER_USE_CUSTOM_TABS_KEY = "manager_behaviour_use_custom_tabs"
const val MANAGER_USE_CUSTOM_TABS_DEFAULT_VALUE = true
const val MANAGER_MODE_KEY = "manager_behaviour_mode"
const val MANAGER_MODE_VALUE_ROOT = "root"
const val MANAGER_MODE_VALUE_NONROOT = "nonroot"
const val MANAGER_MODE_DEFAULT_VALUE = MANAGER_MODE_VALUE_NONROOT
const val MANAGER_THEME_KEY = "manager_appearance_theme"
const val MANAGER_THEME_VALUE_LIGHT = "light"
const val MANAGER_THEME_VALUE_DARK = "dark"
const val MANAGER_THEME_VALUE_SYSTEM_DEFAULT = "system_default"
const val MANAGER_THEME_DEFAULT_VALUE = MANAGER_THEME_VALUE_SYSTEM_DEFAULT
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/MainActivity.kt
================================================
package com.vanced.manager.ui
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.SideEffect
import com.github.zsoltk.compose.backpress.BackPressHandler
import com.github.zsoltk.compose.backpress.LocalBackPressHandler
import com.github.zsoltk.compose.router.Router
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.vanced.manager.installer.service.AppInstallService
import com.vanced.manager.installer.service.AppUninstallService
import com.vanced.manager.ui.screen.*
import com.vanced.manager.ui.theme.ManagerTheme
import com.vanced.manager.ui.util.Screen
import com.vanced.manager.ui.util.animated
import com.vanced.manager.ui.viewmodel.InstallViewModel
import com.vanced.manager.ui.viewmodel.MainViewModel
import org.koin.androidx.viewmodel.ext.android.viewModel
class MainActivity : ComponentActivity() {
private val installViewModel: InstallViewModel by viewModel()
private val mainViewModel: MainViewModel by viewModel()
private val backPressHandler = BackPressHandler()
private val installBroadcastReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
when (intent?.action) {
AppInstallService.APP_INSTALL_ACTION -> {
installViewModel.postInstallStatus(
pmStatus = intent.getIntExtra(AppInstallService.EXTRA_INSTALL_STATUS, -999),
extra = intent.getStringExtra(AppInstallService.EXTRA_INSTALL_STATUS_MESSAGE)!!,
)
mainViewModel.fetch()
}
AppUninstallService.APP_UNINSTALL_ACTION -> {
mainViewModel.fetch()
}
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mainViewModel.fetch()
setContent {
val isDark = mainViewModel.appTheme.isDark()
ManagerTheme(darkMode = isDark) {
val surfaceColor = MaterialTheme.colorScheme.surface.animated
val systemUiController = rememberSystemUiController()
SideEffect {
systemUiController.setSystemBarsColor(
color = surfaceColor,
darkIcons = !isDark
)
}
CompositionLocalProvider(
LocalBackPressHandler provides backPressHandler
) {
Router("VancedManager", Screen.Home) { backStack ->
when (val screen = backStack.last()) {
is Screen.Home -> {
HomeScreen(
managerState = mainViewModel.appState,
onRefresh = {
mainViewModel.fetch()
},
onToolbarScreenSelected = {
backStack.push(it)
},
onAppDownloadClick = { app ->
/*if (installationOptions != null) {
backStack.push(
Screen.Configuration(
appName,
appVersions,
installationOptions
)
)
} else {
backStack.push(Screen.Install(appName, appVersions))
}*/
},
onAppLaunchClick = { app ->
mainViewModel.launchApp(app.packageName, app.launchActivity)
},
onAppUninstallClick = { app ->
mainViewModel.uninstallApp(app.packageName)
}
)
}
is Screen.Settings -> {
SettingsScreen(
onToolbarBackButtonClick = {
backStack.pop()
},
onThemeChange = {
mainViewModel.appTheme = it
}
)
}
is Screen.About -> {
AboutScreen(
onToolbarBackButtonClick = {
backStack.pop()
}
)
}
is Screen.Logs -> {
}
is Screen.Configuration -> {
ConfigurationScreen(
installationOptions = screen.appInstallationOptions,
onToolbarBackButtonClick = {
backStack.pop()
},
onFinishClick = {
backStack.push(
Screen.Install(
screen.appName,
screen.appVersions
)
)
}
)
}
is Screen.Install -> {
InstallScreen(
appName = screen.appName,
appVersions = screen.appVersions,
viewModel = installViewModel,
onFinishClick = {
installViewModel.clear()
backStack.newRoot(Screen.Home)
}
)
}
}
}
}
}
}
}
override fun onBackPressed() {
if (!backPressHandler.handle())
super.onBackPressed()
}
override fun onStart() {
super.onStart()
registerReceiver(
installBroadcastReceiver,
IntentFilter().apply {
addAction(AppInstallService.APP_INSTALL_ACTION)
addAction(AppUninstallService.APP_UNINSTALL_ACTION)
}
)
}
override fun onStop() {
super.onStop()
unregisterReceiver(installBroadcastReceiver)
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/SplashScreenActivity.kt
================================================
package com.vanced.manager.ui
import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
import com.topjohnwu.superuser.BusyBoxInstaller
import com.topjohnwu.superuser.Shell
import com.vanced.manager.BuildConfig
class SplashScreenActivity : ComponentActivity() {
init {
Shell.enableVerboseLogging = BuildConfig.DEBUG
Shell.setDefaultBuilder(
Shell.Builder
.create()
.setInitializers(BusyBoxInstaller::class.java)
)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Shell.getShell {
startActivity(
Intent(this, MainActivity::class.java)
)
finish()
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerButton.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.unit.dp
@Composable
fun ManagerButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
shape: Shape = RoundedCornerShape(20.0.dp),
border: BorderStroke? = null,
colors: ButtonColors = ButtonDefaults.buttonColors(),
contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
content: @Composable RowScope.() -> Unit
) {
Button(
onClick,
modifier,
enabled,
interactionSource,
elevation,
shape,
border,
colors,
contentPadding,
content
)
}
@Composable
fun ManagerElevatedButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
elevation: ButtonElevation? = ButtonDefaults.elevatedButtonElevation(),
shape: Shape = RoundedCornerShape(20.0.dp),
border: BorderStroke? = null,
colors: ButtonColors = ButtonDefaults.elevatedButtonColors(),
contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
content: @Composable RowScope.() -> Unit
) {
ElevatedButton(
onClick,
modifier,
enabled,
interactionSource,
elevation,
shape,
border,
colors,
contentPadding,
content
)
}
@Composable
fun ManagerFilledTonalButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
elevation: ButtonElevation? = ButtonDefaults.filledTonalButtonElevation(),
shape: Shape = RoundedCornerShape(20.0.dp),
border: BorderStroke? = null,
colors: ButtonColors = ButtonDefaults.filledTonalButtonColors(),
contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
content: @Composable RowScope.() -> Unit
) {
FilledTonalButton(
onClick,
modifier,
enabled,
interactionSource,
elevation,
shape,
border,
colors,
contentPadding,
content
)
}
@Composable
fun ManagerOutlinedButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
elevation: ButtonElevation? = null,
shape: Shape = RoundedCornerShape(20.0.dp),
border: BorderStroke? = ButtonDefaults.outlinedButtonBorder,
colors: ButtonColors = ButtonDefaults.outlinedButtonColors(),
contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
content: @Composable RowScope.() -> Unit
) {
Button(
onClick,
modifier,
enabled,
interactionSource,
elevation,
shape,
border,
colors,
contentPadding,
content
)
}
@Composable
fun ManagerTextButton(
onClick: () -> Unit,
modifier: Modifier = Modifier,
enabled: Boolean = true,
interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
elevation: ButtonElevation? = null,
shape: Shape = RoundedCornerShape(20.0.dp),
border: BorderStroke? = null,
colors: ButtonColors = ButtonDefaults.textButtonColors(),
contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
content: @Composable RowScope.() -> Unit
) {
TextButton(
onClick,
modifier,
enabled,
interactionSource,
elevation,
shape,
border,
colors,
contentPadding,
content
)
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerCard.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Shape
import com.vanced.manager.ui.theme.MediumShape
import com.vanced.manager.ui.util.animated
@Composable
fun ManagerCard(
modifier: Modifier = Modifier,
onClick: (() -> Unit)? = null,
shape: Shape = MediumShape,
containerColor: Color = MaterialTheme.colorScheme.surface,
contentColor: Color = contentColorFor(containerColor),
elevation: CardElevation = CardDefaults.cardElevation(),
content: @Composable ColumnScope.() -> Unit,
) {
if (onClick != null) {
val interactionSource = remember { MutableInteractionSource() }
Card(
modifier = modifier
.clickable(
interactionSource = interactionSource,
indication = null,
onClick = onClick
),
interactionSource = interactionSource,
shape = shape,
containerColor = containerColor.animated,
contentColor = contentColor.animated,
elevation = elevation,
content = content
)
} else {
Card(
modifier = modifier,
shape = shape,
containerColor = containerColor.animated,
contentColor = contentColor.animated,
elevation = elevation,
content = content
)
}
}
@Composable
fun ManagerElevatedCard(
modifier: Modifier = Modifier,
onClick: (() -> Unit)? = null,
shape: Shape = MediumShape,
containerColor: Color = MaterialTheme.colorScheme.surface,
contentColor: Color = contentColorFor(containerColor),
elevation: CardElevation = CardDefaults.elevatedCardElevation(),
content: @Composable ColumnScope.() -> Unit,
) {
if (onClick != null) {
val interactionSource = remember { MutableInteractionSource() }
ElevatedCard(
modifier = modifier
.clickable(
interactionSource = interactionSource,
indication = null,
onClick = onClick
),
interactionSource = interactionSource,
shape = shape,
containerColor = containerColor.animated,
contentColor = contentColor.animated,
elevation = elevation,
content = content
)
} else {
ElevatedCard(
modifier = modifier,
shape = shape,
containerColor = containerColor.animated,
contentColor = contentColor.animated,
elevation = elevation,
content = content
)
}
}
@Composable
fun ManagerOutlinedCard(
modifier: Modifier = Modifier,
onClick: (() -> Unit)? = null,
shape: Shape = MediumShape,
containerColor: Color = MaterialTheme.colorScheme.surface,
contentColor: Color = contentColorFor(containerColor),
elevation: CardElevation = CardDefaults.outlinedCardElevation(),
content: @Composable ColumnScope.() -> Unit,
) {
if (onClick != null) {
val interactionSource = remember { MutableInteractionSource() }
OutlinedCard(
modifier = modifier
.clickable(
interactionSource = interactionSource,
indication = null,
onClick = onClick
),
interactionSource = interactionSource,
shape = shape,
containerColor = containerColor.animated,
contentColor = contentColor.animated,
elevation = elevation,
content = content
)
} else {
OutlinedCard(
modifier = modifier,
shape = shape,
containerColor = containerColor.animated,
contentColor = contentColor.animated,
elevation = elevation,
content = content
)
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerDialog.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.material3.AlertDialog
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import com.vanced.manager.ui.theme.LargeShape
@Composable
fun ManagerDialog(
title: String,
onDismissRequest: () -> Unit,
confirmButton: @Composable () -> Unit,
modifier: Modifier = Modifier,
dismissButton: @Composable (() -> Unit)? = null,
icon: @Composable (() -> Unit)? = null,
content: @Composable () -> Unit,
) {
AlertDialog(
modifier = modifier,
title = {
ManagerText(
text = title,
textAlign = TextAlign.Center
)
},
text = content,
onDismissRequest = onDismissRequest,
confirmButton = confirmButton,
dismissButton = dismissButton,
icon = icon,
shape = LargeShape,
tonalElevation = 2.dp,
)
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerDropdownMenu.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.core.MutableTransitionState
import androidx.compose.animation.core.animateFloat
import androidx.compose.animation.core.tween
import androidx.compose.animation.core.updateTransition
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.width
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.OutlinedCard
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.scale
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.*
import androidx.compose.ui.window.Popup
import androidx.compose.ui.window.PopupPositionProvider
import androidx.compose.ui.window.PopupProperties
import com.vanced.manager.ui.theme.SmallShape
private const val TransitionDuration = 200
@ExperimentalAnimationApi
@Composable
fun ManagerDropdownMenu(
expanded: Boolean,
onDismissRequest: () -> Unit,
content: @Composable ColumnScope.() -> Unit,
) {
val expandedStates = remember { MutableTransitionState(false) }
expandedStates.targetState = expanded
val transition = updateTransition(expandedStates, "ManagerDropDownMenu")
val alphaAndScale by transition.animateFloat(
transitionSpec = { tween(durationMillis = TransitionDuration) },
label = "AlphaAndScale"
) {
if (it) 1f else 0f
}
if (expandedStates.currentState || expandedStates.targetState) {
val density = LocalDensity.current
val popupPositionProvider = ManagerDropdownMenuPopupPositionProvider(density)
Popup(
popupPositionProvider = popupPositionProvider,
onDismissRequest = onDismissRequest,
properties = PopupProperties(focusable = true)
) {
OutlinedCard(
modifier = Modifier
.width(IntrinsicSize.Max)
.alpha(alphaAndScale)
.scale(alphaAndScale),
elevation = CardDefaults.elevatedCardElevation()
) {
Column(content = content)
}
}
}
}
@Composable
fun ManagerDropdownMenuItem(
title: String,
onClick: () -> Unit
) {
DropdownMenuItem(
onClick = onClick,
modifier = Modifier.clip(SmallShape),
text = {
ManagerText(text = title)
}
)
}
//Kanged from Menu.kt
private data class ManagerDropdownMenuPopupPositionProvider(
val density: Density
) : PopupPositionProvider {
override fun calculatePosition(
anchorBounds: IntRect,
windowSize: IntSize,
layoutDirection: LayoutDirection,
popupContentSize: IntSize
): IntOffset {
val verticalMargin = with(density) { 48.dp.roundToPx() }
//Compute horizontal position.
val toRight = anchorBounds.left
val toLeft = anchorBounds.right - popupContentSize.width
val toDisplayRight = windowSize.width - popupContentSize.width
val toDisplayLeft = 0
val x = if (layoutDirection == LayoutDirection.Ltr) {
sequenceOf(toRight, toLeft, toDisplayRight)
} else {
sequenceOf(toLeft, toRight, toDisplayLeft)
}.firstOrNull {
it >= 0 && it + popupContentSize.width <= windowSize.width
} ?: toLeft
// Compute vertical position.
val toBottom = maxOf(anchorBounds.bottom, verticalMargin)
val toTop = anchorBounds.top - popupContentSize.height
val toCenter = anchorBounds.top - popupContentSize.height / 2
val toDisplayBottom = windowSize.height - popupContentSize.height - verticalMargin
val y = sequenceOf(toBottom, toTop, toCenter, toDisplayBottom).firstOrNull {
it >= verticalMargin && it + popupContentSize.height <= windowSize.height - verticalMargin
} ?: toTop
return IntOffset(x, y)
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerLazyDsl.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.foundation.gestures.FlingBehavior
import androidx.compose.foundation.gestures.ScrollableDefaults
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.*
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.vanced.manager.ui.util.EdgeToEdgeContentPadding
@Composable
fun ManagerLazyColumn(
modifier: Modifier = Modifier,
state: LazyListState = rememberLazyListState(),
contentPadding: PaddingValues = PaddingValues(
start = EdgeToEdgeContentPadding,
end = EdgeToEdgeContentPadding,
bottom = 8.dp
),
reverseLayout: Boolean = false,
verticalArrangement: Arrangement.Vertical =
Arrangement.spacedBy(8.dp, if (!reverseLayout) Alignment.Top else Alignment.Bottom),
horizontalAlignment: Alignment.Horizontal = Alignment.Start,
flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),
content: LazyListScope.() -> Unit
) {
LazyColumn(
modifier = modifier,
state = state,
contentPadding = contentPadding,
reverseLayout = reverseLayout,
verticalArrangement = verticalArrangement,
horizontalAlignment = horizontalAlignment,
flingBehavior = flingBehavior,
content = content
)
}
@Composable
fun ManagerLazyRow(
modifier: Modifier = Modifier,
state: LazyListState = rememberLazyListState(),
contentPadding: PaddingValues = PaddingValues(
start = EdgeToEdgeContentPadding,
end = EdgeToEdgeContentPadding,
),
reverseLayout: Boolean = false,
horizontalArrangement: Arrangement.Horizontal =
Arrangement.spacedBy(8.dp, if (!reverseLayout) Alignment.Start else Alignment.End),
verticalAlignment: Alignment.Vertical = Alignment.Top,
flingBehavior: FlingBehavior = ScrollableDefaults.flingBehavior(),
content: LazyListScope.() -> Unit
) {
LazyRow(
modifier = modifier,
state = state,
contentPadding = contentPadding,
reverseLayout = reverseLayout,
horizontalArrangement = horizontalArrangement,
verticalAlignment = verticalAlignment,
flingBehavior = flingBehavior,
content = content
)
}
inline fun LazyListScope.managerCategory(
crossinline categoryName: @Composable () -> String,
content: LazyListScope.() -> Unit
) {
item {
ManagerText(
modifier = Modifier
.padding(
start = 8.dp,
top = 4.dp
),
text = categoryName(),
textStyle = MaterialTheme.typography.headlineSmall,
)
}
content()
}
inline fun LazyListScope.items(
items: Map,
noinline key: ((key: K, value: V) -> Any)? = null,
crossinline itemContent: @Composable LazyItemScope.(key: K, value: V) -> Unit
) = items(
count = items.size,
key = if (key != null) { index ->
key(items.keys.elementAt(index), items.values.elementAt(index))
} else null
) { index ->
itemContent(items.keys.elementAt(index), items.values.elementAt(index))
}
inline fun LazyListScope.itemsIndexed(
items: Map,
noinline key: ((index: Int, key: K, value: V) -> Any)? = null,
crossinline itemContent: @Composable LazyItemScope.(index: Int, key: K, value: V) -> Unit
) = items(
count = items.size,
key = if (key != null) { index ->
key(index, items.keys.elementAt(index), items.values.elementAt(index))
} else null
) { index ->
itemContent(index, items.keys.elementAt(index), items.values.elementAt(index))
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerListItem.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.foundation.layout.*
import androidx.compose.material.ContentAlpha
import androidx.compose.material.LocalContentAlpha
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal
import com.vanced.manager.ui.util.DefaultContentPaddingVertical
@Composable
fun ManagerListItem(
modifier: Modifier = Modifier,
title: @Composable () -> Unit,
description: @Composable (() -> Unit)? = null,
icon: @Composable (() -> Unit)? = null,
trailing: @Composable (() -> Unit)? = null
) {
Row(
modifier = modifier,
horizontalArrangement = Arrangement.spacedBy(DefaultContentPaddingHorizontal)
) {
if (icon != null) {
Box(
modifier = Modifier.align(Alignment.CenterVertically)
) {
icon()
}
}
Column(
modifier = Modifier
.weight(1f)
.padding(
vertical =
if (description != null) DefaultContentPaddingVertical - 4.dp else DefaultContentPaddingVertical,
)
.align(Alignment.CenterVertically)
) {
CompositionLocalProvider(
LocalTextStyle provides MaterialTheme.typography.titleSmall
) {
title()
}
if (description != null) {
CompositionLocalProvider(
LocalContentAlpha provides ContentAlpha.medium,
LocalTextStyle provides MaterialTheme.typography.bodySmall
) {
description()
}
}
}
if (trailing != null) {
Box(
modifier = Modifier.align(Alignment.CenterVertically),
contentAlignment = Alignment.Center,
) {
trailing()
}
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerNavigator.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.AnimatedContentScope
import androidx.compose.animation.with
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
import androidx.compose.runtime.snapshots.SnapshotStateList
import com.vanced.manager.ui.util.Screen
@Composable
fun rememberManagerNavigationController(
initialScreen: T
) = remember {
ManagerNavigationControllerImpl(initialScreen)
}
interface ManagerNavigationController {
val screens: SnapshotStateList
fun push(item: T)
fun pop(): Boolean
}
class ManagerNavigationControllerImpl(
initialScreen: T
) : ManagerNavigationController {
override val screens: SnapshotStateList =
mutableStateListOf(initialScreen)
override fun push(item: T) {
screens.add(item)
}
override fun pop(): Boolean {
if (screens.size > 1) {
screens.removeLast()
return true
}
return false
}
}
@Composable
fun ManagerNavigator(
navigationController: ManagerNavigationController,
content: @Composable (targetContent: T) -> Unit
) {
val saveableStateHolder = rememberSaveableStateHolder()
val screens = remember { navigationController.screens }
//TODO Animation is not working for some weird reasons
AnimatedContent(
transitionSpec = {
if (targetState.size > initialState.size) {
slideIntoContainer(AnimatedContentScope.SlideDirection.Start) with
slideOutOfContainer(AnimatedContentScope.SlideDirection.End)
} else {
slideIntoContainer(AnimatedContentScope.SlideDirection.End) with
slideOutOfContainer(AnimatedContentScope.SlideDirection.Start)
}
},
targetState = screens
) { targetContents ->
val targetContent = targetContents.last()
saveableStateHolder.SaveableStateProvider(key = targetContent.route) {
content(targetContent)
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerPreference.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.Checkbox
import androidx.compose.material.Switch
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.RadioButton
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.dp
import com.vanced.manager.R
import com.vanced.manager.ui.resource.managerString
import com.vanced.manager.ui.theme.LargeShape
import com.vanced.manager.ui.theme.SmallShape
import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal
@JvmInline
value class EntryText(val text: String)
@JvmInline
value class EntryValue(val value: String)
@Composable
fun ManagerPreference(
preferenceTitle: String,
preferenceDescription: String? = null,
trailing: @Composable () -> Unit = {},
onClick: () -> Unit
) {
ManagerElevatedCard(
shape = LargeShape,
onClick = onClick
) {
ManagerListItem(
modifier = Modifier
.padding(horizontal = DefaultContentPaddingHorizontal),
title = {
ManagerText(text = preferenceTitle)
},
description = if (preferenceDescription != null) {
{
ManagerText(text = preferenceDescription)
}
} else null,
trailing = trailing,
)
}
}
@Composable
fun ManagerSwitchPreference(
preferenceTitle: String,
preferenceDescription: String? = null,
isChecked: Boolean,
onCheckedChange: (isChecked: Boolean) -> Unit
) {
ManagerPreference(
preferenceTitle = preferenceTitle,
preferenceDescription = preferenceDescription,
onClick = {
onCheckedChange(!isChecked)
},
trailing = {
Switch(
checked = isChecked,
onCheckedChange = null
)
}
)
}
@Composable
fun ManagerDialogPreference(
preferenceTitle: String,
preferenceDescription: String? = null,
showDialog: Boolean,
onClick: () -> Unit,
onDismissRequest: () -> Unit,
confirmButton: @Composable () -> Unit,
dismissButton: @Composable () -> Unit = {},
trailing: @Composable () -> Unit = {},
content: @Composable () -> Unit
) {
ManagerPreference(
preferenceTitle = preferenceTitle,
preferenceDescription = preferenceDescription,
trailing = trailing,
onClick = onClick
)
if (showDialog) {
ManagerDialog(
title = preferenceTitle,
onDismissRequest = onDismissRequest,
confirmButton = confirmButton,
dismissButton = dismissButton,
content = content
)
}
}
@Composable
fun ManagerSingleSelectDialogPreference(
preferenceTitle: String,
preferenceDescription: String,
showDialog: Boolean,
selected: EntryValue,
entries: Map,
trailing: @Composable () -> Unit = {},
onClick: () -> Unit,
onDismissRequest: () -> Unit,
onEntrySelect: (EntryValue) -> Unit,
onSave: () -> Unit,
) {
ManagerDialogPreference(
preferenceTitle = preferenceTitle,
preferenceDescription = preferenceDescription,
trailing = trailing,
confirmButton = {
TextButton(onClick = onSave) {
ManagerText(managerString(R.string.dialog_button_save))
}
},
dismissButton = {
TextButton(onClick = onDismissRequest) {
ManagerText(managerString(R.string.dialog_button_cancel))
}
},
onDismissRequest = onDismissRequest,
showDialog = showDialog,
onClick = onClick
) {
LazyColumn(
modifier = Modifier.heightIn(max = 400.dp)
) {
items(entries) { entryText, entryValue ->
ListDialogRadiobuttonItem(
modifier = Modifier.fillMaxWidth(),
text = entryText.text,
selected = selected == entryValue,
onClick = {
onEntrySelect(entryValue)
}
)
}
}
}
}
@Composable
fun ManagerMultiSelectDialogPreference(
preferenceTitle: String,
preferenceDescription: String,
showDialog: Boolean,
selected: List,
entries: Map,
trailing: @Composable () -> Unit = {},
onClick: () -> Unit,
onDismissRequest: () -> Unit,
onEntriesSelect: (List) -> Unit,
onSave: () -> Unit,
) {
ManagerDialogPreference(
preferenceTitle = preferenceTitle,
preferenceDescription = preferenceDescription,
trailing = trailing,
confirmButton = {
TextButton(onClick = onSave) {
ManagerText(managerString(R.string.dialog_button_save))
}
},
dismissButton = {
TextButton(onClick = onDismissRequest) {
ManagerText(managerString(R.string.dialog_button_cancel))
}
},
onDismissRequest = onDismissRequest,
showDialog = showDialog,
onClick = onClick
) {
LazyColumn(
modifier = Modifier.heightIn(max = 400.dp)
) {
items(entries) { entryText, entryValue ->
ListDialogCheckboxItem(
text = entryText.text,
checked = selected.contains(entryValue),
onCheckedChange = { isChecked ->
val mutableSelected = selected.toMutableList()
when (isChecked) {
true -> mutableSelected.add(entryValue)
false -> mutableSelected.remove(entryValue)
}
onEntriesSelect(mutableSelected)
}
)
}
}
}
}
@Composable
private fun ListDialogRadiobuttonItem(
text: String,
selected: Boolean,
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
ListDialogItem(
modifier = modifier,
text = text,
onClick = onClick,
trailing = {
RadioButton(
selected = selected,
onClick = null
)
}
)
}
@Composable
private fun ListDialogCheckboxItem(
text: String,
checked: Boolean,
onCheckedChange: (Boolean) -> Unit,
modifier: Modifier = Modifier
) {
ListDialogItem(
modifier = modifier,
text = text,
onClick = {
onCheckedChange(!checked)
},
trailing = {
Checkbox(
checked = checked,
onCheckedChange = null
)
}
)
}
@Composable
private fun ListDialogItem(
text: String,
onClick: () -> Unit,
trailing: @Composable () -> Unit,
modifier: Modifier = Modifier
) {
Row(
modifier = modifier
.clip(SmallShape)
.clickable(onClick = onClick)
.padding(8.dp),
horizontalArrangement = Arrangement.spacedBy(8.dp),
verticalAlignment = Alignment.CenterVertically
) {
ManagerText(
modifier = Modifier.weight(1f),
text = text,
textStyle = MaterialTheme.typography.titleSmall
)
trailing()
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerProgressIndicator.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.material.ProgressIndicatorDefaults
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import com.vanced.manager.ui.util.animated
@Composable
fun ManagerProgressIndicator(
modifier: Modifier = Modifier,
color: Color = MaterialTheme.colorScheme.primary,
trackColor: Color = MaterialTheme.colorScheme.surfaceVariant,
) {
LinearProgressIndicator(
modifier = modifier,
color = color.animated,
trackColor = trackColor.animated
)
}
@Composable
fun ManagerProgressIndicator(
progress: Float,
modifier: Modifier = Modifier,
color: Color = MaterialTheme.colorScheme.primary,
trackColor: Color = MaterialTheme.colorScheme.surfaceVariant,
) {
val animatedProgress by animateFloatAsState(
targetValue = progress,
animationSpec = ProgressIndicatorDefaults.ProgressAnimationSpec
)
LinearProgressIndicator(
progress = animatedProgress,
modifier = modifier,
color = color.animated,
trackColor = trackColor.animated
)
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerScaffold.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.material3.FabPosition
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.contentColorFor
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import com.vanced.manager.ui.util.animated
@Composable
fun ManagerScaffold(
modifier: Modifier = Modifier,
topBar: @Composable () -> Unit = {},
bottomBar: @Composable () -> Unit = {},
snackbarHost: @Composable () -> Unit = {},
floatingActionButton: @Composable () -> Unit = {},
floatingActionButtonPosition: FabPosition = FabPosition.End,
containerColor: Color = MaterialTheme.colorScheme.background,
contentColor: Color = contentColorFor(containerColor),
content: @Composable (PaddingValues) -> Unit
) {
// //M3 Scaffold doesn't support tonal elevation for Surface
// val absoluteTonalElevation = LocalAbsoluteTonalElevation.current + 1.dp
// CompositionLocalProvider(
// LocalAbsoluteTonalElevation provides absoluteTonalElevation
// ) {
Scaffold(
modifier = modifier,
topBar = topBar,
bottomBar = bottomBar,
snackbarHost = snackbarHost,
floatingActionButton = floatingActionButton,
floatingActionButtonPosition = floatingActionButtonPosition,
containerColor = containerColor.animated,
contentColor = contentColor.animated,
content = content
)
// }
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerSwipeRefresh.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.google.accompanist.swiperefresh.SwipeRefresh
import com.google.accompanist.swiperefresh.SwipeRefreshIndicator
import com.google.accompanist.swiperefresh.SwipeRefreshState
@Composable
fun ManagerSwipeRefresh(
swipeRefreshState: SwipeRefreshState,
onRefresh: () -> Unit,
modifier: Modifier = Modifier,
swipeEnabled: Boolean = true,
refreshTriggerDistance: Dp = 80.dp,
indicatorAlignment: Alignment = Alignment.TopCenter,
indicatorPadding: PaddingValues = PaddingValues(0.dp),
clipIndicatorToPadding: Boolean = true,
content: @Composable () -> Unit,
) {
SwipeRefresh(
modifier = modifier,
state = swipeRefreshState,
onRefresh = onRefresh,
indicator = { state, trigger ->
SwipeRefreshIndicator(
state = state,
refreshTriggerDistance = trigger,
scale = true,
contentColor = MaterialTheme.colorScheme.primary,
backgroundColor = MaterialTheme.colorScheme.surface
)
},
swipeEnabled = swipeEnabled,
refreshTriggerDistance = refreshTriggerDistance,
indicatorAlignment = indicatorAlignment,
indicatorPadding = indicatorPadding,
clipIndicatorToPadding = clipIndicatorToPadding,
content = content
)
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerText.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.material3.LocalTextStyle
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.style.TextAlign
@Composable
fun ManagerText(
text: String,
modifier: Modifier = Modifier,
color: Color = Color.Unspecified,
textStyle: TextStyle = LocalTextStyle.current,
textAlign: TextAlign? = null,
) {
Text(
modifier = modifier,
text = text,
color = color,
style = textStyle,
textAlign = textAlign
)
}
@Composable
fun ManagerText(
text: AnnotatedString,
modifier: Modifier = Modifier,
color: Color = Color.Unspecified,
textStyle: TextStyle = LocalTextStyle.current,
textAlign: TextAlign? = null,
) {
Text(
modifier = modifier,
text = text,
color = color,
style = textStyle,
textAlign = textAlign
)
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/component/ManagerTopAppBar.kt
================================================
package com.vanced.manager.ui.component
import androidx.compose.foundation.layout.RowScope
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@Composable
fun ManagerSmallTopAppBar(
title: @Composable () -> Unit,
modifier: Modifier = Modifier,
navigationIcon: @Composable () -> Unit = {},
actions: @Composable RowScope.() -> Unit = {},
colors: TopAppBarColors = TopAppBarDefaults.smallTopAppBarColors(),
scrollBehavior: TopAppBarScrollBehavior? = null
) {
SmallTopAppBar(
modifier = modifier,
title = title,
actions = actions,
navigationIcon = navigationIcon,
colors = colors,
scrollBehavior = scrollBehavior
)
}
@Composable
fun ManagerCenterAlignedTopAppBar(
title: @Composable () -> Unit,
modifier: Modifier = Modifier,
navigationIcon: @Composable () -> Unit = {},
actions: @Composable RowScope.() -> Unit = {},
colors: TopAppBarColors = TopAppBarDefaults.smallTopAppBarColors(),
scrollBehavior: TopAppBarScrollBehavior? = null
) {
CenterAlignedTopAppBar(
modifier = modifier,
title = title,
actions = actions,
navigationIcon = navigationIcon,
colors = colors,
scrollBehavior = scrollBehavior
)
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/resource/ManagerString.kt
================================================
package com.vanced.manager.ui.resource
import androidx.annotation.StringRes
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import com.vanced.manager.R
@Composable
fun managerString(
@StringRes stringId: Int?
) = stringResource(id = stringId ?: R.string.dummy_placeholder_text)
@Composable
fun managerString(
@StringRes stringId: Int?,
vararg formatArgs: Any
) = stringResource(id = stringId ?: R.string.dummy_placeholder_text, *formatArgs)
================================================
FILE: app/src/main/java/com/vanced/manager/ui/screen/AboutScreen.kt
================================================
package com.vanced.manager.ui.screen
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.ArrowBackIosNew
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.unit.dp
import com.vanced.manager.BuildConfig
import com.vanced.manager.R
import com.vanced.manager.ui.component.*
import com.vanced.manager.ui.resource.managerString
import com.vanced.manager.ui.theme.LargeShape
import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal
import com.vanced.manager.ui.util.DefaultContentPaddingVertical
import com.vanced.manager.ui.util.Screen
import com.vanced.manager.ui.widget.LinkCard
data class Person(
val name: String,
val contribution: String
)
data class Source(
@StringRes val nameId: Int,
@DrawableRes val iconId: Int,
val link: String
)
private val vancedTeam = listOf(
Person(
name = "xfileFIN",
contribution = "Mods, Theming, Support"
),
Person(
name = "Laura",
contribution = "Theming, Support"
),
Person(
name = "ZaneZam",
contribution = "Publishing, Support"
),
Person(
name = "KevinX8",
contribution = "Overlord, Support"
),
Person(
name = "Xinto",
contribution = "Vanced Manager"
)
)
private val otherContributors = listOf(
Person(
name = "bhatVikrant",
contribution = "Website"
),
Person(
name = "bawm",
contribution = "Sponsorblock"
),
Person(
name = "cane",
contribution = "Sponsorblock"
),
Person(
name = "Koopah",
contribution = "Vanced Manager root installer"
),
Person(
name = "Logan",
contribution = "Vanced Manager UI"
),
Person(
name = "HaliksaR",
contribution = "Vanced Manager Refactoring, UI"
),
)
private val sources = listOf(
Source(
nameId = R.string.about_sources_source_code,
iconId = R.drawable.ic_github,
link = "https://github.com/YTVanced/VancedManager"
),
Source(
nameId = R.string.about_sources_license,
iconId = R.drawable.ic_round_assignment_24,
link = "https://raw.githubusercontent.com/YTVanced/VancedManager/dev/LICENSE"
)
)
@ExperimentalMaterial3Api
@Composable
fun AboutScreen(
onToolbarBackButtonClick: () -> Unit
) {
ManagerScaffold(
topBar = {
ManagerSmallTopAppBar(
title = {
ManagerText(managerString(Screen.About.displayName))
},
navigationIcon = {
IconButton(onClick = onToolbarBackButtonClick) {
Icon(
imageVector = Icons.Rounded.ArrowBackIosNew,
contentDescription = "Back"
)
}
}
)
}
) { paddingValues ->
ManagerLazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues),
) {
item {
ManagerElevatedCard(
modifier = Modifier.fillMaxWidth(),
shape = LargeShape
) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(
vertical = DefaultContentPaddingVertical,
horizontal = DefaultContentPaddingHorizontal
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(4.dp)
) {
ManagerText(
modifier = Modifier,
text = managerString(R.string.app_name),
textStyle = MaterialTheme.typography.headlineSmall
)
ManagerText(
modifier = Modifier,
text = buildAnnotatedString {
append(BuildConfig.VERSION_NAME)
val compose = "@Compose"
val startIndex = BuildConfig.VERSION_NAME.indexOf(compose)
addStyle(
style = SpanStyle(Color(0xFFBBB529)),
start = startIndex,
end = startIndex + compose.length
)
},
textStyle = MaterialTheme.typography.titleSmall
)
}
}
}
managerCategory(categoryName = {
managerString(R.string.about_category_credits_vanced_team)
}) {
items(vancedTeam) { person ->
CreditCard(
modifier = Modifier.fillMaxWidth(),
personName = person.name,
personContribution = person.contribution
)
}
}
managerCategory(categoryName = {
managerString(R.string.about_category_credits_other)
}) {
items(otherContributors) { person ->
CreditCard(
modifier = Modifier.fillMaxWidth(),
personName = person.name,
personContribution = person.contribution
)
}
}
managerCategory(categoryName = {
managerString(R.string.about_category_sources)
}) {
item {
ManagerLazyRow(modifier = Modifier.fillMaxWidth()) {
items(sources) { source ->
LinkCard(
text = managerString(source.nameId),
icon = painterResource(source.iconId),
url = source.link
)
}
}
}
}
}
}
}
@Composable
private fun CreditCard(
personName: String,
personContribution: String,
modifier: Modifier = Modifier,
) {
ManagerElevatedCard(
modifier = modifier,
shape = LargeShape
) {
ManagerListItem(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = DefaultContentPaddingHorizontal),
title = {
ManagerText(
text = personName,
textStyle = MaterialTheme.typography.titleSmall
)
},
description = {
ManagerText(
text = personContribution,
textStyle = MaterialTheme.typography.bodySmall
)
}
)
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/screen/ConfigurationScreen.kt
================================================
package com.vanced.manager.ui.screen
import androidx.compose.animation.*
import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.ArrowBackIosNew
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import com.vanced.manager.R
import com.vanced.manager.domain.model.InstallationOption
import com.vanced.manager.ui.component.*
import com.vanced.manager.ui.resource.managerString
import com.vanced.manager.ui.theme.LargeShape
import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal
import com.vanced.manager.ui.util.DefaultContentPaddingVertical
import com.vanced.manager.ui.viewmodel.ConfigurationViewModel
import org.koin.androidx.compose.getViewModel
private const val enterDuration = 300
private const val exitDuration = 250
@Composable
fun ConfigurationScreen(
installationOptions: List,
onToolbarBackButtonClick: () -> Unit,
onFinishClick: () -> Unit,
) {
val viewModel: ConfigurationViewModel = getViewModel()
Scaffold(
topBar = {
ManagerSmallTopAppBar(
title = {
ManagerText(managerString(R.string.toolbar_installation_preferences))
},
navigationIcon = {
IconButton(
onClick = {
onToolbarBackButtonClick()
viewModel.reset()
}
) {
Icon(
imageVector = Icons.Rounded.ArrowBackIosNew,
contentDescription = "Back"
)
}
}
)
},
bottomBar = {
ConfigurationBottomBar(
modifier = Modifier
.padding(
horizontal = DefaultContentPaddingHorizontal,
vertical = DefaultContentPaddingVertical
),
lastIndex = installationOptions.lastIndex,
currentIndex = viewModel.currentIndex,
onBackClick = {
viewModel.back()
},
onNextClick = {
viewModel.next()
},
onFinishClick = {
onFinishClick()
viewModel.reset()
}
)
}
) { paddingValues ->
ConfigurationBody(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues),
currentIndex = viewModel.currentIndex,
installationOptions = installationOptions
)
}
}
@Composable
private fun ConfigurationBody(
currentIndex: Int,
installationOptions: List,
modifier: Modifier = Modifier
) {
AnimatedContent(
modifier = modifier,
targetState = currentIndex,
transitionSpec = {
slideAnimationSpec(
if (targetState > initialState) {
AnimatedContentScope.SlideDirection.Start
} else {
AnimatedContentScope.SlideDirection.End
}
)
}
) { optionIndex ->
val installationOption = installationOptions[optionIndex]
ManagerLazyColumn {
managerCategory(categoryName = {
managerString(installationOption.titleId)
}) {
when (installationOption) {
is InstallationOption.SingleSelect -> {
items(installationOption.items) { item ->
val preference = installationOption.getOption()
ConfigurationItem(
modifier = Modifier
.fillMaxWidth(),
text = item.displayText(item.key),
onClick = {
installationOption.setOption(item.key)
},
trailing = {
RadioButton(
selected = preference == item.key,
onClick = null
)
}
)
}
}
is InstallationOption.MultiSelect -> {
items(installationOption.items) { item ->
val preference = installationOption.getOption()
ConfigurationItem(
modifier = Modifier
.fillMaxWidth(),
text = item.displayText(item.key),
onClick = {
if (preference.contains(item.key)) {
installationOption.removeOption(item.key)
} else {
installationOption.addOption(item.key)
}
},
trailing = {
Checkbox(
checked = preference.contains(item.key),
onCheckedChange = null
)
}
)
}
}
}
}
}
}
}
@Composable
private fun ConfigurationBottomBar(
currentIndex: Int,
lastIndex: Int,
onBackClick: () -> Unit,
onNextClick: () -> Unit,
onFinishClick: () -> Unit,
modifier: Modifier = Modifier,
) {
Row(modifier = modifier) {
AnimatedVisibility(
modifier = Modifier
.wrapContentWidth(Alignment.Start)
.weight(1f),
visible = currentIndex > 0,
enter = fadeIn(tween(enterDuration)) +
expandHorizontally(tween(enterDuration)) +
scaleIn(tween(enterDuration)),
exit = fadeOut(tween(exitDuration)) +
shrinkHorizontally(tween(exitDuration)) +
scaleOut(tween(exitDuration)),
) {
TextButton(onClick = onBackClick) {
ManagerText(text = "Back")
}
}
AnimatedContent(
modifier = Modifier
.wrapContentWidth(Alignment.End)
.weight(1f),
targetState = currentIndex == lastIndex,
transitionSpec = {
slideAnimationSpec(
if (initialState && !targetState) {
AnimatedContentScope.SlideDirection.Up
} else {
AnimatedContentScope.SlideDirection.Down
}
)
}
) { isLastIndex ->
if (isLastIndex) {
ElevatedButton(onClick = onFinishClick) {
ManagerText(text = "Finish")
}
} else {
OutlinedButton(onClick = onNextClick) {
ManagerText(text = "Next")
}
}
}
}
}
@Composable
private fun ConfigurationItem(
text: String,
onClick: () -> Unit,
trailing: @Composable () -> Unit,
modifier: Modifier = Modifier,
) {
ManagerElevatedCard(
modifier = modifier,
shape = LargeShape,
onClick = onClick
) {
ManagerListItem(
modifier = Modifier.padding(
horizontal = DefaultContentPaddingHorizontal
),
title = {
ManagerText(
text = text,
textStyle = MaterialTheme.typography.titleSmall
)
},
trailing = trailing,
)
}
}
@ExperimentalAnimationApi
private fun AnimatedContentScope.slideAnimationSpec(
slideDirection: AnimatedContentScope.SlideDirection
) = slideIntoContainer(
towards = slideDirection,
animationSpec = tween(enterDuration)
) + fadeIn(
animationSpec = tween(enterDuration)
) with slideOutOfContainer(
towards = slideDirection,
animationSpec = tween(exitDuration)
) + fadeOut(
animationSpec = tween(exitDuration)
)
================================================
FILE: app/src/main/java/com/vanced/manager/ui/screen/HomeScreen.kt
================================================
package com.vanced.manager.ui.screen
import androidx.annotation.DrawableRes
import androidx.compose.animation.*
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyListScope
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.MoreVert
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.TextButton
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.google.accompanist.swiperefresh.rememberSwipeRefreshState
import com.vanced.manager.R
import com.vanced.manager.domain.model.App
import com.vanced.manager.network.util.*
import com.vanced.manager.ui.component.*
import com.vanced.manager.ui.resource.managerString
import com.vanced.manager.ui.util.Screen
import com.vanced.manager.ui.viewmodel.ManagerState
import com.vanced.manager.ui.widget.AppCard
import com.vanced.manager.ui.widget.AppCardPlaceholder
import com.vanced.manager.ui.widget.LinkCard
@Composable
fun HomeScreen(
managerState: ManagerState,
onRefresh: () -> Unit,
onToolbarScreenSelected: (Screen) -> Unit,
onAppDownloadClick: (App) -> Unit,
onAppUninstallClick: (App) -> Unit,
onAppLaunchClick: (App) -> Unit,
) {
val refreshState =
rememberSwipeRefreshState(isRefreshing = managerState.isFetching)
var menuExpanded by remember { mutableStateOf(false) }
val dropdownScreens = remember { listOf(Screen.Settings, Screen.About) }
ManagerScaffold(
topBar = {
HomeScreenTopBar(
modifier = Modifier,
menuExpanded = menuExpanded,
dropdownScreens = dropdownScreens,
onActionClick = {
menuExpanded = true
},
onDropdownItemClick = onToolbarScreenSelected,
onDropdownDismissRequest = {
menuExpanded = false
})
}
) { paddingValues ->
ManagerSwipeRefresh(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues),
swipeRefreshState = refreshState,
onRefresh = onRefresh
) {
AnimatedContent(
modifier = Modifier.fillMaxSize(),
targetState = managerState,
transitionSpec = {
scaleIn(initialScale = 0.9f) + fadeIn() with
scaleOut(targetScale = 0.9f) + fadeOut()
}
) { animatedAppState ->
when (animatedAppState) {
is ManagerState.Fetching -> {
HomeScreenLoading(
modifier = Modifier.fillMaxSize(),
appsCount = animatedAppState.placeholderAppsCount
)
}
is ManagerState.Success -> {
HomeScreenLoaded(
modifier = Modifier.fillMaxSize(),
apps = animatedAppState.apps,
onAppDownloadClick = onAppDownloadClick,
onAppUninstallClick = onAppUninstallClick,
onAppLaunchClick = onAppLaunchClick
)
}
is ManagerState.Error -> {
//TODO
}
}
}
}
}
}
@Composable
private fun HomeScreenTopBar(
menuExpanded: Boolean,
dropdownScreens: List,
onActionClick: () -> Unit,
onDropdownItemClick: (Screen) -> Unit,
onDropdownDismissRequest: () -> Unit,
modifier: Modifier = Modifier
) {
ManagerCenterAlignedTopAppBar(
modifier = modifier,
title = {
ManagerText(managerString(Screen.Home.displayName))
},
actions = {
IconButton(onClick = onActionClick) {
Icon(
Icons.Rounded.MoreVert,
contentDescription = "Navigation"
)
}
ManagerDropdownMenu(
expanded = menuExpanded,
onDismissRequest = onDropdownDismissRequest
) {
for (dropdownScreen in dropdownScreens) {
ManagerDropdownMenuItem(
title = managerString(dropdownScreen.displayName),
onClick = {
onDropdownItemClick(dropdownScreen)
}
)
}
}
}
)
}
@Composable
private fun HomeScreenLoaded(
modifier: Modifier = Modifier,
apps: List,
onAppDownloadClick: (App) -> Unit,
onAppUninstallClick: (App) -> Unit,
onAppLaunchClick: (App) -> Unit,
) {
HomeScreenBody(modifier = modifier) {
managerCategory(categoryName = {
managerString(R.string.home_category_apps)
}) {
items(apps) { app ->
val appIcon = painterResource(id = app.iconResId)
var showAppInfoDialog by remember { mutableStateOf(false) }
AppCard(
modifier = Modifier.fillMaxWidth(),
appName = app.name,
appIcon = appIcon,
appInstalledVersion = app.installedVersionName,
appRemoteVersion = app.remoteVersionName,
appState = app.state,
onAppDownloadClick = {
onAppDownloadClick(app)
},
onAppUninstallClick = {
onAppUninstallClick(app)
},
onAppLaunchClick = {
onAppLaunchClick(app)
},
onAppInfoClick = {
showAppInfoDialog = true
}
)
if (showAppInfoDialog) {
ManagerDialog(
title = managerString(
R.string.app_info_title,
app.name
),
onDismissRequest = { showAppInfoDialog = false },
confirmButton = {
TextButton(onClick = {
showAppInfoDialog = false
}) {
ManagerText(text = managerString(R.string.dialog_button_close))
}
},
) {
ManagerText(
modifier = Modifier.padding(top = 4.dp),
text = app.changelog,
)
}
}
}
}
}
}
@Composable
private fun HomeScreenLoading(
modifier: Modifier = Modifier,
appsCount: Int,
) {
HomeScreenBody(modifier = modifier) {
managerCategory(categoryName = {
managerString(R.string.home_category_apps)
}) {
items(appsCount) {
AppCardPlaceholder(
modifier = Modifier.fillMaxWidth()
)
}
}
}
}
@Composable
private inline fun HomeScreenBody(
modifier: Modifier = Modifier,
crossinline appsCategory: LazyListScope.() -> Unit,
) {
ManagerLazyColumn(modifier = modifier) {
appsCategory()
managerCategory(categoryName = {
managerString(R.string.home_category_support_us)
}) {
item {
ManagerLazyRow(modifier = Modifier.fillMaxWidth()) {
items(sponsors) { sponsor ->
LinkCard(
text = sponsor.title,
icon = painterResource(sponsor.icon),
url = sponsor.link
)
}
}
}
}
managerCategory(categoryName = {
managerString(R.string.home_category_social_media)
}) {
item {
ManagerLazyRow(modifier = Modifier.fillMaxWidth()) {
items(socialMedia) { socialMedia ->
LinkCard(
text = socialMedia.title,
icon = painterResource(socialMedia.icon),
url = socialMedia.link
)
}
}
}
}
}
}
data class Link(
val title: String,
val link: String,
@DrawableRes val icon: Int
)
val sponsors = listOf(
Link(
title = "Brave",
link = URL_SPONSOR_BRAVE,
icon = R.drawable.ic_brave
),
Link(
title = "Adguard",
link = URL_SPONSOR_ADGUARD,
icon = R.drawable.ic_adguard
)
)
val socialMedia = listOf(
Link(
title = "Instagram",
link = URL_MEDIA_INSTAGRAM,
icon = R.drawable.ic_instagram
),
Link(
title = "YouTube",
link = URL_MEDIA_YOUTUBE,
icon = R.drawable.ic_youtube
),
Link(
title = "GitHub",
link = URL_MEDIA_GITHUB,
icon = R.drawable.ic_github
),
Link(
title = "Website",
link = URL_MEDIA_WEBSITE,
icon = R.drawable.ic_website
),
Link(
title = "Telegram",
link = URL_MEDIA_TELEGRAM,
icon = R.drawable.ic_telegram
),
Link(
title = "Twitter",
link = URL_MEDIA_TWITTER,
icon = R.drawable.ic_twitter
),
Link(
title = "Discord",
link = URL_MEDIA_DISCORD,
icon = R.drawable.ic_discord
),
Link(
title = "Reddit",
link = URL_MEDIA_REDDIT,
icon = R.drawable.ic_reddit
),
)
================================================
FILE: app/src/main/java/com/vanced/manager/ui/screen/InstallScreen.kt
================================================
package com.vanced.manager.ui.screen
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.items
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.ArrowDropDown
import androidx.compose.material.icons.rounded.Done
import androidx.compose.material3.ExtendedFloatingActionButton
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.rotate
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.sp
import com.vanced.manager.R
import com.vanced.manager.ui.component.*
import com.vanced.manager.ui.resource.managerString
import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal
import com.vanced.manager.ui.viewmodel.InstallViewModel
@Composable
fun InstallScreen(
appName: String,
appVersions: List?,
viewModel: InstallViewModel,
onFinishClick: () -> Unit
) {
var startedProcess by rememberSaveable { mutableStateOf(false) }
val logs = viewModel.logs
val status = viewModel.status
// I don't know why, I don't know how,
// but it works as intended
LaunchedEffect(startedProcess) {
if (!startedProcess) {
startedProcess = true
viewModel.startAppProcess(appName, appVersions)
}
}
ManagerScaffold(
topBar = {
Column {
ManagerSmallTopAppBar(
title = {
ManagerText(managerString(R.string.toolbar_install))
},
)
when (status) {
is InstallViewModel.Status.Progress -> {
ManagerProgressIndicator(status.progress)
}
is InstallViewModel.Status.Installing -> {
ManagerProgressIndicator()
}
else -> {}
}
}
},
floatingActionButton = {
if (status is InstallViewModel.Status.Installed) {
ExtendedFloatingActionButton(
text = { ManagerText("Finish") },
icon = {
Icon(Icons.Rounded.Done, null)
},
onClick = onFinishClick,
)
}
}
) { paddingValues ->
ManagerLazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues),
) {
items(logs) { log ->
when (log) {
is InstallViewModel.Log.Success -> {
ManagerText(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = DefaultContentPaddingHorizontal),
text = log.successText,
textStyle = TextStyle(
fontWeight = FontWeight.Bold,
fontSize = 14.sp,
color = MaterialTheme.colorScheme.tertiary
),
)
}
is InstallViewModel.Log.Info -> {
ManagerText(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = DefaultContentPaddingHorizontal),
text = log.infoText,
textStyle = TextStyle(
fontWeight = FontWeight.SemiBold,
fontSize = 14.sp,
color = MaterialTheme.colorScheme.onSurface
),
)
}
is InstallViewModel.Log.Error -> {
var visible by remember { mutableStateOf(false) }
val iconRotation by animateFloatAsState(if (visible) -90f else 0f)
Column(
modifier = Modifier
.fillMaxWidth()
.clickable {
visible = !visible
}
.padding(horizontal = DefaultContentPaddingHorizontal),
) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically
) {
ManagerText(
text = buildAnnotatedString {
withStyle(SpanStyle(color = MaterialTheme.colorScheme.error)) {
append(log.displayText)
}
},
textStyle = TextStyle(
fontWeight = FontWeight.Bold,
fontSize = 14.sp,
),
)
Icon(
modifier = Modifier.rotate(iconRotation),
imageVector = Icons.Rounded.ArrowDropDown,
contentDescription = "expand",
tint = MaterialTheme.colorScheme.error
)
}
AnimatedVisibility(visible) {
ManagerText(
text = log.stacktrace,
textStyle = TextStyle(
fontWeight = FontWeight.Bold,
fontSize = 14.sp,
color = MaterialTheme.colorScheme.error.copy(alpha = 0.7f)
),
)
}
}
}
}
}
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/screen/SettingsScreen.kt
================================================
package com.vanced.manager.ui.screen
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.ArrowBackIosNew
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import com.vanced.manager.R
import com.vanced.manager.repository.ManagerMode
import com.vanced.manager.repository.ManagerTheme
import com.vanced.manager.ui.component.*
import com.vanced.manager.ui.resource.managerString
import com.vanced.manager.ui.util.Screen
import com.vanced.manager.ui.viewmodel.SettingsViewModel
import com.vanced.manager.util.isMagiskInstalled
import org.koin.androidx.compose.viewModel
@ExperimentalMaterial3Api
@Composable
fun SettingsScreen(
onToolbarBackButtonClick: () -> Unit,
onThemeChange: (ManagerTheme) -> Unit,
) {
val viewModel: SettingsViewModel by viewModel()
ManagerScaffold(
modifier = Modifier.fillMaxSize(),
topBar = {
ManagerSmallTopAppBar(
title = {
ManagerText(managerString(Screen.Settings.displayName))
},
navigationIcon = {
IconButton(onClick = onToolbarBackButtonClick) {
Icon(
imageVector = Icons.Rounded.ArrowBackIosNew,
contentDescription = "Back"
)
}
}
)
}
) { paddingValues ->
ManagerLazyColumn(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues),
) {
managerCategory(categoryName = {
managerString(R.string.settings_category_behaviour)
}) {
item {
ManagerSwitchPreference(
preferenceTitle = stringResource(id = R.string.settings_preference_use_custom_tabs_title),
preferenceDescription = stringResource(id = R.string.settings_preference_use_custom_tabs_summary),
isChecked = viewModel.managerUseCustomTabs,
onCheckedChange = {
viewModel.saveManagerUseCustomTabs(it)
}
)
}
item {
var showDialog by remember { mutableStateOf(false) }
var selectedMode by remember { mutableStateOf(EntryValue(viewModel.managerMode.value)) }
ManagerSingleSelectDialogPreference(
preferenceTitle = managerString(
stringId = R.string.settings_preference_variant_title
),
preferenceDescription = selectedMode.value,
showDialog = showDialog,
selected = selectedMode,
entries = mapOf(
EntryText("nonroot") to EntryValue("nonroot"),
EntryText("root") to EntryValue("root"),
),
onClick = {
showDialog = true
},
onDismissRequest = {
showDialog = false
selectedMode = EntryValue(viewModel.managerMode.value)
},
onEntrySelect = {
if (it.value == "root" && !isMagiskInstalled)
return@ManagerSingleSelectDialogPreference
selectedMode = it
},
onSave = {
viewModel.saveManagerMode(ManagerMode.fromValue(selectedMode.value))
showDialog = false
}
)
}
}
managerCategory(categoryName = {
managerString(R.string.settings_category_appearance)
}) {
item {
var showDialog by remember { mutableStateOf(false) }
var selectedTheme by remember { mutableStateOf(EntryValue(viewModel.managerTheme.value)) }
ManagerSingleSelectDialogPreference(
preferenceTitle = managerString(stringId = R.string.settings_preference_theme_title),
preferenceDescription = managerString(
stringId = viewModel.getThemeStringId(
ManagerTheme.fromValue(selectedTheme.value)
)
),
showDialog = showDialog,
selected = selectedTheme,
entries = mapOf(
EntryText(managerString(viewModel.getThemeStringId(ManagerTheme.LIGHT)))
to EntryValue(ManagerTheme.LIGHT.value),
EntryText(managerString(viewModel.getThemeStringId(ManagerTheme.DARK)))
to EntryValue(ManagerTheme.DARK.value),
EntryText(managerString(viewModel.getThemeStringId(ManagerTheme.SYSTEM_DEFAULT)))
to EntryValue(ManagerTheme.SYSTEM_DEFAULT.value),
),
onClick = {
showDialog = true
},
onDismissRequest = {
showDialog = false
selectedTheme = EntryValue(viewModel.managerTheme.value)
},
onEntrySelect = {
selectedTheme = it
},
onSave = {
showDialog = false
viewModel.saveManagerTheme(ManagerTheme.fromValue(selectedTheme.value))
onThemeChange(ManagerTheme.fromValue(selectedTheme.value))
}
)
}
}
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/theme/Color.kt
================================================
package com.vanced.manager.ui.theme
import androidx.compose.ui.graphics.Color
val primaryColor = Color(defAccentColor)
val primaryColorVariant = primaryColor.copy(alpha = 0.25f)
val darkSurface = Color.Black
val darkOnSurface = Color(0xFFD5D5D5)
val lightSurface = Color.White
val lightOnSurface = Color.Black
val md_theme_light_primary = Color(0xFF0054d9)
val md_theme_light_onPrimary = Color(0xFFffffff)
val md_theme_light_primaryContainer = Color(0xFFdae2ff)
val md_theme_light_onPrimaryContainer = Color(0xFF00174a)
val md_theme_light_secondary = Color(0xFFc00020)
val md_theme_light_onSecondary = Color(0xFFffffff)
val md_theme_light_secondaryContainer = Color(0xFFffdad6)
val md_theme_light_onSecondaryContainer = Color(0xFF410005)
val md_theme_light_tertiary = Color(0xFF943896)
val md_theme_light_onTertiary = Color(0xFFffffff)
val md_theme_light_tertiaryContainer = Color(0xFFffd6fa)
val md_theme_light_onTertiaryContainer = Color(0xFF37003c)
val md_theme_light_error = Color(0xFFba1b1b)
val md_theme_light_errorContainer = Color(0xFFffdad4)
val md_theme_light_onError = Color(0xFFffffff)
val md_theme_light_onErrorContainer = Color(0xFF410001)
val md_theme_light_background = Color(0xFFfefbff)
val md_theme_light_onBackground = Color(0xFF1b1b1e)
val md_theme_light_surface = Color(0xFFfefbff)
val md_theme_light_onSurface = Color(0xFF1b1b1e)
val md_theme_light_surfaceVariant = Color(0xFFe2e2ec)
val md_theme_light_onSurfaceVariant = Color(0xFF44464e)
val md_theme_light_outline = Color(0xFF75767f)
val md_theme_light_inverseOnSurface = Color(0xFFf2f0f5)
val md_theme_light_inverseSurface = Color(0xFF303033)
val md_theme_dark_primary = Color(0xFFb1c5ff)
val md_theme_dark_onPrimary = Color(0xFF002a77)
val md_theme_dark_primaryContainer = Color(0xFF003ea6)
val md_theme_dark_onPrimaryContainer = Color(0xFFdae2ff)
val md_theme_dark_secondary = Color(0xFFffb3af)
val md_theme_dark_onSecondary = Color(0xFF69000c)
val md_theme_dark_secondaryContainer = Color(0xFF920016)
val md_theme_dark_onSecondaryContainer = Color(0xFFffdad6)
val md_theme_dark_tertiary = Color(0xFFffa9fc)
val md_theme_dark_onTertiary = Color(0xFF5a0061)
val md_theme_dark_tertiaryContainer = Color(0xFF781c7c)
val md_theme_dark_onTertiaryContainer = Color(0xFFffd6fa)
val md_theme_dark_error = Color(0xFFffb4a9)
val md_theme_dark_errorContainer = Color(0xFF930006)
val md_theme_dark_onError = Color(0xFF680003)
val md_theme_dark_onErrorContainer = Color(0xFFffdad4)
val md_theme_dark_background = Color(0xFF1b1b1e)
val md_theme_dark_onBackground = Color(0xFFe3e1e6)
val md_theme_dark_surface = Color(0xFF1b1b1e)
val md_theme_dark_onSurface = Color(0xFFe3e1e6)
val md_theme_dark_surfaceVariant = Color(0xFF44464e)
val md_theme_dark_onSurfaceVariant = Color(0xFFc6c6d0)
val md_theme_dark_outline = Color(0xFF8f909a)
val md_theme_dark_inverseOnSurface = Color(0xFF1b1b1e)
val md_theme_dark_inverseSurface = Color(0xFFe3e1e6)
val seed = Color(0xFF2e73ff)
val error = Color(0xFFba1b1b)
================================================
FILE: app/src/main/java/com/vanced/manager/ui/theme/Shape.kt
================================================
package com.vanced.manager.ui.theme
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.ui.unit.dp
//TODO M3 doesn't support Shapes yet
val SmallShape = RoundedCornerShape(8.dp)
val MediumShape = RoundedCornerShape(12.dp)
val LargeShape = RoundedCornerShape(16.dp)
================================================
FILE: app/src/main/java/com/vanced/manager/ui/theme/Theme.kt
================================================
package com.vanced.manager.ui.theme
import android.os.Build
import androidx.compose.foundation.gestures.LocalOverScrollConfiguration
import androidx.compose.foundation.gestures.OverScrollConfiguration
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.platform.LocalContext
const val defAccentColor = 0xFF0477E1
private val LightThemeColors = lightColorScheme(
primary = md_theme_light_primary,
onPrimary = md_theme_light_onPrimary,
primaryContainer = md_theme_light_primaryContainer,
onPrimaryContainer = md_theme_light_onPrimaryContainer,
secondary = md_theme_light_secondary,
onSecondary = md_theme_light_onSecondary,
secondaryContainer = md_theme_light_secondaryContainer,
onSecondaryContainer = md_theme_light_onSecondaryContainer,
tertiary = md_theme_light_tertiary,
onTertiary = md_theme_light_onTertiary,
tertiaryContainer = md_theme_light_tertiaryContainer,
onTertiaryContainer = md_theme_light_onTertiaryContainer,
error = md_theme_light_error,
errorContainer = md_theme_light_errorContainer,
onError = md_theme_light_onError,
onErrorContainer = md_theme_light_onErrorContainer,
background = md_theme_light_background,
onBackground = md_theme_light_onBackground,
surface = md_theme_light_surface,
onSurface = md_theme_light_onSurface,
surfaceVariant = md_theme_light_surfaceVariant,
onSurfaceVariant = md_theme_light_onSurfaceVariant,
outline = md_theme_light_outline,
inverseOnSurface = md_theme_light_inverseOnSurface,
inverseSurface = md_theme_light_inverseSurface,
)
private val DarkThemeColors = darkColorScheme(
primary = md_theme_dark_primary,
onPrimary = md_theme_dark_onPrimary,
primaryContainer = md_theme_dark_primaryContainer,
onPrimaryContainer = md_theme_dark_onPrimaryContainer,
secondary = md_theme_dark_secondary,
onSecondary = md_theme_dark_onSecondary,
secondaryContainer = md_theme_dark_secondaryContainer,
onSecondaryContainer = md_theme_dark_onSecondaryContainer,
tertiary = md_theme_dark_tertiary,
onTertiary = md_theme_dark_onTertiary,
tertiaryContainer = md_theme_dark_tertiaryContainer,
onTertiaryContainer = md_theme_dark_onTertiaryContainer,
error = md_theme_dark_error,
errorContainer = md_theme_dark_errorContainer,
onError = md_theme_dark_onError,
onErrorContainer = md_theme_dark_onErrorContainer,
background = md_theme_dark_background,
onBackground = md_theme_dark_onBackground,
surface = md_theme_dark_surface,
onSurface = md_theme_dark_onSurface,
surfaceVariant = md_theme_dark_surfaceVariant,
onSurfaceVariant = md_theme_dark_onSurfaceVariant,
outline = md_theme_dark_outline,
inverseOnSurface = md_theme_dark_inverseOnSurface,
inverseSurface = md_theme_dark_inverseSurface,
)
@Composable
inline fun apiDependantColorScheme(
dynamic: () -> ColorScheme,
static: () -> ColorScheme
): ColorScheme {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
dynamic()
} else {
static()
}
}
@Composable
fun ManagerTheme(
darkMode: Boolean = isSystemInDarkTheme(),
content: @Composable () -> Unit
) {
val context = LocalContext.current
val colorScheme =
if (darkMode) {
apiDependantColorScheme(
dynamic = { dynamicDarkColorScheme(context) },
static = { DarkThemeColors }
)
} else {
apiDependantColorScheme(
dynamic = { dynamicLightColorScheme(context) },
static = { LightThemeColors }
)
}
MaterialTheme(
colorScheme = colorScheme,
typography = ManagerTypography,
) {
CompositionLocalProvider(
LocalOverScrollConfiguration provides OverScrollConfiguration(
forceShowAlways = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
)
) {
content()
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/theme/Type.kt
================================================
package com.vanced.manager.ui.theme
import androidx.compose.material3.Typography
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.sp
import com.vanced.manager.R
private val light = Font(R.font.inter_light, FontWeight.Light)
private val regular = Font(R.font.inter_regular, FontWeight.Normal)
private val medium = Font(R.font.inter_medium, FontWeight.Medium)
private val semibold = Font(R.font.inter_semibold, FontWeight.SemiBold)
private val bold = Font(R.font.inter_bold, FontWeight.Bold)
private val InterFontFamily = FontFamily(light, regular, medium, semibold, bold)
val ManagerTypography = Typography(
displayLarge = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.Normal,
fontSize = 57.sp,
lineHeight = 64.sp,
letterSpacing = (-0.25).sp,
),
displayMedium = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.Normal,
fontSize = 45.sp,
lineHeight = 52.sp,
letterSpacing = 0.sp,
),
displaySmall = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.Normal,
fontSize = 36.sp,
lineHeight = 44.sp,
letterSpacing = 0.sp,
),
headlineLarge = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.Bold,
fontSize = 32.sp,
lineHeight = 40.sp,
letterSpacing = 0.sp,
),
headlineMedium = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.Bold,
fontSize = 28.sp,
lineHeight = 36.sp,
letterSpacing = 0.sp,
),
headlineSmall = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.SemiBold,
fontSize = 24.sp,
lineHeight = 32.sp,
letterSpacing = 0.sp,
),
titleLarge = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.SemiBold,
fontSize = 22.sp,
lineHeight = 28.sp,
letterSpacing = 0.sp,
),
titleMedium = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.SemiBold,
fontSize = 18.sp,
lineHeight = 24.sp,
letterSpacing = 0.1.sp,
),
titleSmall = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.SemiBold,
fontSize = 16.sp,
lineHeight = 20.sp,
letterSpacing = 0.1.sp,
),
bodyLarge = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.Normal,
fontSize = 16.sp,
lineHeight = 24.sp,
letterSpacing = 0.5.sp,
),
bodyMedium = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.Medium,
fontSize = 14.sp,
lineHeight = 20.sp,
letterSpacing = 0.25.sp,
),
bodySmall = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.Normal,
fontSize = 12.sp,
lineHeight = 14.sp,
letterSpacing = 0.sp,
),
labelLarge = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.SemiBold,
fontSize = 14.sp,
lineHeight = 20.sp,
letterSpacing = 0.1.sp,
),
labelMedium = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.Medium,
fontSize = 12.sp,
lineHeight = 16.sp,
letterSpacing = 0.5.sp,
),
labelSmall = TextStyle(
fontFamily = InterFontFamily,
fontWeight = FontWeight.Medium,
fontSize = 11.sp,
lineHeight = 16.sp,
letterSpacing = 0.5.sp,
),
)
================================================
FILE: app/src/main/java/com/vanced/manager/ui/util/Color.kt
================================================
package com.vanced.manager.ui.util
import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.tween
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
val Color.animated
@Composable
get() = animateColorAsState(this, animationSpec = tween(400)).value
================================================
FILE: app/src/main/java/com/vanced/manager/ui/util/Const.kt
================================================
package com.vanced.manager.ui.util
import androidx.compose.ui.unit.dp
val DefaultContentPaddingHorizontal = 16.dp
val DefaultContentPaddingVertical = 12.dp
val EdgeToEdgeContentPadding = 8.dp
================================================
FILE: app/src/main/java/com/vanced/manager/ui/util/Screen.kt
================================================
package com.vanced.manager.ui.util
import androidx.annotation.StringRes
import com.vanced.manager.R
import com.vanced.manager.domain.model.InstallationOption
sealed class Screen(
val route: String,
@StringRes val displayName: Int,
) {
object Home : Screen(
route = "home",
displayName = R.string.app_name
)
object Settings : Screen(
route = "settings",
displayName = R.string.toolbar_settings,
)
object About : Screen(
route = "about",
displayName = R.string.toolbar_about,
)
object Logs : Screen(
route = "logs",
displayName = R.string.toolbar_logs,
)
data class Configuration(
val appName: String,
val appVersions: List?,
val appInstallationOptions: List
) : Screen(
route = "installpreferences",
displayName = R.string.toolbar_installation_preferences
)
data class Install(
val appName: String,
val appVersions: List?
) : Screen(
route = "install",
displayName = R.string.toolbar_install
)
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/viewmodel/ConfigurationViewModel.kt
================================================
package com.vanced.manager.ui.viewmodel
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
class ConfigurationViewModel : ViewModel() {
var currentIndex by mutableStateOf(0)
private set
fun next() {
currentIndex++
}
fun back() {
currentIndex--
}
fun reset() {
currentIndex = 0
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/viewmodel/InstallViewModel.kt
================================================
package com.vanced.manager.ui.viewmodel
import android.content.pm.PackageInstaller
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.vanced.manager.downloader.base.AppDownloader
import com.vanced.manager.downloader.impl.MicrogDownloader
import com.vanced.manager.downloader.impl.MusicDownloader
import com.vanced.manager.downloader.impl.VancedDownloader
import com.vanced.manager.installer.impl.MicrogInstaller
import com.vanced.manager.installer.impl.MusicInstaller
import com.vanced.manager.installer.impl.VancedInstaller
import com.vanced.manager.network.util.MICROG_NAME
import com.vanced.manager.network.util.MUSIC_NAME
import com.vanced.manager.network.util.VANCED_NAME
import com.vanced.manager.preferences.holder.managerVariantPref
import com.vanced.manager.repository.manager.PackageManagerResult
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
class InstallViewModel(
private val vancedDownloader: VancedDownloader,
private val musicDownloader: MusicDownloader,
private val microgDownloader: MicrogDownloader,
private val vancedInstaller: VancedInstaller,
private val musicInstaller: MusicInstaller,
private val microgInstaller: MicrogInstaller,
) : ViewModel() {
private val isRoot
get() = managerVariantPref == "root"
sealed class Log {
data class Info(val infoText: String) : Log()
data class Success(val successText: String) : Log()
data class Error(
val displayText: String,
val stacktrace: String,
) : Log()
}
sealed class Status {
object Idle : Status()
object Installing : Status()
object Installed : Status()
object Failure : Status()
data class Progress(val progress: Float) : Status()
}
val logs = mutableStateListOf()
var status by mutableStateOf(Status.Idle)
private set
//TODO Move to WorkManager
fun startAppProcess(
appName: String,
appVersions: List?
) {
viewModelScope.launch(Dispatchers.IO) {
downloadApp(appName, appVersions)
}
}
fun postInstallStatus(pmStatus: Int, extra: String) {
if (pmStatus == PackageInstaller.STATUS_SUCCESS) {
status = Status.Installed
log(Log.Success("Successfully installed"))
} else {
status = Status.Failure
log(Log.Error("Failed to install app", extra))
}
}
fun clear() {
logs.clear()
status = Status.Idle
}
private suspend fun downloadApp(
appName: String,
appVersions: List?,
) {
val downloader = getDownloader(appName)
val onProgress: (Float) -> Unit = { progress ->
status = Status.Progress(progress / 100)
}
val onFile: (String) -> Unit = { file ->
log(Log.Info("Downloading $file"))
}
val download =
if (isRoot)
downloader.downloadRoot(appVersions, onProgress, onFile)
else
downloader.download(appVersions, onProgress, onFile)
when (download) {
is AppDownloader.DownloadStatus.Success -> {
log(Log.Success("Successfully downloaded $appName"))
installApp(appName, appVersions)
}
is AppDownloader.DownloadStatus.Error -> {
log(
Log.Error(
displayText = "Failed to download ${download.fileName}",
stacktrace = download.error
)
)
}
}
}
private suspend fun installApp(
appName: String,
appVersions: List?,
) {
val installer = getInstaller(appName)
status = Status.Installing
if (isRoot) {
when (val installStatus = installer.installRoot(appVersions)) {
is PackageManagerResult.Success -> {
status = Status.Installed
log(Log.Success("Successfully installed"))
}
is PackageManagerResult.Error -> {
status = Status.Failure
log(Log.Error("Failed to install app", installStatus.message))
}
}
} else {
installer.install(appVersions)
}
}
private fun getDownloader(
appName: String
) = when (appName) {
VANCED_NAME -> vancedDownloader
MUSIC_NAME -> musicDownloader
MICROG_NAME -> microgDownloader
else -> throw IllegalArgumentException("$appName is not a valid app")
}
private fun getInstaller(
appName: String
) = when (appName) {
VANCED_NAME -> vancedInstaller
MUSIC_NAME -> musicInstaller
MICROG_NAME -> microgInstaller
else -> throw IllegalArgumentException("$appName is not a valid app")
}
private fun log(data: Log) {
logs.add(data)
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/viewmodel/MainViewModel.kt
================================================
package com.vanced.manager.ui.viewmodel
import android.app.Application
import android.content.ComponentName
import android.content.Intent
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import com.vanced.manager.domain.model.App
import com.vanced.manager.installer.util.PM
import com.vanced.manager.repository.AppRepository
import com.vanced.manager.repository.ManagerMode
import com.vanced.manager.repository.PreferenceRepository
import kotlinx.coroutines.async
import kotlinx.coroutines.awaitAll
import kotlinx.coroutines.launch
import kotlinx.coroutines.supervisorScope
import retrofit2.HttpException
class MainViewModel(
private val appRepository: AppRepository,
private val preferenceRepository: PreferenceRepository,
private val app: Application,
) : AndroidViewModel(app) {
var appMode by mutableStateOf(preferenceRepository.managerMode)
var appTheme by mutableStateOf(preferenceRepository.managerTheme)
private val appCount
get() = when (appMode) {
ManagerMode.ROOT -> 2
ManagerMode.NONROOT -> 3
}
var appState by mutableStateOf(ManagerState.Fetching(appCount))
private set
fun fetch() {
viewModelScope.launch {
try {
supervisorScope {
appState = ManagerState.Fetching(appCount)
when (appMode) {
ManagerMode.ROOT -> {
appState = ManagerState.Success(
apps = listOf(
async { appRepository.getVancedYoutubeRoot() },
async { appRepository.getVancedYoutubeMusicRoot() }
).awaitAll()
)
}
ManagerMode.NONROOT -> {
appState = ManagerState.Success(
apps = listOf(
async { appRepository.getVancedYoutubeNonroot() },
async { appRepository.getVancedYoutubeMusicNonroot() },
async { appRepository.getVancedMicrog() }
).awaitAll()
)
}
}
}
} catch (e: HttpException) {
appState = ManagerState.Error(e.message())
} catch (e: Exception) {
appState = ManagerState.Error(e.toString())
}
}
}
fun launchApp(
packageName: String,
launchActivity: String
) {
val component = ComponentName(packageName, launchActivity)
val intent = Intent().apply {
setComponent(component)
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
app.startActivity(intent)
}
//TODO implement root uninstallation
fun uninstallApp(
appPackage: String,
) {
PM.uninstallPackage(appPackage, app)
}
}
sealed class ManagerState {
data class Fetching(val placeholderAppsCount: Int) : ManagerState()
data class Success(val apps: List) : ManagerState()
data class Error(val error: String) : ManagerState()
val isFetching get() = this is Fetching
val isSuccess get() = this is Success
val isError get() = this is Error
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/viewmodel/SettingsViewModel.kt
================================================
package com.vanced.manager.ui.viewmodel
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.lifecycle.ViewModel
import com.vanced.manager.R
import com.vanced.manager.repository.ManagerMode
import com.vanced.manager.repository.ManagerTheme
import com.vanced.manager.repository.PreferenceRepository
class SettingsViewModel(
private val preferenceRepository: PreferenceRepository
) : ViewModel() {
var managerUseCustomTabs by mutableStateOf(preferenceRepository.managerUseCustomTabs)
private set
var managerMode by mutableStateOf(preferenceRepository.managerMode)
private set
var managerTheme by mutableStateOf(preferenceRepository.managerTheme)
private set
fun saveManagerUseCustomTabs(value: Boolean) {
managerUseCustomTabs = value
preferenceRepository.managerUseCustomTabs = value
}
fun saveManagerMode(value: ManagerMode) {
managerMode = value
preferenceRepository.managerMode = value
}
fun saveManagerTheme(value: ManagerTheme) {
managerTheme = value
preferenceRepository.managerTheme = value
}
fun getThemeStringId(value: ManagerTheme): Int {
return when (value) {
ManagerTheme.DARK -> R.string.settings_preference_theme_dark
ManagerTheme.LIGHT -> R.string.settings_preference_theme_light
else -> R.string.settings_option_system_default
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/widget/AppCard.kt
================================================
package com.vanced.manager.ui.widget
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Info
import androidx.compose.material.icons.rounded.DeleteForever
import androidx.compose.material.icons.rounded.GetApp
import androidx.compose.material.icons.rounded.Launch
import androidx.compose.material.icons.rounded.Update
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import com.google.accompanist.placeholder.PlaceholderHighlight
import com.google.accompanist.placeholder.placeholder
import com.google.accompanist.placeholder.shimmer
import com.vanced.manager.R
import com.vanced.manager.domain.model.AppState
import com.vanced.manager.ui.component.ManagerElevatedCard
import com.vanced.manager.ui.component.ManagerListItem
import com.vanced.manager.ui.component.ManagerText
import com.vanced.manager.ui.theme.LargeShape
import com.vanced.manager.ui.theme.MediumShape
import com.vanced.manager.ui.theme.SmallShape
import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal
import com.vanced.manager.ui.util.DefaultContentPaddingVertical
@Composable
fun AppCard(
appName: String,
appIcon: Painter,
appInstalledVersion: String?,
appRemoteVersion: String?,
appState: AppState,
onAppDownloadClick: () -> Unit,
onAppUninstallClick: () -> Unit,
onAppLaunchClick: () -> Unit,
onAppInfoClick: () -> Unit,
modifier: Modifier = Modifier,
) {
BaseAppCard(
modifier = modifier,
appTitle = {
ManagerText(
modifier = Modifier.fillMaxSize(),
text = appName,
textStyle = MaterialTheme.typography.titleMedium
)
},
appIcon = {
Image(
modifier = Modifier.size(48.dp),
painter = appIcon,
contentDescription = "App Icon",
)
},
appTrailing = {
IconButton(onClick = onAppInfoClick) {
Icon(
imageVector = Icons.Outlined.Info,
contentDescription = "App Info"
)
}
},
appVersionsColumn = {
ManagerText(
text = stringResource(
id = R.string.app_version_latest,
appRemoteVersion ?: stringResource(
id = R.string.app_content_unavailable
)
)
)
ManagerText(
text = stringResource(
id = R.string.app_version_installed,
appInstalledVersion ?: stringResource(
id = R.string.app_content_unavailable
)
)
)
},
appActionsRow = {
if (appInstalledVersion != null) {
IconButton(onClick = onAppUninstallClick) {
Icon(
imageVector = Icons.Rounded.DeleteForever,
contentDescription = "Uninstall"
)
}
IconButton(onClick = onAppLaunchClick) {
Icon(
imageVector = Icons.Rounded.Launch,
contentDescription = "Launch",
)
}
}
IconButton(onClick = onAppDownloadClick) {
when (appState) {
AppState.NOT_INSTALLED -> {
Icon(
imageVector = Icons.Rounded.GetApp,
contentDescription = "Install",
)
}
AppState.INSTALLED -> {
Icon(
imageVector = Icons.Rounded.GetApp,
contentDescription = "Install",
)
}
AppState.NEEDS_UPDATE -> {
Icon(
imageVector = Icons.Rounded.Update,
contentDescription = "Update",
)
}
}
}
}
)
}
@Composable
fun AppCardPlaceholder(
modifier: Modifier = Modifier
) {
BaseAppCard(
modifier = modifier,
appTitle = {
ManagerText(
modifier = Modifier
.managerPlaceholder(
visible = true,
shape = MediumShape
),
text = " ".repeat(40),
textStyle = MaterialTheme.typography.titleMedium
)
},
appIcon = {
Box(
modifier = Modifier
.managerPlaceholder(
visible = true,
shape = RoundedCornerShape(24.dp)
)
.size(48.dp)
)
},
appTrailing = {
Box(
modifier = Modifier
.managerPlaceholder(
visible = true,
shape = MediumShape
)
.size(24.dp)
)
},
appVersionsColumn = {
ManagerText(
modifier = Modifier
.managerPlaceholder(
visible = true,
shape = SmallShape
),
text = " ".repeat(30)
)
ManagerText(
modifier = Modifier
.managerPlaceholder(
visible = true,
shape = SmallShape
),
text = " ".repeat(30)
)
},
appActionsRow = {
Box(
modifier = Modifier
.fillMaxWidth(0.8f)
.height(36.dp)
.managerPlaceholder(
visible = true,
shape = MediumShape
)
)
}
)
}
@Composable
private fun BaseAppCard(
appTitle: @Composable () -> Unit,
appIcon: @Composable () -> Unit,
appTrailing: @Composable () -> Unit,
appVersionsColumn: @Composable ColumnScope.() -> Unit,
appActionsRow: @Composable RowScope.() -> Unit,
modifier: Modifier = Modifier
) {
ManagerElevatedCard(
modifier = modifier,
shape = LargeShape,
) {
Column(
modifier = Modifier
.fillMaxWidth()
.padding(
horizontal = DefaultContentPaddingHorizontal,
vertical = DefaultContentPaddingVertical
),
verticalArrangement = Arrangement
.spacedBy(DefaultContentPaddingVertical)
) {
ManagerListItem(
modifier = Modifier.fillMaxWidth(),
title = appTitle,
icon = appIcon,
trailing = appTrailing
)
Divider(
modifier = Modifier
.fillMaxWidth()
.clip(LargeShape),
thickness = 2.dp,
)
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween
) {
Column(
verticalArrangement = Arrangement.spacedBy(4.dp),
horizontalAlignment = Alignment.Start
) {
ManagerText(
text = stringResource(id = R.string.app_versions),
textStyle = MaterialTheme.typography.bodyMedium
)
ProvideTextStyle(value = MaterialTheme.typography.bodySmall) {
appVersionsColumn()
}
}
Row(
modifier = Modifier.wrapContentWidth(),
content = appActionsRow,
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.End
)
}
}
}
}
private fun Modifier.managerPlaceholder(
visible: Boolean,
shape: Shape
) = composed {
placeholder(
visible = visible,
shape = shape,
color = MaterialTheme.colorScheme.surfaceVariant,
highlight = PlaceholderHighlight.shimmer(
highlightColor = MaterialTheme.colorScheme.onSurfaceVariant
)
)
}
================================================
FILE: app/src/main/java/com/vanced/manager/ui/widget/LinkCard.kt
================================================
package com.vanced.manager.ui.widget
import android.net.Uri
import androidx.browser.customtabs.CustomTabsIntent
import androidx.compose.foundation.layout.*
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import com.vanced.manager.ui.component.ManagerElevatedCard
import com.vanced.manager.ui.component.ManagerText
import com.vanced.manager.ui.util.DefaultContentPaddingHorizontal
import com.vanced.manager.ui.util.DefaultContentPaddingVertical
import org.koin.androidx.compose.inject
//TODO this composable should not handle opening links
@Composable
fun LinkCard(
text: String,
icon: Painter,
url: String,
modifier: Modifier = Modifier
) {
val context = LocalContext.current
val customTabs: CustomTabsIntent by inject()
val uri = remember { Uri.parse(url) }
ManagerElevatedCard(
modifier = modifier
.height(100.dp)
.widthIn(min = 100.dp),
onClick = {
customTabs.launchUrl(context, uri)
}
) {
Box(
modifier = Modifier
.fillMaxSize()
.padding(
horizontal = DefaultContentPaddingHorizontal,
vertical = DefaultContentPaddingVertical
),
) {
Icon(
modifier = Modifier
.size(32.dp)
.align(Alignment.TopStart),
painter = icon,
contentDescription = null,
)
ManagerText(
modifier = Modifier.align(Alignment.BottomStart),
text = text,
textStyle = MaterialTheme.typography.labelLarge
)
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/util/AppHelper.kt
================================================
package com.vanced.manager.util
fun getLatestOrProvidedAppVersion(
version: String,
appVersions: List?
): String {
if (appVersions == null)
return version
if (appVersions.contains(version))
return version
return appVersions.last()
}
================================================
FILE: app/src/main/java/com/vanced/manager/util/Arch.kt
================================================
package com.vanced.manager.util
import android.os.Build
val arch
get() = when {
Build.SUPPORTED_ABIS.contains("x86") -> "x86"
Build.SUPPORTED_ABIS.contains("arm64-v8a") -> "arm64_v8a"
else -> "armeabi_v7a"
}
================================================
FILE: app/src/main/java/com/vanced/manager/util/Coroutines.kt
================================================
package com.vanced.manager.util
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import java.util.concurrent.Executor
import kotlin.coroutines.CoroutineContext
fun CoroutineContext.asExecutor(): Executor = object : Executor {
private val scope = CoroutineScope(this@asExecutor)
override fun execute(command: Runnable) {
scope.launch { command.run() }
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/util/IO.kt
================================================
package com.vanced.manager.util
import okhttp3.ResponseBody
import java.io.FileOutputStream
import java.io.InputStream
import java.io.OutputStream
inline fun ResponseBody.writeFile(
filePath: String,
onProgress: (Float) -> Unit
) {
byteStream().use { inputStream ->
FileOutputStream(filePath).use { outputStream ->
val totalBytes = contentLength()
inputStream.copyTo(outputStream, 8192) { bytes ->
onProgress((bytes * 100 / totalBytes).toFloat())
}
}
}
}
inline fun InputStream.copyTo(
outputStream: OutputStream,
bufferSize: Int,
onProgress: (Long) -> Unit
) {
val buffer = ByteArray(bufferSize)
var bytesCopied: Long = 0
var bytes = read(buffer)
while (bytes >= 0) {
outputStream.write(buffer, 0, bytes)
bytesCopied += bytes
bytes = read(buffer)
onProgress(bytesCopied)
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/util/Safety.kt
================================================
package com.vanced.manager.util
//Dear reader, welcome to HELL.
//We don't kink-shame here.
inline fun doubleUnionTryCatch(
onCatch: (Exception) -> R,
onTry: () -> R
): R {
return try {
onTry()
} catch (e: Exception) {
when (e) {
is E1, is E2 -> onCatch(e)
else -> throw e
}
}
}
inline fun tripleUnionTryCatch(
onCatch: (Exception) -> R,
onTry: () -> R
): R {
return try {
onTry()
} catch (e: Exception) {
when (e) {
is E1, is E2, is E3 -> onCatch(e)
else -> throw e
}
}
}
================================================
FILE: app/src/main/java/com/vanced/manager/util/SuShell.kt
================================================
package com.vanced.manager.util
import com.topjohnwu.superuser.Shell
import kotlin.coroutines.resume
import kotlin.coroutines.resumeWithException
import kotlin.coroutines.suspendCoroutine
val Shell.Result.outString
get() = out.joinToString("\n")
val Shell.Result.errString
get() = err.joinToString("\n")
val isMagiskInstalled
get() = Shell.rootAccess() && Shell.su("magisk", "-c").exec().isSuccess
suspend fun Shell.Job.await(): Shell.Result {
return suspendCoroutine { continuation ->
submit {
continuation.resume(it)
}
}
}
class SuException(val stderrOut: String) : Exception(stderrOut)
@Throws(SuException::class)
suspend fun Shell.Job.awaitOutputOrThrow(): String {
return suspendCoroutine { continuation ->
submit {
if (it.isSuccess) {
continuation.resume(it.outString)
} else {
continuation.resumeWithException(SuException(it.errString))
}
}
}
}
================================================
FILE: app/src/main/res/animator/fragment_enter.xml
================================================
================================================
FILE: app/src/main/res/animator/fragment_enter_pop.xml
================================================
================================================
FILE: app/src/main/res/animator/fragment_exit.xml
================================================
================================================
FILE: app/src/main/res/animator/fragment_exit_pop.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_adguard.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_android_black_24dp.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_app_icon_placeholder.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_brave.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_brave_light.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_discord.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_github.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_instagram.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_launch_text.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_magisk.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_manager.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_manager_monet_icon.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_microg.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_music.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_reddit.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_round_assignment_24.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_round_close_24.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_round_done_24.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_splash.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_telegram.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_twitter.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_vanced.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_website.xml
================================================
================================================
FILE: app/src/main/res/drawable/ic_youtube.xml
================================================
================================================
FILE: app/src/main/res/drawable-anydpi-v24/ic_stat_name.xml
================================================
================================================
FILE: app/src/main/res/drawable-v24/ic_launcher_foreground.xml
================================================
================================================
FILE: app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
================================================
FILE: app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
================================================
================================================
FILE: app/src/main/res/values/arrays.xml
================================================
================================================
FILE: app/src/main/res/values/attrs.xml
================================================
================================================
FILE: app/src/main/res/values/colors.xml
================================================
#673AB7
#FB542B
#7289DA
#1DA1F2
#0088cc
#FF4500
#17191A
#f7f7f7
================================================
FILE: app/src/main/res/values/dimens.xml
================================================
128dp
================================================
FILE: app/src/main/res/values/ic_launcher_background.xml
================================================
#171719
================================================
FILE: app/src/main/res/values/resources.xml
================================================
Vanced Manager
YouTube Vanced
YouTube Music Vanced
Vanced microG
================================================
FILE: app/src/main/res/values/strings.xml
================================================
DPT
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
Is Your Device Rooted?
Grant Root Permission
Let\'s get started
Don\'t know what this is or don\'t want to use the root version? just click the blue arrow below!
Select Your Apps
Select at least one app!
Apps
Social Media
Support us
Root access not granted
Appearance
Behaviour
System Default
Accent Color
Clear downloaded files
Successfully cleared files
This lets us collect information about app performance and crash logs
Firebase Analytics
Language
Receive push notifications when an update for %1$s is released
%1$s Push Notifications
Failed to save new time value
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
Root Script Sleep Time
Dark Theme
Light Theme
Theme
Links will open in Chrome Custom Tabs
Use Chrome Custom Tabs
Variant
Base download URL
Manager Devs
Other Contributors
Vanced Team
Sources
Source Code
License
Successfully saved logs
Could not save logs
Cancel
Close
Reset
Save
Stop!
About
Guide
Manager
Logs
Settings
Install
Configuration
Update Manager
Unavailable
Install Vanced microG first
Install
Installed: %1$s
Latest: %1$s
Versions
Language(s)
Theme
Version
Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub
Welcome
Guide
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Changelog
About %1$s
Install
Redownload
Manager detected that all necessary files for %1$s installation were found. Do you want to install it?
%1$s installation files detected!
Download
Downloading %1$s
Please do NOT exit the app during this process!
Uninstall
Are you sure you want to uninstall %1$s ?
Choose your preferred language(s) for %1$s
Black
Dark
Choose your preferred theme for %1$s
Latest
Choose your preferred version for %1$s
Checking for updates…
Manager Update Center
No new updates
Download
Info
Launch
Reinstall
Uninstall
Update
Details
Error
Failed to `chown` APK to system owner, please try again.
Error Downloading %1$s
Failed to uninstall package %1$s
Failed to locate the required files for installation. Re-download the installation files, then try again.
Failed to locate apk file for black/dark theme from storage, please try again.
Installation failed because the user aborted the installation.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Installation failed because the installation file is incompatible with your device. Clear downloaded files in the Settings, then try again.
Installation failed because the apk files are corrupted, please try again.
Installation failed because MIUI Optimization is enabled. Disable MIUI Optimization, then try again.
Installation failed because apk signature verification is enabled. Disable apk signature verification, then try again.
Installation failed because the device doesn\'t have enough free space.
Failed to find apk file for black/dark theme from the installer. Clear app data of Manager, then try again.
Failed to locate the stock YouTube installation path after split installation.
================================================
FILE: app/src/main/res/values/themes.xml
================================================
================================================
FILE: app/src/main/res/values-af-rZA/strings.xml
================================================
What is your favourite song
Maak toe
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
Herstel
Stoor
Select Your Apps
Oor
Guide
Manager
Logs
Settings
Update Manager
Is Your Device Rooted?
Grant Root Permission
Let\'s get started
Select at least one app!
Don\'t know what this is or don\'t want to use the root version? just click the blue arrow below!
About %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
Changelog
Downloading %1$s
Install
Latest:
Install Vanced microG first
Root access not granted
Social Media
Support us
Unavailable
Installed:
Accent Color
Appearance
Behavior
Clear downloaded files
Successfully cleared files
This lets us collect information about app performance and crash logs
Firebase Analytics
Language
Links will open in Chrome Custom Tabs
Use Chrome Custom Tabs
%1$s Push Notifications
Receive push notifications when an update for %1$s is released
Failed to save new time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
System Default
Theme
Dark Theme
Light Theme
Manager Update Center
No new updates
Variant
Could not save logs
Successfully saved logs
Details
%1$s installation files detected!
Manager detected that all necessary files for %1$s installation were found. Do you want to install it?
%1$s Installation Preferences
Checking for updates…
Language(s): %1$s
Theme: %1$s
Version: %1$s
Error
Guide
Stop!
You are using the Magisk/TWRP version of Vanced, which is discontinued and cannot be updated using this app. Please remove it by removing the Magisk module/using TWRP Vanced uninstaller.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Redownload
Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub
Version
Welcome
Choose your preferred language(s) for Vanced
Latest
Light + %1$s
Select at least one language!
Black
Dark
Manager Devs
Other Contributors
Sources
Vanced Team
Failed to `chown` APK to system owner, please try again.
Error Downloading %1$s
Failed to apply new accent color
Failed to uninstall package %1$s
Failed to locate the required files for installation. Re-download the installation files, then try again.
Failed to locate apk file for black/dark theme from storage, please try again.
Installation failed because the user aborted the installation.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Installation failed because the installation file is incompatible with your device. Clear downloaded files in the Settings, then try again.
Installation failed because the apk files are corrupted, please try again.
Installation failed because MIUI Optimization is enabled. Disable MIUI Optimization, then try again.
Installation failed because apk signature verification is enabled. Disable apk signature verification, then try again.
Installation failed because the device doesn\'t have enough free space.
Failed to find apk file for black/dark theme from the installer. Clear app data of Manager, then try again.
Failed to locate the stock YouTube installation path after split installation.
================================================
FILE: app/src/main/res/values-ar-rSA/strings.xml
================================================
إلغاء
إغلاق
نسخة خاصة من خدمات جوجل للجوال معدة خصيصا لتطبيق ڤانسد بناءً على مشروع microG.
تطبيق يوتيوب معدل مع العديد من الميزات المفيدة!
ڤانسد لموسيقى يوتيوب! يلبي احتياجاتك حتى وان كان يضم ميزات اقل من ڤانسد.
إعادة تعيين
حفظ
اختر تطبيقاتك
حول
دليل الاستخدام
المدير
السجلات
الإعدادات
تحديث المدير
هل جهازك مروت؟
امنح صلاحيات الروت
فلنبدأ
اختر تطبيقاً واحداً على الأقل!
لا تعرف ما هذا أو لا تود استخدام نسخة الروت؟ اضغط على السهم الأزرق في الأسفل!
حول %1$s
تنزيل
المعلومات
تشغيل
أعد التثبيت
إلغاء التثبيت
تحديث
التطبيقات
سجل التغييرات
جارٍ تنزيل %1$s
تثبيت
الأحدث:
قم بتثبيت Vanced microG أولاً
لم يتم منح صلاحيات الروت
وسائل التواصل الإجتماعي
ادعمنا
غير متاح
مثبت:
الألوان
المظهر
السلوك
مسح الملفات التي تم تنزيلها
تم مسح الملفات بنجاح
هذا يتيح لنا جمع المعلومات عن أداء التطبيق وسجلات الأعطال
تحليلات Firebase
اللغة
سيتم فتح الروابط في علامات تبويب مخصصة لمتصفح كروم
استخدم علامات تبويب مخصصة لمتصفح كروم
إشعارات %1$s
تلقي الإشعارات عند إصدار تحديث لـ %1$s
فشل في حفظ القيمة الزمنية الجديدة
Script sleep time للروت
ضبط القيمة الزمنية للنوم المستخدمة في /data/adb/service.d/app.sh script، مفيد لإصلاح مشاكل التركيب
الوضع الافتراضي
السمة
السمة الداكنة
السمة الفاتحة
مركز التحديث
لا توجد تحديثات جديدة
النوع
تعذر حفظ السجل
تم حفظ السجل بنجاح
التفاصيل
تم اكتشاف ملفات تثبيت %1$s!
اكتشف المدير أن جميع الملفات اللازمة لتثبيت %1$s موجودة. هل تريد التثبيت؟
تفضيلات تثبيت %1$s
جارٍ التحقق من وجود تحديثات…
اللغة/اللغات: %1$s
السمة: %1$s
الإصدار: %1$s
خطأ
الدليل
إيقاف!
يبدو أنك تستخدم إصدار ماجيسك/TWRP من ڤانسد، الذي قد تم إيقافه ولا يمكن تحديثه بإستخدام هذا التطبيق. الرجاء إزالته أولاً من قائمة إضافات ماجيسك أو بإستخدام أداة إلغاء تثبيت ڤانسد من TWRP.
من أجل تثبيت ڤانسد، عليك تعطيل تحسينات MIUI في إعدادات المطور. (يمكنك تجاهل هذه الرسالة إذا كنت تستخدم نسخة رقم 20.2.20 أو أجدد تستند إلى نسخة نظام شاومي أوروبا)
تحسينات MIUI مفعلة!
الرجاء عدم الخروج من التطبيق أثناء هذه العملية!
إعادة التنزيل
تأكد من أنك قمت بتنزيل التطبيق من موقع vancedapp.com، أو خادم الديسكورد لڤانسد أو Vanced GitHub
الإصدار
مرحباً بك
اختر لغتك(لغاتك) المفضلة لڤانسد
الأحدث
فاتح + %1$s
اختر لغة واحدة على الأقل!
أسود
داكن
مطوري المدير
مساهمين آخرين
المصادر
فريق ڤانسد
فشل تغيير ملكية حزمة التثبيت الى مالك النظام، الرجاء المحاولة مرة أخرى.
خطأ في تنزيل %1$s
فشل تطبيق لون النسق الجديد
فشل في الغاء تثبيت حزمة %1$s
فشل العثور على الملفات المطلوبة للتثبيت. أعد تحميل ملفات التثبيت، ثم حاول مرة أخرى.
فشل العثور على حزمة تثبيت السمة السوداء/المظلمة من وحدة التخزين، الرجاء المحاولة مرة أخرى.
فشل التثبيت لأن المستخدم ألغى التثبيت.
فشل التثبيت، لأن هذا التطبيق يتعارض مع تطبيق مثبت بالفعل. قم بإلغاء تثبيت الإصدار الحالي من Vanced، ثم حاول مرة أخرى.
فشل التثبيت لأن المستخدم حاول تثبيت إصدار قديم. قم بألغاء تثبيت التحديثات الخاصة باليوتيوب الأصلي، ثم حاول مرة أخرى.
فشل التثبيت لأسباب غير معروفة، انضم إلى تيليجرام أو ديسكورد لمزيد من الدعم. يرجى أيضاً إرفاق لقطة الشاشة من القائمة المتقدمة
فشل التثبيت لأن ملف التثبيت غير متوافق مع جهازك. امسح الملفات التي تم تنزيلها في الإعدادات، ثم حاول مرة أخرى.
فشل التثبيت لأن حزم التثبيت تالفة، الرجاء المحاولة مرة أخرى.
فشل التثبيت لأن تحسينات MIUI مفعلة. قم بتعطيل تحسينات MIUI ، ثم حاول مرة أخرى.
فشل التثبيت لأن التحقق من توقيع حزم التثبيت مفعل. الرجاء تعطيل التحقق من توقيع حزم التثبيت, ثم المحاولة مرة أخرى.
فشل التثبيت، مساحة جهازك الخالية لا تكفي.
فشل العثور على حزمة التثبيت للسمة السوداء/المظلمة من المثبت. امسح بيانات التطبيق لمدير ڤانسد، ثم حاول مرة أخرى.
فشل تحديد مسار تثبيت اليوتيوب الأصلي بعد تثبيت الحزم المنفصلة.
================================================
FILE: app/src/main/res/values-az-rAZ/strings.xml
================================================
İmtina
Bağla
microG Layihəsi əsasında Vanced üçün təkmilləşdirilmiş özəl bir GMS tətbiqi.
Çoxlu faydalı özəllikləri ilə modifikasiya edilmiş YouTube versiyası!
Yenə Vanced, ancaq YouTube Msuic üçün! Nisbətən daha az özəlliyi olsa da, ehtiyaclarınızı qarşılayacaq.
Sıfırla
Saxla
Tətbiqlərinizi Seçin
Haqqında
Bələdçi
Menecer
Qeydlər
Tənzimləmələr
Yeniləmə Meneceri
Cihazınızda root varmı?
Root İcazəsi Ver
Gəlin başlayaq
Ən azı bir tətbiq seçin!
Root versiyasının nə olduğunu bilmirsiz ya da sadəcə istifadə etmək istəmirsiz? onda aşağıdakı göy oxa toxunun!
%1$s Haqqında
Download
Info
Launch
Reinstall
Uninstall
Update
Tətbiqlər
Dəyişikliklər
%1$s endirilir
Quraşdır
Ən son:
Əvvəlcə Vanced microG-ni quraşdırın
Root icazəsi verilməyib
Sosial Media
Bizi dəstəklə
Əlçatmazdır
Qurulan:
Tema rəngi
Görünüş
Davranış
Endirilmiş faylları təmizlə
Fayllar uğurla təmizləndi
Bu bizə tətbiq performansı və çökmə jurnalı haqqında məlumat yığmağa imkan verir
Firebase Analitikləri
Dil
Bağlantılar Chrome Özəl Vərəqlərində açılacaq
Chrome Özəl Vərəqlərini istifadə et
%1$s Ani Bildirişlər
%1$s üçün yeni buraxılış olanda ani bildirişlər alın
Yeni vaxt qiymətini saxlamaq olmadı
Root Qoşma Gözləmə Müddəti
/data/adb/service.d/app.sh kodundakı yuxu vaxtı qiymətini nizamlayın, bu qoşma xətalarını aradan qaldırmağa kömək edəcək
İlkin Sistem
Mövzu
Tünd mövzu
Açıq mövzu
Menecer Yeniləmə Mərkəzi
Yeniləmə yoxdur
Variant
Qeydləri saxlamaq olmadı
Qeydlər uğurla saxlandı
Təfsilatlar
%1$s quraşdırma faylı aşkarlandı!
Menecer %1$s quraşdırması üçün lazımi bütün faylların tapıldığını aşkarladı. Quraşdırmaq istəyirsiniz?
%1$s Qurma Seçimləri
Yeniləmələr yoxlanılır…
Dil(lər): %1$s
Mövzu: %1$s
Versiya: %1$s
Xəta
Bələdçi
Dayandır!
Buraxılışı dayandırılan və bu tətbiq istifadə edərək yenilənə bilməyən Vanced-in Magisk/TWRP versiyasını istifadə edirsiniz. Zəhmət olmasa magisk modulunu/TWRP Vanced silici istifadə edərək silin.
Vanced-i quraşdırmaq üçün tərtibatçı tənzimləmələrindən MIUI Optimallaşdırmasını sıradan çıxartmaq LAZIMDIR. (20.2.20 və ya yuxarı xiaomi.eu əsaslı ROM istifadə edirsinizsə bu xəbərdarlığı nəzərə almaya bilərsiniz)
MIUI Optimizasiyaları açıqdır!
Xahiş olunur iş gedərkən tətbiqi TƏRK ETMƏYİN!
Yenidən endir
Tətbiqi vancedapp.com, Vanced Discord server və ya Vanced GitHub\'dan endirdiyinizə əmin olun
Versiya
Xoş gəlmisiniz
Vanced üçün istədiyiniz dili seçin
Ən son
İşıqlı + %1$s
Ən azı bir dil seçin!
Qara
Qaranlıq
Menecer Tərtibatçıları
Digər Dəstəkçilər
Mənbələr
Vanced Birliyi
Apk, sistem sahibinə dəyişdirilmədi, yenidən sınayın.
%1$s Yüklənərkən xəta
Yeni ikinci rəngi təyin etmək alınmadı
%1$s paketini silmək olmur
Quraşdırmaq üçün lazımi fayllar tapılmadı. Quraşdırma fayllarını yenidən endirib təkrar sınayın.
Anbarda qara/tünd mövzu üçün apk faylı tapılmadı, yenidən sınayın.
İstifadəçi quraşdırmanı ləğv etdiyi üçün quraşdırılma uğursuz oldu.
Tətbiq əvvəlcədən quraşdırılmış bir tətbiqlə toqquşduğu üçün quraşdırılma uğursuz oldu. Vanced-in cari versiyasını silib yenidən sınayın.
İstifadəçi paketi alt versiyaya keçirməyə çalışdığı üçün quraşdırılma uğursuz oldu. Stok YouTube tətbiqindən yeniləmələri silib yenidən sınayın.
Bilinməyən səbəblərdən qurma alınmadı, əlavə yardım üçün Telegram və ya Discordumuza qoşulun. Xahiş olunur Qabaqcıl bölməsindən ekran görüntüsü də əlavə edin
Quraşdırma faylı cihazınıza uyğun gəlmədiyi üçün quraşdırılma uğursuz oldu. Tənzimləmələrdən endirilmiş faylları təmizləyib yenidən sınayın.
Apk faylları zədəli olduğu üçün quraşdırılma uğursuz oldu, yenidən sınayın.
MIUI Optimallaşdırma fəal olduğu üçün quraşdırılma uğursuz oldu. MIUI Optimallaşdırmanı sıradan çıxarıb yenidən sınayın.
Apk imza təsdiqləmə fəal olduğu üçün quraşdırılma uğursuz oldu. Apk imza təsdiqləməsini sıradan çıxarıb yenidən sınayın.
Cihazda yaddaş az olduğundan qurma alınmadı.
Quraşdırıcıda qara/tünd tema üçün apk faylı tapılmadı. Menecer-in tətbiq verilənlərini təmizləyib yenidən sınayın.
Ayrılmış quraşdırmadan sonra stok YouTube quraşdırma yolu tapılmadı.
================================================
FILE: app/src/main/res/values-bg-rBG/strings.xml
================================================
Отказ
Затвори
Персонализирано внедряване на GMS за Vanced въз основа на проекта microG.
Модифициран клиент за YouTube с много полезни функции!
Vanced, но за YouTube Music! Относително по-малко богат на функции, но ще отговори на вашите нужди.
Изчисти
Запази
Изберете приложения
Относно
Ръководство
Мениджър
Логове
Настройки
Обнови Vanced Manager
Имате ли Root достъп на устройството си?
Разрешете Root достъп
Да започваме
Изберете поне едно приложение!
Не знаете какво е това или не искате да ползвате Root версията? Просто натиснете синята стрелка по-долу!
Относно %1$s
Изтегляне
Информация
Стартиране
Reinstall
Деинсталиране
Актуализиране
Приложения
Списък с промени
Изтегляне на %1$s
Инсталиране
Най-нова:
Инсталирайте първо Vanced microG
Root достъп не е разрешен
Социални медии
Подкрепете ни
Недостъпно
Инсталиранa:
Акцентиращ цвят
Външен вид
Поведение
Изчисти изтеглените файлове
Файловете са изчистени успешно
Позволява ни да събираме информация за поведението на приложението и доклади за сривове
Firebase анализ
Език
Връзките ще се отварят в персонализирани раздели на Chrome
Ползвай персонализирани раздели на Chrome
%1$s насочени известия
Получаване на насочени известия, когато има нова версия на %1$s
Неуспешно запазване на новата стойност за времето
Време за заспиване на Root скрипта
Настройване на времето на заспиване в /data/adb/service.d/app.sh скрипта, полезно при поправка на проблеми при монтиране
По подразбиране за системата
Тема
Тъмна тема
Светла тема
Център за актуализации
Няма актуализации
Вариант
Не могат да се запазят логовете
Успешно запазени логове
Подробности
%1$s инсталационни файлове са открити!
Мениджърът откри всички необходими файлове за инсталацията на %1$s. Желаете ли да го инсталирате?
Предпочитания за инсталация на %1$s
Проверка за актуализации…
Език(ци): %1$s
Тема: %1$s
Версия: %1$s
Грешка
Ръководство
Стоп!
Използвате Magisk/TWRP версията на Vanced, която е прекратена и не може да се актуализира с това приложение. Премахнете я като премахнете Magisk модула или чрез TWRP Vanced uninstaller.
За да инсталирате Vanced, ТРЯБВА да изключите MIUI оптимизациите в настройките за разработчици. (Това не е валидно ако ползвате 20.2.20 или по-нов ROM, базиран на xiaomi.eu)
MIUI оптимизациите са включени!
Моля, НЕ излизайте от приложението по време на този процес!
Изтегли отново
Уверете се, че сте изтеглили приложението от vancedapp.com, Vanced Discord сървъра или от Vanced GitHub
Версия
Добре дошли
Изберете предпочитан(и) език(ци) за Vanced
Най-нова
Светла + %1$s
Изберете поне един език!
Черна
Тъмна
Разработчици
Други сътрудници
Източници
Екип на Vanced
Неуспешно`chown` APK към собственика на системата, моля опитайте отново.
Грешка при изтегляне на %1$s
Неуспешно задаване на акцентиращ цвят
Неуспешно деинсталиране на %1$s
Необходимите файлове за инсталация не са открити. Изтеглете ги отново и опитайте пак.
Не може да бъде открит apk файла за черна/тъмна тема, моля опитайте отново.
Инсталацията е неуспешна, защото е прекратена от потребителя.
Инсталацията е неуспешна, поради конфликт с вече инсталирано приложение. Деинсталирайте го и опитайте отново.
Инсталацията е неуспешна, защото потребителя се опитва да инсталира по-стара версия на пакета. Деинсталирайте актуализациите на оригиналното приложение и опитайте отново.
Инсталацията не бе успешна по неизвестни причини, присъединете се към нашия Telegram или Discord за допълнителна поддръжка. Моля, прикачете и екранна снимка от меню Разширени
Инсталацията е неуспешна, защото инсталационният файл не е съвместим с устройството ви. Изчистете изтеглените файлове от настройките и опитайте отново.
Инсталацията е неуспешна, защото apk файловете за повредени, моля опитайте отново.
Инсталацията е неуспешна, поради включени MIUI оптимизации. Изключете ги и опитайте отново.
Инсталацията е неуспешна, поради включена проверка на подписите на apk файловете. Изключете я и опитайте отново.
Инсталацията не бе успешна, тъй като устройството няма достатъчно свободно място.
Не е открит apk файл за черна/тъмна тема от инсталатора. Изчистете данните на мениджъра и опитайте отново.
Не е открит пътя на инсталацията на оригиналното YouTube приложение след разделното инсталиране.
================================================
FILE: app/src/main/res/values-bn-rBD/strings.xml
================================================
বাতিল করুন
বন্ধ করুন
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
পুনরায় স্থির করুন
সংরক্ষণ করুন
আপনার পছন্দসই অ্যাপগুলি নির্বাচন করুন
সম্বন্ধে
Guide
ম্যানেজার
Logs
সেটিংস
ম্যানেজার আপডেট করুন
আপনার ডিভাইস কি রুটেড?
রুটের অনুমতি দিন
চলুন শুরু করি
অন্তত একটি অ্যাপ নির্বাচন করুন!
এটা কী জানেন না অথবা রুট ভার্সন ব্যবহার করতে চাচ্ছেন না? শুধু নিচের নীল তীর চিহ্নটিতে ক্লিক করুন!
সম্পর্কিত তথ্য %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
পরিবর্তন তালিকা
%1$s ডাউনলোড করা হচ্ছে
ইনস্টল করুন
সর্বশেষ:
Install Vanced microG first
রুট অনুমতি দেয়া হয়নি
Social Media
Support us
অনুপলব্ধ
ইনস্টল করা আছে:
অ্যাকসেন্ট রঙ
চেহারা
আচরণ
ডাউনলোড করা ফাইলগুলি সাফ করুন
সাফল্যের সাথে ফাইলগুলি সাফ করা হয়েছে
এটি অ্যাপ্লিকেশন কর্মক্ষমতা এবং ক্র্যাশ লগ সম্পর্কিত তথ্য আমাদের দিবে।
ফায়ারবেস বিশ্লেষণ
ভাষা
লিঙ্কগুলি ক্রোম কাস্টম ট্যাবসে খোলা হবে
ক্রোম কাস্টম ট্যাবস ব্যবহার করুন
%1$s পুশ বিজ্ঞপ্তি
%1$s এর আপডেট প্রকাশিত হলে পুশ বিজ্ঞপ্তি পান
Failed to save new time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
সিস্টেম দ্বারা নির্ধারিত
থিম
গাঢ় থিম
হালকা থিম
ম্যানেজার আপডেট কেন্দ্র
কোনো নতুন আপডেট নেই
রকমফের
Could not save logs
Successfully saved logs
Details
%1$s ইন্সটল করার জন্য ফাইল পাওয়া গেছে!
ম্যানেজার সনাক্ত করেছে যে %1$s এর ইনস্টলেসনের জন্য সকল ফাইল পাওয়া গেছে। আপনি কি এটি ইনস্টল করতে চান?
%1$s Installation Preferences
আপডেট আছে কিনা দেখা হচ্ছে…
ভাষা (গুলি):%1$s
থিম: %1$s
ভার্সন: %1$s
ত্রুটি
সহায়িকা
থামো!
You are using the Magisk/TWRP version of Vanced, which is discontinued and cannot be updated using this app. Please remove it by removing the Magisk module/using TWRP Vanced uninstaller.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Redownload
Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub
Version
স্বাগতম
ভ্যানসডের জন্য আপনার পছন্দসই ভাষা (গুলি) চয়ন করুন
Latest
Light + %1$s
Select at least one language!
Black
Dark
পরিচালক বিকাশকারী
Other Contributors
সূত্রসমূহ
ভান্সড দল
Failed to `chown` APK to system owner, please try again.
%1$s ডাউনলোড করার সময় ত্রুটি
Failed to apply new accent color
প্যাকেজ %1$s আনইনস্টল করতে ব্যর্থ
সফটওয়্যার টি ইনস্টল এর জন্য প্রয়োজনী ফাইল সংগ্রহতে ব্যর্থ হয়েছে। পুনরায় ডাওনলোড এবং ইনস্টল করে চেষ্টা করুন.
স্টোরেজ থেকে কালো / অন্ধকান থিমের জন্য apk ফাইল সনাক্ত করতে ব্যর্থ হয়েছে, দয়া করে আবার চেষ্টা করুন।.
Installation failed because the user aborted the installation.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
ইনস্টলেশন ব্যর্থ হয়েছে কারণ ইনস্টলেশন ফাইলটি আপনার ডিভাইসের সাথে বেমানান। সেটিংসে ডাউনলোড করা ফাইল সাফ করুন, তারপরে আবার চেষ্টা করুন।.
অ্যাপ্লিকেশন ব্যর্থ হয়েছে কারণ এপিপি ফাইলগুলি দূষিত হয়েছে, দয়া করে আবার চেষ্টা করুন।.
ইনস্টলেশন ব্যর্থ হয়েছে কারণ এমআইইউআই অপটিমাইজেশন সক্ষম রয়েছে। MIUI অপ্টিমাইজেশন অক্ষম করুন, তারপরে আবার চেষ্টা করুন।.
Installation failed because apk signature verification is enabled. Disable apk signature verification, then try again.
Installation failed because the device doesn\'t have enough free space.
ইনস্টলার থেকে কালো / অন্ধকার থিমের জন্য সফটওয়্যারের ফাইল খুঁজতে ব্যর্থ। আপনার অ্যাপ্লিকেশনের ডেটা সাফ করুন, তারপরে আবার চেষ্টা করুন।.
ভিন্ন ভিন্ন ইনস্টলেশন পরে স্টক ইউটিউব ইনস্টলেশন পথ সনাক্ত করতে ব্যর্থ.
================================================
FILE: app/src/main/res/values-bn-rIN/strings.xml
================================================
বাতিল করুন
বন্ধ করুন
মাইক্রোজি প্রকল্পের ভিত্তিতে ভ্যান্সডের জন্য একটি কাস্টম জিএমএস বাস্তবায়ন।.
অনেক দরকারী বৈশিষ্ট্য সহ একটি পরিবর্তিত ইউটিউব ক্লায়েন্ট!
ভ্যান্সড, তবে ইউটিউব মিউজিকের জন্য! তুলনামূলকভাবে কম বৈশিষ্ট্য সমৃদ্ধ তবে আপনার চাহিদা পূরণ করবে।.
পুনরায় স্থির করুন
সংরক্ষণ করুন
আপনার পছন্দসই অ্যাপগুলি নির্বাচন করুন
সম্বন্ধে
গাইড
ম্যানেজার
লগস
সেটিংস
ম্যানেজার আপডেট করুন
আপনার ডিভাইসটিতে আপনার রুট অ্যাক্সেস আছে?
রুট অনুমতি মঞ্জুর করুন
শুরু করা যাক
অন্তত একটি অ্যাপ নির্বাচন করুন!
এটি কি তা জানেন না বা রুট ভার্সনটি ব্যবহার করতে চান না? কেবল নীচের নীল তীর চিহ্নটি ক্লিক করুন!
%1$s এর সম্বন্ধে
ডাউনলোড
তথ্য
লঞ্চ করুন
Reinstall
আনইনস্টল
আপডেট
অ্যাপস
পরিবর্তন নথি
%1$s ডাউনলোড করা হচ্ছে
ইনস্টল করুন
সর্বশেষ:
প্রথমে ভ্যান্সড মাইক্রোজি ইনস্টল করুন
রুট অনুমতি দেয়া হয়নি
সোশ্যাল মিডিয়া
আমাদের সমর্থন করুন
অনুপলব্ধ
ইনস্টল করা আছে:
অ্যাকসেন্ট রঙ
রূপ
আচরণ
ডাউনলোড করা ফাইলগুলি মুছে ফেলুন
সফলভাবে ফাইলগুলি মুছে ফেলা হয়েছে
এটি আমাদের অ্যাপ্লিকেশন কর্মক্ষমতা এবং ক্র্যাশ লগ সম্পর্কিত তথ্য সংগ্রহ করতে দেয়
ফায়ারবেস তথ্য বিশ্লেষণ
ভাষা
লিঙ্কগুলি ক্রোম কাস্টম ট্যাবসে খুলবে
ক্রোম কাস্টম ট্যাবস ব্যবহার করুন
%1$s পুশ বিজ্ঞপ্তিগুলি
%1$s এর আপডেট প্রকাশিত হলে পুশ বিজ্ঞপ্তি পান
নতুন সময়ের মান সংরক্ষণ করতে ব্যর্থ হয়েছে
রুট স্ক্রিপ্ট স্লিপ টাইম
মাউন্টিং ইস্যু ফিক্স করার জন্য দরকারী /data/adb/service.d/app.sh স্ক্রিপ্টে ব্যবহৃত স্লিপ টাইম মানটি অ্যাডজাস্ট করুন
সিস্টেম দ্বারা র্নির্ধারিত
থিম
গাঢ় থিম
হালকা থিম
ম্যানেজার আপডেট কেন্দ্র
কোনো নতুন আপডেট নেই
বিকল্প
লগগুলি সংরক্ষণ করা যায়নি
সফলভাবে লগ সংরক্ষণ করা হয়েছে
বিশদ
ইনস্টল করার জন্য %1$s ফাইল খুঁজে পাওয়া গেছে!
%1$s ইনস্টল করার জন্য প্রয়োজনীয় সমস্ত ফাইলগুলি ম্যানেজার খুঁজে পেয়েছে। আপনি কি ইনস্টল করতে চান?
%1$s ইনস্টল করার পছন্দগুলি
আপডেটের জন্য চেক করা হচ্ছে…
ভাষা(গুলি): %1$s
থিম: %1$s
সংস্করণ: %1$s
ত্রুটি
সহায়িকা
থামুন!
আপনি ভ্যান্সড ম্যাজিস্ক/TWRP সংস্করণ ব্যবহার করছেন যা বন্ধ হয়ে গেছে এবং আপনি এটিকে আপডেট করতে পারবেন না। দয়া করে ম্যাজিস্ক মডিউলটি সরিয়ে/TWRP ভ্যান্সড আনইনস্টলার ব্যবহার করে এটি মুছে ফেলুন।
ভ্যান্সড ইনস্টল করতে হলে, আপনাকে ডেভেলপার সেটিংসে MIUI অপটিমাইজেশন বন্ধ করতে হবে। (আপনি যদি ২০.২.২০ বা তার পরবর্তী xiaomi.eu ভিত্তিক রম ব্যবহার করেন তবে আপনি এই সতর্কবার্তাটি এড়িয়ে যেতে পারেন)
MIUI অপটিমাইজেশন সক্ষম করা আছে!
এই প্রক্রিয়া চলাকালীন দয়া করে অ্যাপ্লিকেশন থেকে কোনোমতেই প্রস্থান করবেন না!
পুনরায় ডাউনলোড করুন
নিশ্চিত করুন যে আপনি অ্যাপটি vancedapp.com, ভ্যান্সড ডিসকার্ড সার্ভার বা ভ্যান্সড গিটহাব থেকে ডাউনলোড করেছেন
সংস্করণ
স্বাগত
ভ্যান্সডের জন্য আপনার পছন্দসই ভাষা(গুলি) চয়ন করুন
সর্বশেষ
হাল্কা + %1$s
অন্তত একটি ভাষা নির্বাচন করুন!
কালো
অন্ধকার
ম্যানেজার বিকাশকারীরা
অন্যান্য অবদানকারী
উৎসগুলি
ভ্যান্সড টীম
System owner কে APK `chown` করতে ব্যর্থ, দয়া করে আবার চেষ্টা করুন।
%1$s ডাউনলোড করার সময় ত্রুটি
নতুন অ্যাকসেন্ট রঙ প্রয়োগ করতে ব্যর্থ হয়েছে
%1$s পেকেজ আনইনস্টল করা যাইনি
ইনস্টলেশনের জন্য প্রয়োজনীয় ফাইলগুলি খুঁজে পাওয়া যায় নি। ইনস্টল করার জন্য ফাইলগুলি পুনরায় ডাউনলোড করুন, তারপরে আবার চেষ্টা করুন।
স্টোরেজ থেকে কালো/গাঢ় থিমের জন্য এপিকে ফাইল সনাক্ত করতে ব্যর্থ, দয়া করে আবার চেষ্টা করুন।
ইনস্টল করা যায়নি কারণ ব্যবহারকারী ইনস্টল করা বাতিল করে দিয়েছেন।
ইনস্টলেশন ব্যর্থ হয়েছে কারণ অ্যাপ্লিকেশনটি ইতিমধ্যে ইনস্টল হওয়া আরেকটি অ্যাপ্লিকেশানের সাথে দ্বন্দ্ব করেছে। অ্যাপটির বর্তমান সংস্করণটি আনইনস্টল করুন, তারপরে আবার চেষ্টা করুন।
ইনস্টলেশন ব্যর্থ হয়েছে কারণ ব্যবহারকারী প্যাকেজটি ডাউনগ্রেড করার চেষ্টা করেছিল। স্টক অ্যাপ্লিকেশন থেকে আপডেটগুলি আনইনস্টল করুন, তারপরে আবার চেষ্টা করুন।
অজানা কারণে ইনস্টলেশন ব্যর্থ হয়েছে, আরও সহায়তার জন্য আমাদের টেলিগ্রাম বা ডিসকর্ডে যোগ দিন। অ্যাডভান্সড মেনু থেকে স্ক্রিনশটটিও সংযুক্ত করুন
ইনস্টলেশন ব্যর্থ হয়েছে কারণ ইনস্টলেশন ফাইলটি আপনার ডিভাইসের উপযুক্ত নয়। সেটিংসে ডাউনলোড করা ফাইল মুছে ফেলুন, তারপরে আবার চেষ্টা করুন।
ইনস্টলেশন ব্যর্থ হয়েছে কারণ এপিকে ফাইলগুলি দূষিত, দয়া করে আবার চেষ্টা করুন।
ইনস্টলেশন ব্যর্থ হয়েছে কারণ এমআইইউআই অপটিমাইজেশন সক্ষম আছে। এমআইইউআই অপ্টিমাইজেশন অক্ষম করুন, তারপরে আবার চেষ্টা করুন।
ইনস্টলেশন ব্যর্থ হয়েছে কারণ এপিকে স্বাক্ষর যাচাইকরণ সক্ষম করা আছে। এপিকে স্বাক্ষর যাচাইকরণ অক্ষম করুন, তারপরে আবার চেষ্টা করুন।
ইনস্টলেশন ব্যর্থ হয়েছে কারণ ডিভাইসে পর্যাপ্ত ফাঁকা জায়গা নেই।
ইনস্টলার থেকে কালো/গাঢ় থিমের জন্য সফটওয়্যারের ফাইল খুঁজতে ব্যর্থ। ম্যানেজারের ডেটা সাফ করুন, তারপরে আবার চেষ্টা করুন।
স্পিল্ট ফাইলগুলি ইনস্টল করার পরে স্টক ইউটিউবের ইনস্টলেশন পাথ সনাক্ত করতে ব্যর্থ।
================================================
FILE: app/src/main/res/values-ca-rES/strings.xml
================================================
Cancel·lar
Tanca
Implementació modificada de GMS per a Cancer basada en el Projecte microG.
Una aplicació modificada de YouTube amb moltes característiques útils!
Vanced, però per a YouTube Music! Amb relativament menys característiques, però que assoleix les vostres necessitats.
Restableix
Desa
Seleccioneu les aplicacions
Quant a
Guia
Gestor
Registre
Configuració
Gestionador d\'actualitzacions
Té el vostre dispositiu accés de Superusuari (\'Root\')?
Concedir permís de Superusuari (\'Root\')
Comencem-hi
Selecciona com a mínim una aplicació!
No saps què és o no vols utilitzar la versió de Superusuari (\'Root\')? Simplement clica la fletxa blava de sota!
Sobre %1$s
Descarrega
Informació
Llança
Reinstall
Desinstal·la
Actualitza
Aplicacions
Registre de canvis
Descarregant %1$s
Instal·lar
Darrera:
Instal·la primer Vanced microG
L\'accés arrel no s\'ha concedit
Xarxes socials
Dóna\'ns suport
No disponible
Instal·lat:
Color d\'èmfasi
Aparença
Comportament
Esborrar fitxers descarregats
Fitxers netejats correctament
Permet-te\'ns recollir informació sobre el rendiment de l\'aplicació i els registres d\'error
Estadístiques de Firebase
Llengua
Els enllaços s\'obriran en pestanyes personalitzades del Chrome
Utilitza pestanyes personalitzades del Chrome
%1$s notificacions automàtiques
Rebeu notificacions automàtiques quan es publiqui una actualització de%1$s
Error a l\'hora de guardar un nou valor de temps
Temps de repòs de la seqüència de comandes de Superusuari (\'Root\')
Ajusta el temps de repòs emprat a l\'script /data/adb/service.d/app.sh, útil per solventar problemes de muntatge
Per defecte del sistema
Tema
Tema fosc
Tema clar
Gestor d\'actualitzacions
Cap actualització
Variant
No s\'han pogut desar els registres
Registres desats satisfactòriament
Detalls
Arxius d\'instal·lació de %1$s detectats!
El gestionador ha trobat tots els arxius necessaris per a l\'instal·lació de %1$s. Voleu instalar-ho?
Preferències d\'instal·lació de %1$s
Cercant actualitzacions…
Llengua(es): %1$s
Tema: %1$s
Versió: %1$s
Error
Guia
Atura\'t!
You are using the Magisk/TWRP version of Vanced, which is discontinued and cannot be updated using this app. Please remove it by removing the Magisk module/using TWRP Vanced uninstaller.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Redownload
Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub
Version
Benvingut
Trieu els vostres idiomes preferits per a Vanced
Latest
Light + %1$s
Select at least one language!
Black
Dark
Gestor de desenvolupadors
Other Contributors
Fonts
Equip avançat
Failed to `chown` APK to system owner, please try again.
Error en descarregar %1$s
Failed to apply new accent color
Error en instal·lar el paquet %1$s
Failed to locate the required files for installation. Re-download the installation files, then try again.
Failed to locate apk file for black/dark theme from storage, please try again.
Installation failed because the user aborted the installation.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
La instal·lació ha fallat perquè el fitxer d\'instal·lació és incompatible amb el dispositiu. Esborreu els fitxers descarregats a Configuració i torneu-ho a provar.
La instal·lació ha fallat perquè els fitxers apk estan danyats. Torneu-ho a provar.
La instal·lació ha fallat perquè l\'optimització MIUI està activada. Desactiveu l\'optimització MIUI i torneu-ho a provar.
La instal·lació ha fallat perquè la verificació de la signatura apk està activada. Desactiveu la verificació de la signatura apk i torneu-ho a provar.
Installation failed because the device doesn\'t have enough free space.
Failed to find apk file for black/dark theme from the installer. Clear app data of Manager, then try again.
Failed to locate the stock YouTube installation path after split installation.
================================================
FILE: app/src/main/res/values-ckb-rIR/strings.xml
================================================
هەڵوەشاندنەوە
داخستن
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
ڕێکخستنەوە
پاراستن
بەرنامەکانت دیاریبکە
دەربارە
زانیاری
بەرێوەبردن
تۆماری نوێکاری
ڕێکخستنەکان
نوێکردنەوەی بەرنامە
مۆبایلەکەت ڕۆت کراوە؟
ڕێگەپێدانی ڕۆت Root
دەست پێکردن
لانیکەم دانەیەک دیاریبکە!
ئەگەر نازانیت ئەمە چییە یان ناتەوێ بەشێوەی ڕۆت بەکاری بهێنیت، پەنجە بنێ بە دوگمە شینەکەدا!
دەربارەی %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
بەرنامەکان
گۆڕانکارییەکان
داگرتنی %1$s
دامەزراندن
دوایین:
Install Vanced microG first
ڕێگەپێدانی Root نەدراوە
تۆڕە کۆمەڵایەتییەکان
پشتگیریکردن
بەردەست نیە
دامەزرێنراو:
ڕەنگی سەرەکی
ڕووکار
ڕێکخستن
سڕینەوەی فایلە داگیراوەکان
فایلەکان بەسەرکەتوویی سڕانەوە
کۆکردنەوەی زانیاری لەکاتی بوونی کێشەو تۆماری هەڵە لە بەرنامەکەدا
Firebase شیکردنەوەی
زمان
بەستەرەکان لە پەنجەرەی تایبەتی گۆگڵ کرۆمدا دەکرێنەوە
بەکارهێنانی پەنجەرەی تایبەتی گۆگڵ کرۆم
%1$s وەرگرتنی ئاگادارکردنەوەکان
وەرگرتنی ئاگادارکردنەوە کاتێ نوێکردنەوەی %1$s بەردەست کرا
پاشکەوتکردنی بیرخەرەوە سەرکەوتو نەبوو
ماوەی وەستاندنی سکریپتی Root
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
سیستەم
ڕووکار
تاریک
ڕووناک
ناوەندی نوێکردنەوە
هیچ نوێکردنەوەیەک نیە
جۆر
نەتوانرا تۆمارەکە بپارێزرێت
تۆمارەکە بەسەرکەوتوویی پارێزرا
Details
%1$s فایل دۆزرایەوە بۆ دابەزاندن!
بەرنامەکە هەموو ئەو فایلانەی دۆزیەوە %1$s کە پێویستن بۆ دابەزاندن، ئەتەوێ دایان مەزرێنیت؟
%1$s ڕێکخستنەکانی دامەزراندن
پشکنین بۆ نوێکردنەوە…
زمان: %1$s
ڕووکار: %1$s
وەشان: %1$s
هەڵەیەک ڕوویدا
زانیاری
وەستاندن!
تۆ وەشانی Magisk/TWRP ـی Vanced بەکاردێنیت، کە ناتوانرێت بە بەکارهێنانی ئەم بەرنامەیە نوێبکرێتەوە، تکایە لایبدە بە سڕینەوەی مۆدیولی ماگیسک/لەڕێی TWRP Vanced.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
باشترکردنی MIUI چالاککراوە!
Please do NOT exit the app during this process!
داگرتنەوە
دڵنیابە کە بەرنامەکەت لە سایتی vancedapp.com، سێرڤەری دیسکۆرد یان Vanced GitHub داگرتووە
وەشان
بەخێربێیت
زمانێک هەڵبژێرە بۆ بەکارهێنانی بەرنامەکە
دوایین
ڕووناک + %1$s
لانیکەم زمانێک دیاریبکە!
ڕەش
تاریک
کراوە بە کوردی لەلایەن: گۆران غەریب(کوردرۆید)
وەرگێڕانی کوردی - گۆران غەریب
سەرچاوەکان
Vanced تیمی
سەرکەوتو نەبوو `chown` بۆ دانان وەک بەرنامەی سیستەم, تکایە دووبارە هەوڵبدەرەوە.
کێشە ڕوویدا لە داگرتنی %1$s
گۆڕینی ڕەنگ سەرکەوتو نەبوو
سڕینەوەی %1$s سەرکەوتو نەبوو
سەرکەوتو نەبوو لە دۆزینەوەی فایلە پێویستەکان بۆ دامەزراندن، فایلە پێویستیەکان دووبارە دابگرەوە بۆ جێگیرکردن، پاشان دووبارە هەوڵبدەرەوە.
سەرکەوتوو نەبوو لەدۆزینەوەی شوێنی فایلی Apk بۆ ڕووکاری ڕەش/تاریک لە بیرگەدا، تکایە دووبارە هەوڵبدەرەوە.
دامەزراندن سەرکەوتو نەبوو، لەبەر ئەوەی بەکارهێنەر کۆتاییهێنا بە دابەزاندنەکە.
دامەزراندن سەرکەوتو نەبوو لەبەرئەوەی وەشانێکی تری بەرنامەکە پێشتر دامەزرێنراوە، وەشانی ئێستای Vanced بسڕەوە و پاشان دووبارە هەوڵبدەرەوە.
دامەزراندن سەرکەوتو نەبوو، لەبەر ئەوەی بەکارهێنەر هەوڵیدا بۆ نزمکردنەوەی وەشان، نوێکارییەکانی بەرنامەی بنەڕەتی YouTube بسڕەوە و دووبارە هەوڵبدەرەوە.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
دامەزراندن سەرکەوتو نەبوو لەبەرئەوەی فایلی دابەزاندن گونجاو نییە لەگەڵ ئامێرەکەت، فایلە داگیراوەکان بسڕەوە و پاشان دووبارە هەوڵبدەرەوە.
دامەزراندن سەرکەوتوو نەبوو لەبەرئەوەی فایلی apk تێکچووە، تکایە دووبارە هەوڵبدرەوە.
دامەزراندن سەرکەوتو نەبوو لەبەرئەوەی باشکردنی ڕووکاری MIUI چالاککراوە، باشکردنی ڕووکاری MIUI ناچالاک بکە ودووبارە هەوڵبدەرەوە.
دامەزراندن سەرکەوتو نەبوو لەبەرئەوەی سەلماندنەکانی apk چالاککراوە، سەلماندنی دووپاتکردنەوەی ئیمزای apk ناچالاک بکە و پاشان دووبارە هەوڵبدەرەوە.
Installation failed because the device doesn\'t have enough free space.
سەرکەوتو نەبوو لە دۆزینەوەی فایلی Apk بۆ ڕووکاری ڕەش/تاریک لە دامەزرێنەرەکەدا. داتای بەرنامەکە بسڕەوە لە ڕێکبەندیەکاندا و دووبارە هەوڵبدەرەوە.
سەرکەوتو نەبوو لە دۆزینەوەی بەرنامەی بنەڕەتی YouTube لەشوێنی دابەزاندن لەپاش دامەزراندنی پێکهاتەکان.
================================================
FILE: app/src/main/res/values-cs-rCZ/strings.xml
================================================
Zrušit
Zavřít
Vlastní implementace GMS pro Vanced založená na projektu microG.
Upravený klient YouTube se spoustou užitečných funkcí!
Vanced, ale YouTube Music! Obsahuje o trochu méně funkcí, ale splní vaše potřeby.
Resetovat
Uložit
Vyberte své aplikace
O aplikaci
Průvodce
Manager
Záznamy
Nastavení
Aktualizovat Manager
Má vaše zařízení oprávnění root?
Udělit oprávnění root
Začínáme
Vyberte alespoň jednu aplikaci!
Nevíte, co to je, nebo nechcete používat verzi s přístupem root? V tom případě klikněte na modrou šipku níže!
O aplikaci %1$s
Stáhnout
Informace
Spustit
Přeinstalovat
Odinstalovat
Aktualizovat
Aplikace
Seznam změn
Stahování %1$s
Nainstalovat
Nejnovější:
Nejprve nainstalujte Vanced microG
Root přístup nebyl udělen
Sociální média
Podpořte nás
Není k dispozici
Nainstalováno:
Doplňková barva
Vzhled
Chování
Vymazat stažené soubory
Vymazání souborů proběhlo úspěšně
Toto nám umožňuje shromažďovat informace o výkonu aplikace a záznamy o selhání
Firebase analytika
Jazyk
Odkazy se budou otevírat na vlastních kartách prohlížeče Chrome
Používat vlastní karty prohlížeče Chrome
%1$s vyskakovací oznámení
Po vydání aktualizace pro %1$s obdržíte vyskakovací oznámení
Nepodařilo se uložit novou hodnotu času
Doba nečinnosti kořenového skriptu
Upravte hodnotu doby nečinnosti použitou ve skriptu /data/adb/service.d/app.sh, která je užitečná pro opravu problémů s připojením
Výchozí systémové nastavení
Motiv
Tmavý motiv
Světlý motiv
Centrum aktualizací aplikace Manager
Žádné nové aktualizace
Varianta
Záznamy nelze uložit
Záznamy byly úspěšně uloženy
Podrobnosti
Počet zjištěných instalačních souborů: %1$s
Manager nalezl všechny soubory potřebné pro instalaci aplikace %1$s. Chcete ji nyní nainstalovat?
Předvolby instalace: %1$s
Kontrola aktualizací…
Jazyk(y): %1$s
Motiv: %1$s
Verze: %1$s
Chyba
Průvodce
Zadržte!
Používáte verzi Vanced pro Magisk/TWRP, jejíž vývoj byl ukončen a kterou nelze pomocí této aplikace aktualizovat. Odstraňte ji prosím odebráním modulu Magisk použitím Vanced odinstalátoru v TWRP.
Chcete‑li nainstalovat Vanced, MUSÍTE vypnout optimalizace MIUI v nastavení pro vývojáře. (Toto varování můžete ignorovat, pokud používáte ROM ze 20. 2. 2020 nebo novější založenou na xiaomi.eu)
Optimalizace MIUI jsou zapnuty!
Během tohoto procesu NEUKONČUJTE aplikaci!
Stáhnout znovu
Ujistěte se, že jste si aplikaci stáhli z našeho webu vancedapp.com, z našeho Vanced Discord serveru nebo z našeho GitHubu
Verze
Vítejte
Vyberte si jeden nebo více preferovaných jazyků pro Vanced
Nejnovější
Světlý + %1$s
Vyberte alespoň jeden jazyk!
Černý
Tmavý
Vývojáři aplikace Manager
Další přispěvatelé
Zdrojové kódy
Tým Vanced
Nepodařilo se změnit vlastníka souboru APK na vlastníka systému, zkuste to prosím znovu.
Chyba při stahování %1$s
Nepodařilo se nastavit novou doplňkovou barvu
Nepodařilo se odinstalovat balíček %1$s
Nepodařilo se najít požadované soubory pro instalaci. Stáhněte znovu instalační soubory a poté to zkuste znovu.
Ve vnitřním úložišti se nepodařilo najít soubor APK pro černý/tmavý motiv. Zkuste to prosím znovu.
Instalace se nezdařila, protože uživatel přerušil instalaci.
Instalace se nezdařila, protože aplikace je v konfliktu s již nainstalovanou aplikací. Odinstalujte aktuální verzi aplikace a poté to zkuste znovu.
Instalace se nezdařila, protože se uživatel pokusil balíček downgradovat. Odinstalujte aktualizace z výchozí aplikace a poté to zkuste znovu.
Instalace se z neznámých důvodů nezdařila. Pro další podporu se připojte k našemu Telegramu nebo Discordu. Připojte také snímek obrazovky z nabídky Pokročilé
Instalace se nezdařila, protože instalační soubor není kompatibilní s vaším zařízením. Vymažte v Nastavení stažené soubory a poté to zkuste znovu.
Instalace se nezdařila, protože soubory APK jsou poškozeny. Zkuste to prosím znovu.
Instalace se nezdařila, protože je zapnuta optimalizace MIUI. Vypněte optimalizaci MIUI a poté to zkuste znovu.
Instalace se nezdařila, protože je povoleno ověření podpisu APK. Zakažte ověření podpisu APK a poté to zkuste znovu.
Instalace se nezdařila, protože v zařízení není dostatek volného místa.
Nepodařilo se najít soubor APK pro černý/tmavý motiv z instalátoru. Vymažte data aplikace Manager a zkuste to znovu.
Nepodařilo se najít výchozí cestu instalace YouTube po rozdělené instalaci.
================================================
FILE: app/src/main/res/values-da-rDK/strings.xml
================================================
Annuller
Luk
En brugerdefineret GMS implementering for Vanced baseret på microG Project.
En modificeret YouTube klient med mange nyttige funktioner!
Vanced, men for YouTube Music! Relativt mindre funktionsrig men opfylder dine behov.
Nulstil
Gem
Vælg Dine Apps
Om
Guide
Manager
Logfiler
Indstillinger
Opdaterings Manager
Er Din Enhed Rooted?
Tildel Root Tilladelse
Lad os komme igang
Vælg mindst én app!
Ved du ikke hvad dette er, eller ønsker du ikke at bruge root versionen? Bare klik på den blå pil nedenfor!
Om %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
Ændringslog
Downloader %1$s
Installer
Seneste:
Installer først Vanced microG
Root adgang ikke tildelt
Sociale medier
Støt os
Utilgængelig
Installeret:
Sekundær farve
Udseende
Adfærd
Ryd hentede filer
Filer ryddet succesfuldt
Dette giver os mulighed for at indsamle oplysninger om appens ydeevne og nedbruds logs
Firebase analyse
Sprog
Links vil åbne i Chrome Custom Faner
Brug Chrome Custom Faner
%1$s Push Notifikationer
Modtag push meddelelser når der er en ny opdatering til %1$s
Kunne ikke gemme ny tidsværdi
Root script dvale tid
Justér dvale tid brugt i /data/adb/service.d/app.sh script, bruges til at rette monteringsproblemer
System Standard
Tema
Mørkt tema
Lyst tema
Manager opdaterings center
Ingen nye opdateringer
Variant
Kunne ikke gemme logfil
Logfiler gemt succesfuldt
Detaljer
%1$s installationsfiler fundet!
Manageren opdagede, at alle nødvendige filer til %1$s installationen blev fundet. Vil du installere den?
%1$s Installationsindstillinger
Søger efter opdateringer…
Sprog:%1$s
Tema: %1$s
Version: %1$s
Fejl
Vejledning
Stop!
Det ser ud som om du bruger Magisk/TWRP versionen af Vanced. Den er ikke længere understøttet og kan derfor ikke opdateres igennem denne app. Vær venlig at fjerne magisk modulet/brug TWRP Vanced uninstaller.
For at installere Vanced er du NØDT til at slå MIUI optimering fra i udvikler indstillingerne. (Du kan ignorere denne advarsel hvis du bruger en 20.2.20 eller nyere xiaomi.eu baseret ROM)
MIUI Optimering er aktiveret!
Afslut venligst IKKE appen under denne proces!
Hent igen
Venligst sørg for kun at have downloaded appen fra vancedapp.com, Vanced Discord serveren eller Vanced GitHub siden
Version
Velkommen
Vælg dit fortrukne sprog til Vanced
Seneste
Lys + %1$s
Vælg mindst ét sprog!
Sort
Mørk
Manager udviklere
Øvrige Bidragsydere
Kilder
Vanced holdet
Kunne ikke vælge Apk til systemejer, Prøv igen.
Fejl i download af %1$s
Kunne ikke anvende ny accentfarve
Fejlede i at fjerne pakke %1$s
Kunne ikke finde de påkrævede filer til installation. Download installationsfilerne igen, og prøv igen.
Kunne ikke finde apk-fil til sort/mørkt tema fra lager. Prøv venligst igen.
Installationen fejlede fordi brugeren lukkede installationen.
Installationen fejlede fordi appen konflikter med en allerede installeret app. Fjern den nuværende version af appen og prøv igen.
Installationen fejlede fordi brugeren prøvede at nedgradere pakken. Fjern opdateringer fra Youtube appen og prøv igen.
Installation mislykkedes af ukendte årsager, kom på vores Telegram eller Discord for yderligere hjælp. Vedhæft venligst også et skærmbillede fra menuen Avanceret
Installationen fejlede fordi installationsfilen er inkompatibel med din enhed. Ryd de downloadede filer i indstillingerne og prøv igen.
Installationen fejlede fordi apk filerne er beskadiget, prøv igen.
Installationen fejlede fordi MIUI optimering er slået til. Slå MIUI optimering fra og prøv igen.
Installationen fejlede fordi apk signatur verifikation er slået til. Slå apk signatur verifikation fra og prøv igen.
Installationen mislykkedes, fordi enheden ikke har nok ledig plads.
Kunne ikke finde apk fil til sort/mørkt tema fra installationsprogrammet. Ryd app data fra Manager, og prøv derefter igen.
Kunne ikke finde lageret YouTube-installationsstien efter split installation.
================================================
FILE: app/src/main/res/values-de-rDE/strings.xml
================================================
Abbrechen
Schließen
Eine eigene GMD-Implementation für Vanced, basierend auf dem MicroG-Projekt.
Ein modifizierter YouTube-Client mit vielen nützlichen Funktionen!
Vanced, aber für YouTube Music! Weniger Funktionen, stillt aber deine Bedürfnisse.
Zurücksetzen
Speichern
Wähle deine Apps
Über
Anleitung
Manager
Protokolle
Einstellungen
Update Manager
Ist dein Gerät gerootet?
Root-Berechtigung erteilen
Los geht\'s
Wähle mindestens eine App!
Du weißt nicht was das ist, oder willst die Root-Version nicht benutzen? klicke einfach den blauen Pfeil unten an!
Über %1$s
Download
Info
Starten
Neu installieren
Deinstallieren
Aktualisieren
Anwendungen
Änderungen
%1$s wird heruntergeladen
Installieren
Neueste:
Installiere zuerst Vanced MicroG
Root-Zugriff nicht erteilt
Soziale Medien
Unterstütze uns
Nicht verfügbar
Installiert:
Akzentfarbe
Darstellung
Verhalten
Heruntergeladene Dateien löschen
Daten erfolgreich gelöscht
Dadurch können wir Informationen über die Performance der App und Absturzprotokolle sammeln
Firebase-Analyse
Sprache
Links werden in Chrome Custom Tabs geöffnet
Verwende Chrome Custom Tabs
%1$s Push-Benachrichtigungen
Push-Benachrichtigungen erhalten, wenn ein Update für %1$s veröffentlicht wird
Speichern des neuen Zeitwertes fehlgeschlagen
Wartezeit des Root-Skriptes
Anpassen des Wertes für die Ruhezeit, der im Skript /data/adb/service.d/app.sh verwendet wird, nützlich zur Behebung von Problemen beim Einbinden
Systemstandard
Theme
Dunkles Theme
Helles Theme
Update Center
Keine neuen Updates
Variante
Protokolle konnten nicht gespeichert werden
Protokolle erfolgreich gespeichert
Details
%1$s Installationsdateien erkannt!
Manager hat festgestellt, dass alle notwendigen Dateien für die Installation von %1$s gefunden wurden. Möchtest Du sie installieren?
%1$s Installationsoptionen
Suche nach Updates…
Sprache(n): %1$s
Theme: %1$s
Version: %1$s
Fehler
Erklärung
Stopp!
Du benutzt die Magisk/TWRP-Version von Vanced, die nicht mehr unterstützt wird und mit dieser App nicht aktualisiert werden kann. Bitte entferne siie indem du das Magisk-Modul mit dem TWRP Vanced Uninstaller entfernst.
Um Vanced installieren zu können, MÜSSEN Sie MIUI Optimierungen in den Entwickleroptionen deaktivieren. (Bitte ignorieren Sie diese Warnung, wenn Sie xiaomi.eu Roms mit der Version 20.2.20 oder höher verwenden.)
MIUI Optimierungen sind aktiviert!
Bitte schließen Sie die App NICHT während dieses Prozesses!
Erneut herunterladen
Stelle sicher, dass du die App von vancedapp.com, dem Vanced Discord Server oder dem Vanced GitHub heruntergeladen hast
Version
Willkommen
Wählen Sie ihre bevorzugte Sprache(n) für Vanced
Neueste
Hell + %1$s
Wähle mindestens eine Sprache aus!
Schwarz
Dunkel
Manager-Entwickler
Weitere Mitwirkende
Quellen
Vanced Team
Fehler beim `chown` der APK zum Systembesitzer, bitte versuche es erneut.
Download von %1$s fehlgeschlagen
Neue Akzentfarbe konnte nicht angewendet werden
Entfernen von %1$s fehlgeschlagen
Die benötigten Dateien für die Installation konnten nicht gefunden werden. Laden Sie die Installationsdateien erneut herunter und versuchen Sie es erneut.
Apk-Datei für schwarzes/dunkles Theme konnte nicht gefunden werden, bitte versuchen Sie es erneut.
Installation fehlgeschlagen, da der Benutzer die Installation abgebrochen hat.
Die Installation ist fehlgeschlagen, weil die App in Konflikt mit einer bereits installierten App steht. Deinstalliere die aktuell installierte Version der App und versuchen es dann erneut.
Installation fehlgeschlagen, da der Benutzer versucht hat, eine ältere Version des Paketes zu installieren. Deinstallieren Sie Updates von der YouTube App und versuchen Sie es erneut.
Die Installation ist aus unbekannten Gründen fehlgeschlagen. Betrete unser Telegram Chat oder Discord Server für weitere Unterstützung und halte bitte einen Screenshot aus dem erweiterten Menü bereit
Installation fehlgeschlagen, da die Installationsdatei nicht mit Ihrem Gerät kompatibel ist. Löschen Sie heruntergeladene Dateien in den Einstellungen, dann versuchen Sie es erneut.
Installation fehlgeschlagen, da die apk-Dateien beschädigt sind, bitte versuchen Sie es erneut.
Installation fehlgeschlagen, da die MIUI-Optimierung aktiviert ist. Deaktivieren Sie die MIUI-Optimierung, und versuchen Sie es erneut.
Installation fehlgeschlagen, da die apk Signaturüberprüfung aktiviert ist. Deaktivieren Sie die apk Signaturüberprüfung, dann versuchen Sie es erneut.
Installation fehlgeschlagen, da das Gerät nicht genügend freien Speicherplatz hat.
Apk-Datei für schwarzes/dunkles Theme konnte nicht gefunden werden. Löschen Sie die App-Daten des Managers und versuchen Sie es erneut.
Fehler beim Auffinden des YouTube-Installationspfades nach der geteilten Installation.
================================================
FILE: app/src/main/res/values-el-rGR/strings.xml
================================================
Ακύρωση
Κλείσιμο
Μια πειραγμένη εκδοχή των GMS (υπηρεσιών κινητής της Google) για το Vanced βασισμένη στο έργο του microG.
Μια πειραγμένη εφαρμογή του YouTube με πολλά χρήσιμα χαρακτηριστικά!
Vanced, αλλά για το YouTube Music! Λιγότερο πλούσιο σε χαρακτηριστικά αλλά καλύπτει τις ανάγκες σας.
Επαναφορά
Αποθήκευση
Επιλέξτε τις εφαρμογές σας
Πληροφορίες
Οδηγός για το Vanced
Διαχειριστής Vanced
Αρχείο καταγραφής σφαλμάτων
Ρυθμίσεις
Ενημέρωση Διαχειριστή Vanced
Έχετε πρόσβαση Root στη συσκευή σας;
Χορήγηση Άδειας Root
Ας ξεκινήσουμε
Επιλέξτε τουλάχιστον μια εφαρμογή!
Δεν ξέρετε τι είναι αυτό ή δεν θέλετε να χρησιμοποιήσετε την έκδοση root; Τότε απλώς πατήστε το μπλε βέλος παρακάτω!
Σχετικά με το %1$s
Λήψη
Πληροφορίες
Εκκίνηση
Επανεγκατάσταση
Απεγκατάσταση
Ενημέρωση
Εφαρμογές
Αρχείο καταγραφής αλλαγών
Λήψη %1$s
Εγκατάσταση
Τελευταία έκδοση:
Εγκαταστήστε πρώτα το Vanced microG
Δεν επιτράπηκε η πρόσβαση Root
Μέσα Κοινωνικής Δικτύωσης
Υποστηρίξτε μας
Μη διαθέσιμο
Εγκατεστημένη έκδοση:
Χρώμα Διεπαφής
Εμφάνιση
Συμπεριφορά
Εκκαθάριση ληφθέντων αρχείων
Επιτυχής εκκαθάριση αρχείων
Αυτό μας επιτρέπει να συλλέγουμε πληροφορίες σχετικά με την επίδοση της εφαρμογής και σχετικά με καταγραφές σφαλμάτων λογισμικού
Firebase Analytics
Γλώσσα
Οι σύνδεσμοι θα ανοίγουν σε προσαρμοσμένες καρτέλες chrome
Χρήση προσαρμοσμένων καρτέλων Chrome
Ειδοποιήσεις Push για το %1$s
Λάβεται ειδοποιήσεις push όταν υπάρχουν διαθέσιμες ενημερώσεις για το %1$s
Αποτυχία αποθήκευσης νέας τιμής χρόνου
Σενάριο Χρόνου Αδράνειας Root
Ρυθμίστε στην τιμη του χρόνου αδράνειας που βρίσκετε στο αρχείο σενάριο /data/adb/service.d/app.sh, χρήσιμο για επιδιόρθωση προβλημάτων προσάρτησης
Προεπιλογή Συστήματος
Θέμα
Σκουρόχρωμο Θέμα
Ανοιχτόχρωμο Θέμα
Κέντρο ενημερώσεων
Δεν υπάρχουν νέες ενημερώσεις
Παραλλαγή
Αδυναμία αποθήκευσης αρχείου καταγραφής σφαλμάτων
Επιτυχής αποθήκευση αρχείου καταγραφής σφαλμάτων
Πληροφορίες
Ανιχνεύτηκαν τα αρχεία εγκατάστασης του %1$s!
Ο Διαχειριστής του Vanced ανίχνευσε ότι βρέθηκαν όλα τα απαραίτητα αρχεία για την εγκατάσταση του %1$s. Θέλετε να εγκατασταθεί;
Προτιμήσεις Εγκατάστασης του %1$s
Έλεγχος για ενημερώσεις…
Γλώσσα(/ες): %1$s
Θέμα: %1$s
Έκδοση: %1$s
Σφάλμα
Οδηγίες
Σταματήστε!
Χρησιμοποιείτε την έκδοση Magisk/TWRP του Vanced, η οποία δεν υποστηρίζεται πλέον και δεν μπορεί να ενημερωθεί μέσω αυτής της εφαρμογής. Παρακαλούμε αφαιρέστε αυτή την έκδοση αφαιρώντας το Magisk Module/χρησιμοποιόντας το πρόγραμμα κατάργησης TWRP Vanced.
Για να εγκαταστήσετε το Vanced, ΠΡΕΠΕΙ να απενεργοποιήσετε τις Βελτιστοποιήσεις MIUI στις ρυθμίσεις για προγραμματιστές. (Μπορείτε να αγνοήσετε αυτή την προειδοποίηση αν χρησιμοποιείτε την έκδοση ROM 20.2.20 ή μεταγενέστερη, βάσει του xiaomi.eu)
Η βελτιστοποίηση MIUI είναι ενεργή!
Παρακαλώ ΜΗΝ βγείτε από την εφαρμογή κατά τη διάρκεια αυτής της διαδικασίας!
Επανάληψη λήψης
Βεβαιωθείτε ότι κάνατε λήψη της εφαρμογής από το vancedapp.com, τον διακομιστή Discord του Vanced ή το GitHub του Vanced
Έκδοση
Καλώς ορίσατε
Επιλέξτε την(/ις) γλώσσα(/ες) που επιθυμείτε για το Vanced
Τελευταία
Ανοιχτόχρωμο + %1$s
Επιλέξτε τουλάχιστον μια γλώσσα!
Μαύρο
Σκουρόχρωμο
Προγραμματιστές Διαχειριστή Vanced
Άλλοι Συνεισφέροντες
Πηγές
Η ομάδα του Vanced
Αποτυχία παραχώρησης ιδιοκτησίας του APK στον κάτοχο συστήματος, παρακαλούμε προσπαθείστε ξανά.
Σφάλμα λήψης του %1$s
Αδυναμία εφαρμογής χρώματος διεπαφής
Αποτυχία απεγκατάστασης πακέτου %1$s
Αδυναμία εντοπισμού των απαιτούμενων αρχείων για την εγκατάσταση. Κατεβάστε τα αρχεία εγκατάστασης, και προσπαθήστε ξανά.
Αδυναμία εντοπισμού του αρχείου apk σκουρόχρωμου/απολύτου μαύρου θέματος στον αποθηκευτικό χώρο, παρακαλώ προσπαθήστε ξανά.
Η εγκατάσταση απέτυχε διότι ο χρήστης ακύρωσε την εγκατάσταση.
Η εγκατάσταση απέτυχε διότι η εφαρμογή αντικρούεται με μια ήδη εγκατεστημένη εφαρμογή. Κάντε απεγκατάσταση την τρέχουσα έκδοση της εφαρμογής, και μετά προσπαθήστε ξανά.
Η εγκατάσταση απέτυχε διότι ο χρήστης προσπάθησε να υποβαθμίσει το πακέτο. Απεγκαταστήστε τις ενημερώσεις της αρχικής εφαρμογής YouTube, στη συνέχεια προσπαθήστε ξανά.
Η εγκατάσταση απέτυχε για άγνωστους λόγους, μπείτε στο Telegram ή στο Discord μας για περαιτέρω υποστήριξη. Παρακαλώ επισυνάψτε ένα στιγμιότυπο οθόνης από τις επιλογές για προχωρημένους
Η εγκατάσταση απέτυχε διότι το αρχείο εγκατάστασης είναι μη συμβατό με την συσκευή σας. Κάντε εκκαθάριση των ληφθέντων αρχείων στις ρυθμίσεις, στην συνέχεια προσπαθήστε ξανά.
Η εγκατάσταση απέτυχε διότι τα αρχεία apk έχουν διαφθαρεί, παρακαλώ προσπαθήστε ξανά.
Η εγκατάσταση απέτυχε διότι η βελτιστοποίηση MIUI είναι ενεργή. Απενεργοποιήστε την βελτιστοποίηση MIUI, και προσπαθήστε ξανά.
Η εγκατάσταση απέτυχε διότι η επαλήθευση υπογραφής των apk είναι ενεργή. Απενεργοποιήστε την επαλήθευση υπογραφής apk, στην συνέχεια προσπαθήστε ξανά.
Η εγκατάσταση απέτυχε διότι δεν υπάρχει αρκετός ελεύθερος χώρος στη συσκευή σας.
Αδυναμία εύρεσης του αρχείου apk σκουρόχρωμου/απολύτου μαύρου θέματος από το πρόγραμμα εγκατάστασης. Κάνετε εκκαθάριση των δεδομένων του διαχειριστή Vanced, στην συνέχεια προσπαθήστε ξανά.
Αδυναμία εύρεσης της διαδρομής εγκατάστασης της αρχικής εφαρμογής YouTube μετά από εγκατάσταση σε τεμάχια.
================================================
FILE: app/src/main/res/values-es-rES/strings.xml
================================================
Cancelar
Cerrar
Una implementación de GMS personalizada para Vanced basada en el proyecto microG.
¡Un cliente de YouTube modificado con muchas características útiles!
Vanced, pero para YouTube Music! Tiene relativamente menos características, pero satisface tus necesidades.
Restablecer
Guardar
Selecciona tus aplicaciones
Información
Guía
Manager
Registros
Ajustes
Actualizar Manager
¿Su dispositivo está rooteado?
Otorgar permiso root
Comencemos
¡Seleccione al menos una aplicación!
¿No sabes que es esto o no quieres usar la versión root? ¡Haz clic en la flecha azul de abajo!
Acerca de %1$s
Descargar
Info
Iniciar
Reinstalar
Desinstalar
Actualizar
Apps
Historial de actualizaciones
Descargando %1$s
Instalar
Más reciente:
Primero, instala Vanced microG
Acceso root no concedido
Redes Sociales
Apóyanos
No Disponible
Instalado:
Color de Acento
Apariencia
Comportamiento
Limpiar archivos descargados
Archivos limpiados exitosamente
Esto nos permite recopilar información sobre el rendimiento de la aplicación y los registros de errores
Analíticas de Firebase
Idioma
Links serán abiertos en Chrome Custom Tabs
Usar Chrome Custom Tabs
Notificaciones push de %1$s
Recibir notificaciones push cuando una actualización para %1$s sea lanzada
Error al guardar el nuevo valor de tiempo
Tiempo de reposo de la secuencia de comandos de la raíz
Ajustar el valor de tiempo de reposo en el script /data/adb/service.d/app.sh, útil para arreglar problemas de montaje
Predeterminado del sistema
Tema
Tema Oscuro
Tema Claro
Centro de Actualizaciones
Sin actualizaciónes nuevas
Variante
No se pudieron guardar los registros
Registros guardados con éxito
Detalles
¡%1$s archivos de instalación detectados!
El Manager detectó que todos los archivos necesarios para la instalación de %1$s se encontraron. ¿Quieres instalarlo?
%1$s Preferencias de instalación
Buscando actualizaciones…
Idioma(s): %1$s
Tema: %1$s
Versión: %1$s
Error
Guía
¡Detente!
Estás usando la versión Magisk/TWRP de Vanced, la cual está descontinuada y no puede ser actualizada usando esta aplicación. Por favor, remuevala eliminando el módulo Magisk o usando el desinstalador TWRP Vanced.
Para instalar Vanced, DEBES desabilitar las optimizaciones MIUI en las opciones de desarrollador. (Puedes ignorar esta advertencia si estás usando un ROM basado en xiaomi.eu 20.2.20 o posterior)
¡Optimizaciones MIUI habilitadas!
¡Por favor, NO salga de la aplicación durante este proceso!
Volver a descargar
Asegúrate de haber descargado la app desde vancedapp.com, el grupo de Discord de Vanced, o el GitHub de Vanced
Versión
Bienvenido
Elige tu(s) idioma(s) preferido(s) para Vanced
Más reciente
Claro + %1$s
¡Seleccione al menos un idioma!
Negro
Oscuro
Desarrolladores del Manager
Otros colaboradores
Fuentes
Equipo Vanced
Fallo al ejecutar `chown` al propietario del sistema, por favor inténtalo de nuevo.
Error al descargar %1$s
Falla al aplicar el nuevo color de acento
Falla al desinstalar paquete %1$s
Falla al localizar los archivos necesarios para la instalación. Vuelva a descargar los archivos de instalación y vuelva a intentarlo.
Falla al localizar en el almacenamiento el archivo apk para el tema negro/oscuro, por favor intente otra vez.
La instalación ha fallado debido a que el usuario ha abortado la instalación.
La instalación ha fallado porque la aplicación entra en conflicto con una aplicación ya instalada. Desinstala la versión actual de la aplicación y vuelve a intentarlo.
La instalación falló porque el usuario trató de degradar el paquete. Desinstala las actualizaciones de la aplicación original e intenta de nuevo.
La instalación ha fallado por razones desconocidas, únete a nuestro Telegram o Discord para más soporte. Por favor, también adjunta una captura de pantalla desde el menú Avanzado
La instalación ha fallado porque el archivo de instalación es incompatible con tu dispositivo. Limpia los archivos descargados en la ajustes y vuelve a intentarlo.
La instalación falló porque los archivos apk están corruptos, por favor inténtalo de nuevo.
La instalación ha fallado porque la Optimización MIUI está activada. Desactiva la optimización MIUI y vuelva a intentarlo.
La instalación ha fallado porque la verificación de firmas de apk está habilitada. Desactiva la verificación de la firmas de apk, y vuelve a intentarlo.
La instalación falló porque el dispositivo no tiene suficiente espacio libre.
Falla al encontrar en el instalador el archivo apk para el tema negro/oscuro. Limpia los datos del Manager y vuelva a intentarlo.
Falla al localizar la ruta de instalación de YouTube después de la instalación split.
================================================
FILE: app/src/main/res/values-et-rEE/strings.xml
================================================
Katkesta
Sulge
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
Lähtesta
Salvesta
Valige Oma Rakendused
Teave
Juhend
Haldur
Logid
Seaded
Uuenduste Haldur
Kas teie seade on juuritud?
Anna juurluba
Alustame
Vali vähemalt üks rakendus!
Kas te ei tea mis see on, või ei soovi kasutada rooditud versiooni? vajutage allpool sinist noolt!
Umbes %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Rakendused
Muudatuste logi
Allalaadimine %1$s
Installi
Uusim:
Installi Vanced MicroG esimesena
Administraatoriõigusi ei tagatud
Sotsiaalmeedia
Toetage meid
Pole saadaval
Installitud:
Rõhuvärv
Välimus
Käitumine
Tühjenda allalaaditud failid
Failid on edukalt puhastatud
See lubab meil koguda informatsiooni äpi jõudluse ja rikkelogi kohta
Firebase Analytics
Keel
Lingid avatakse Chrome kohandatud vahekaartides
Kasuta Chrome kohandatud vahekaarte
%1$s Hüpikteated
Saa hüpikteateid kui %1$s uuendus on saadaval
Aja uue väärtuse salvestamine ebaõnnestus
Uneaja skript
Reguleerige uneaja väärtust, mis on kasutatav /data/adb/service.d/app.sh skriptis, see on kasulik paigaldusprobleemide parandamiseks
Süsteemi vaikimisi
Kujundus
Tume Kujundus
Hele Kujundus
Halduri värskenduskeskus
Uusi uuendusi ei ole
Variant
Ei suutnud salvestada logi
Edukalt salvestatud logid
Üksikasjad
%1$s paigaldusfailid on leitud!
Haldur tuvastas, et kõik failid paigaldamaks %1$s on leitud. Kas soovite seda paigaldada?
%1$s Paigalduseelistused
Uuenduste otsimine…
Keel(ed): %1$s
Kujundus: %1$s
Versioon: %1$s
Viga
Juhend
Peata!
Te kasutate Vanced Magisk/TWRP versiooni, mis on katkestatud, ning seda ei saa uuendada kasutades seda äppi. Palun eemaldage Magisk moodul kasutades TWRP Vanced eemaldajat.
Et paigaldada Vanced, PEAB keelama MIUI optimiseerimise arendaja valikute alt. (Võite seda igroneerida kui kasutate 20.2.20 või uuemat xiaomi.eu põhist ROMi)
MIUI optimiseerimine on lubatud!
Palun ärge väljuge rakendusest protsessi ajal!
Lae uuesti alla
Veenduge, et laadisite rakenduse alla vancedapp.com, Vanced Discordi serverist või Vanced GitHubist
Versioon
Tere tulemast
Valige eelistatud keel(ed) Vanced jaoks
Uusim
Hele + %1$s
Vali vähemalt üks keel!
Must
Tume
Halduri arendajad
Teised kaastöötajad
Allikad
Vanced Meeskond
APK edastamine süsteemi omanikule ebaõnnestus, proovige uuesti.
Viga allalaadimisel %1$s
Uue rõhuvärvi rakendamine ebaõnnestus
Paketi %1$s eemaldamine ebaõnnestus
Paigalduseks vajalike failide leidmine ebaõnnestus. Laadige paigaldusfailid uuesti alla ja proovige uuesti.
Apk faili musta/tumeda teema jaoks leidmine ebaõnnestus, proovige palun uuesti.
Paigaldamine ebaõnnestus kuna kasutaja katkestas selle.
Paigaldamine ebaõnnestus, kuna tekkis konflikt olemasoleva versiooniga. Eemaldage praegune rakenduse versioon, ning proovige uuesti.
Paigaldamine ebaõnnestus kuna kasutaja proovis paketti madalamale versioonile üle viia. Eemaldage värskendused originaalrakendusest ja proovige uuesti.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Paigaldamine ebaõnnestus, kuna paigaldusfail ei sobitu teie seadmega. Puhastage allalaaditud failid seadete alt, ning proovige uuesti.
Paigaldamine ebaõnnestus kuna apk failid on vigased, palun proovige uuesti.
Paigaldamine ebaõnnestus, kuna MIUI optimiseerimine on lubatud. Keelake MIUI optimiseerimine ja proovige uuesti.
Paigaldamine ebaõnnestus kuna apk-allkirja kontrollimine on lubatud. Keelake apk allkirja kinnitamine ja proovige uuesti.
Installimist ei saadud viia lõpule kuna seadmes pole piisvalt vaba ruumi.
Apk faili musta/tumeda teema jaoks leidmine paigaldajast ebaõnnestus. Puhastage halduri rakenduse andmed ja proovige uuesti.
Pärast jagatud paigaldamist ei õnnestunud leida originaal YouTube\'i paigaldus asukohta.
================================================
FILE: app/src/main/res/values-fi-rFI/strings.xml
================================================
Peruuta
Sulje
Mukautettu GMS-Toteutus Vancedille perustuen microG projektiin.
Muokattu YouTube-sovellus, jossa on monia hyödyllisiä ominaisuuksia!
Vanced, mutta YouTube Musicille! Suhteellisen vähemmän ominaisuuksia, mutta täyttää tarpeesi.
Palauta
Tallenna
Valitse Sovelluksesi
Tietoja
Opas
Manager
Lokit
Asetukset
Päivitä hallintasovellus
Onko laitteesi rootattu?
Anna root-oikeudet
Aloitetaan
Valitse ainakin yksi sovellus!
Etkö tiedä mikä tämä on tai etkö halua käyttää rootattua versiota? Klikkaa alla olevaa sinistä nuolta!
%1$s-tietoja
Download
Info
Launch
Reinstall
Uninstall
Update
Sovellukset
Muutoshistoria
Ladataan %1$s
Asenna
Uusin:
Asenna Vanced microG ensin
Pääkäyttäjän oikeuksia ei ole annettu
Sosiaalinen media
Tue meitä
Ei saatavilla
Asennettu:
Aksenttiväri
Ulkoasu
Käyttäytyminen
Tyhjennä ladatut tiedostot
Tiedostot tyhjennettiin onnistuneesti
Tämän avulla voimme kerätä tietoa sovelluksen suorituskyvystä ja kaatumislokeista
Firebase-analytiikka
Kieli
Linkit aukeavat Chromen mukautetuissa välilehdissä
Käytä Chromen mukautettuja välilehtiä
%1$s Push-ilmoitusta
Vastaanota push-ilmoituksia, kun %1$s:lle on julkaistu päivitys
Uuden ajan tallennus epäonnistui
Juuren Skriptin Nukkumisaika
Säädä lepoajan arvoa jota käytetään /data/adb/service.d/app.sh skriptissä, joka on hyödyllinen asennusongelmien korjaamisessa
Järjestelmän oletus
Teema
Tumma teema
Vaalea teema
Managerin päivityskeskus
Ei uusia päivityksiä
Variaatio
Lokeja ei voitu tallentaa
Lokit tallennettiin onnistuneesti
Lisätiedot
%1$s asennustiedostoa havaittu!
Hallitsija havaitsi, että kaikki tarvittavat tiedostot %1$s asennusta varten. Haluatko asentaa sen?
%1$s asennusasetukset
Tarkistetaan päivityksiä…
Kieli: %1$s
Teema: %1$s
Versio: %1$s
Virhe
Opas
Pysähdy!
Käytät Magisk / TWRP versio Vanced, joka on lopetettu ja ei voi päivittää käyttämällä tätä sovellusta. Poista se poistamalla Magisk moduuli / käyttämällä TWRP Vanced asennuksen.
Asentaaksesi Vancedin, sinun täytyy poistaa MIUI-optimisaatiot käytöstä kehittäjäasetuksista. (Voit ohittaa tämän varoituksen, jos käytät versiota 20.2.20 tai uudempaa xiaomi.eu-pohjaista ROM:ia)
MIUI-optimoinnit ovat käytössä!
ÄLÄ poistu sovelluksesta tämän prosessin aikana!
Uudelleenlataa
Varmista, että latasit sovelluksen osoitteesta vancedapp.com, Vanced Discord-palvelin tai Vanced GitHub
Versio
Tervetuloa
Valitse Vancedille haluamasi kieli tai kielet
Uusin
Vaalea + %1$s
Valitse ainakin yksi kieli!
Musta
Tumma
Managerin kehittäjät
Muut avustajat
Lähdekoodi
Vanced kehitystiimi
Ei voitu `chown` APK järjestelmän omistajalle, yritä uudelleen.
%1$s lataus epäonnistui
Uuden aksenttivärin käyttöönotto epäonnistui
Paketin %1$s asennus epäonnistui
Asennukseen vaadittavien tiedostojen paikannus epäonnistui. Yritä ladata asennustiedostot uudelleen.
APK-tiedostoa mustalle/tummalle teemalle ei voitu paikantaa tallennustilasta, yritä uudelleen.
Asennus epäonnistui, koska käyttäjä keskeytti asennuksen.
Asennus epäonnistui, koska sovellus on ristiriidassa jo asennetun sovelluksen kanssa. Poista sovelluksen nykyinen versio ja yritä uudelleen.
Asennus epäonnistui, koska käyttäjä yritti asentaa paketin vanhempaa versiota. Poista YouTube-sovelluksen päivitykset ja yritä sitten uudelleen.
Asennus epäonnistui tuntemattomasta syystä, liity Vancedin Telegramiin tai Discordiin saadaksesi tukea. Liitä myös kuvankaappaus Lisäasetukset valikosta
Asennus epäonnistui, koska asennustiedosto ei ole yhteensopiva laitteesi kanssa. Tyhjennä ladatut tiedostot asetuksista ja yritä uudelleen.
Asennus epäonnistui, koska APK-tiedostot ovat vioittuneet, yritä uudelleen.
Asennus epäonnistui, koska MIUI-optimointi on käytössä. Poista MIUI-optimointi käytöstä ja yritä uudelleen.
Asennus epäonnistui, koska APK-allekirjoituksen vahvistus on käytössä. Poista APK-allekirjoituksen vahvistus käytöstä, ja yritä uudelleen.
Asennus epäonnistui, koska laitteella ei ole tarpeeksi vapaata tilaa.
APK-tiedostoa mustalle/tummalle teemalle ei löytynyt asentajalta. Tyhjennä Managerin sovellustiedot ja yritä uudelleen.
Youtube-sovelluksen asennuspolkua ei voitu paikantaa jaetun asennuksen jälkeen.
================================================
FILE: app/src/main/res/values-fil-rPH/strings.xml
================================================
Kanselahin
Isara
Custom na Implementasyon sa GMS para sa Vanced nakabatay sa proyekto ng microG.
Binagong client ng Youtube na maraming nakatutulong na features!
Vanced, pero para sa Youtube Music! Hindi kasing dami ang mga features, pero natutupad ang iyong pangangailangan.
I-reset
I-save
Piliin ang mga app
Tungkol sa app
Gabay
Manager
Mga Log
Settings
I-update ang Manager
Naka-root ba ang device mo?
Pahintulutin ang Root
Magsimula na tayo
Mag-marka ka kahit isa lang na app!
Hindi mo alam ito o huwag gamitin ang root bersyon? I-click ang asul na arrow sa baba!
Tungkol sa %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Mga Apps
Changelog
Downloading %1$s
I-install
Bago:
I-install muna ang Vanced microG
Walang binigay na root access
Social Media
Suportahin kami
Di-makukuha
Naka-install:
Kulay ng font
Hitsura
Kilos
Tanggalin ang naka-download na files
Natagumpayan na tanggalin ang mga files
Ginagamit ito para sa pag-kolekta ng impormasyon tungkol sa pagganap at crash logs ng app
Firebase Analitiko
Wika
Mabubuksan ang mga links sa Chrome Custom Tabs
Gamitin ang Chrome Custom Tabs
%1$s Push Notifications
Tumanggap ng push notifications kapag ang update sa %1$s ay nailabas
Nabigo na i-save ang bagong time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
Sistemang Default
Tema
Itim na tema
Puti na tema
Manager Update Center
Walang bagong update
Klase
Hindi ma-save ang logs
Natagumpay na i-save ang logs
Mga Detalye
%1$s Nandito ang installation files!
Nakita ng Manager na lahat na kailangan para sa %1$s installation ay nahanap. Gusto mo bang i-install?
%1$s Kagustuhan sa Pag-install
Naghahanap ng mga updates…
(Mga) Wika: %1$s
Tema: %1$s
Bersyon: %1$s
May pagkamali
Gabay
Itigil!
Gumagamit ka ng Magisk/TWRP na bersyon ng Vanced, dahil hindi iyon pinatuloy at hindi mai-uupdate gamit nitong app. Tanggalin po ang Magisk module sa pamamagitan ng TWRP Vanced uninstaller.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
I-download ulit
Siguraduhin mo na nai-download mo ang app galing sa vancedapp.com, o sa Discord server ng Vanced, o sa Github ng Vanced
Bersyon
Maligayang Pagdating
Piliin ang ikinagugustong (mga) wika sa Vanced
Pinakabago
Puti + %1$s
Kumuha ka kahit isang wika!
Itim
Madilim
Manager Devs
Other Contributors
Pinagkukunan
Pangkat Vanced
Nabigo sa `pag-chown` ng APK sa system owner, ulitin muli.
May pagkamali sa pag-download %1$s
Nabigo na gamitin ang bagong kulay aksento
Nabigo sa pag-uninstall ng pakete %1$s
Nabigo ang paghanap sa kailangan na files para sa installation. I-download ulit ang mga installation files, at ulitin muli.
Nabigo ang paghanap ng apk file para sa itim na tema galing sa storage, ulitin muli.
Nabigo ang pag-install dahil kinansela ito.
Nabigo ang pag-install dahil meron hidwaan sa naka-install na app. I-uninstall ang kasalukuyang bersyon ng Vanced, at ulitin muli.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Nabigo ang pag-install dahil ang installation file ay hindi tugma sa iyong device. Tanggalin ang mga downloaded files sa Settings, at ulitin muli.
Nabigo ang pag-install dahil ang mga apk files ay nasira, ulitin muli.
Nabigo ang pag-install dahil ang MIUI Optimization ay naka-on. Patayin ang MIUI Optimization, at ulitin muli.
Nabigo ang pag-install dahil ang apk signature verification ay naka-on. Patayin ang apk signature verification, at ulitin muli.
Installation failed because the device doesn\'t have enough free space.
Nabigong hanapin ang apk file para sa itim na tema galing sa installer. Tanggalin ang app data ng Manager, tapos ulitin.
Nabigong hanapin ang stock YouTube installation path pagkatapos ng split installation.
================================================
FILE: app/src/main/res/values-fr-rFR/strings.xml
================================================
Annuler
Fermer
Une implémentation GMS personnalisée pour Vanced basée sur le projet microG.
Un client YouTube modifié avec de nombreuses fonctionnalités utiles !
Vanced, mais pour YouTube Music ! Relativement moins riche en fonctionnalités mais répond à vos besoins.
Réinitialiser
Sauvegarder
Sélectionnez vos applications
À propos
Guide
Gestionnaire
Journaux
Paramètres
Gestionnaire de Mise à Jour
Votre appareil est-il rooté ?
Accorder l’accès root
Commençons
Sélectionnez au moins une application !
Vous ne savez pas ce que c\'est ou vous ne voulez pas utiliser la version « root » ? Cliquez simplement sur la flèche bleue ci-dessous !
À propos de %1$s
Télécharger
Informations
Lancer
Réinstaller
Désinstaller
Mettre à jour
Applications
Changelog
Téléchargement de %1$s
Installer
Dernière version:
Installez d\'abord Vanced microG
Accès root non autorisé
Réseaux sociaux
Soutenez-nous
Indisponible
Version installée:
Couleur d\'accentuation
Apparence
Comportement
Effacer les fichiers téléchargés
Données effacées avec succès
Cela nous permet de recueillir des informations sur les performances de l\'application et les journaux de bord
Analyses Firebase
Langue
Les liens s\'ouvriront dans les onglets personnalisés Chrome
Utiliser les onglets personnalisés Chrome
%1$s Notifications Push
Recevoir une notification push quand une nouvelle version pour %1$s est publiée
Impossible d\'enregistrer la nouvelle valeur de temps
Temps de veille du script root
Ajuster la valeur de l\'heure de veille utilisée dans le script /data/adb/service.d/app.sh, utile pour résoudre les problèmes de montage
Système par défaut
Thème
Thème sombre
Thème clair
Centre de mise à jour du Manager
Aucune nouvelle mise à jour
Variante
Impossible d\'enregistrer les journaux
Journaux enregistrés avec succès
Détails
%1$s fichiers d\'installation détectés !
Le gestionnaire a détecté que tous les fichiers nécessaires à l\'installation de %1$s ont été trouvés. Voulez-vous installer ?
%1$s Préférences d\'installation
Vérification des mises à jour…
Langue(s) : %1$s
Thème : %1$s
Version : %1$s
Erreur
Guide
Stop!
Vous utilisez la version Magisk/TWRP de Vanced, qui n\'est plus entretenu et ne peut pas être mise à jour à l\'aide de cette application. Veuillez la retirer en supprimant le module Magisk/en utilisant le désinstallateur TWRP pour Vanced.
Afin d\'installer Vanced, vous DEVEZ désactiver les optimisations MIUI dans les paramètres développeur (vous pouvez ignorer cet avertissement si vous utilisez une ROM basée sur 20.2.20 ou ultérieure de xiaomi.eu)
Les optimisations MIUI sont activées !
Veuillez NE PAS quitter l\'application pendant que celle-ci est en cours de modification !
Re-télécharger
Assurez-vous d\'avoir téléchargé l\'application depuis vancedapp.com, le serveur Discord Vanced ou sur le Github Vanced
Version
Bienvenue
Choisir votre langage(s) préféré(s) pour Vanced
Dernière version
Lumière + %1$s
Sélectionnez au moins une langue !
Noir
Sombre
Développeurs du Manager
Autres Contributeurs
Sources
Équipe Vanced
Échec de la commande `chown` APK vers le propriétaire du système, veuillez réessayer.
Erreur en téléchargeant %1$s
Impossible d\'appliquer la nouvelle couleur d\'accentuation
N\'a pas pu désinstaller le paquet %1$s
Impossible de localiser les fichiers nécessaires à l\'installation. Retéléchargez les fichiers d\'installation, puis réessayez.
Impossible de localiser le fichier apk pour le thème noir/foncé, veuillez réessayer.
L\'installation a échoué car l\'utilisateur a abandonné l\'installation.
L\'installation a échoué parce que l\'application est en conflit avec une application déjà installée. Désinstallez la version actuelle de Vanced, puis réessayez.
L\'installation a échoué parce que l\'utilisateur a essayé de downgrader le paquet. Désinstallez les mises à jour de l\'application d\'origine, puis réessayez.
L\'installation a échoué pour des raisons inconnues, rejoignez notre Telegram ou Discord pour plus de support. Veuillez également joindre une capture d\'écran dans le menu Avancé
L\'installation a échoué parce que le fichier d\'installation est incompatible avec votre appareil. Effacer les fichiers téléchargés dans les paramètres, puis réessayer.
L\'installation a échouée car les fichiers apk sont corrompus, veuillez réessayer.
L\'installation a échouée car l\'optimisation MIUI est activée. Désactivez l\'optimisation MIUI, puis réessayez.
L\'installation a échoué car la vérification de la signature apk est activée. Désactivez la vérification de la signature apk, puis réessayez.
L\'installation a échoué car l\'appareil n\'a pas assez d\'espace disponible.
Impossible de trouver le fichier apk pour le thème noir/foncé de l\'installateur. Effacez les données de l\'application de Manager, puis réessayez.
Impossible de localiser le chemin d\'installation du YouTube original après l\'installation fractionnée.
================================================
FILE: app/src/main/res/values-hi-rIN/strings.xml
================================================
रद्द करें
बंद करे
MicroG प्रोजेक्ट के आधार पर Vanced के लिए एक कस्टम GMS कार्यान्वयन।
कई उपयोगी सुविधाओं के साथ एक संशोधित यूट्यूब क्लाइंट!
Vanced, लेकिन यूट्यूब संगीत के लिए! तुलना में कम सुविधा संपन्न लेकिन आपकी आवश्यकताओं को पूरा करता है।
रिसेट
सहेजें
अपने ऐप्स चुनें
हमारे बारे में
गाइड
मैनेजर
लॉग
सेटिंग्स
अपडेट प्रबंधक
क्या आपका डिवाइस रुट किया गया है?
रूट की अनुमति प्रदान करें
चलिए शुरू करते है
कम से कम एक ऐप चुनें!
नहीं जानते ये क्या है या रूट वर्जन इस्तेमाल नहीं करना चाहते? बस नीचे वाला बटन दबाइए!
%1$s के बारे में
Download
Info
Launch
Reinstall
Uninstall
Update
ऐप
परिवर्तन पत्र
डाउनलोड हो रहा है %1$s
इंस्टॉल
सबसे नया
सबसे पहले Vanced microG इंस्टॉल करें
रूट एक्सेस प्रदान नहीं किया गया
सोशल मीडिया
हमें सहयोग दीजिये
अनुपलब्ध
इंस्टॉल हुआ।
ऊपरी रंग
दिखावट
व्यवहार
डाउनलोड की गई फ़ाइलें साफ़ करें
फ़ाइलें सफलतापूर्वक साफ़ की गई
इससे हम एप्लिकेशन प्रदर्शन और क्रैश लॉग के बारे में जानकारी एकत्र कर सकते हैं
फायरबेस वैश्लेषिकी
भाषा
क्रोम कस्टम टैब में लिंक खुलेंगे
क्रोम कस्टम टैब का उपयोग करें
%1$s पुश सूचनाएँ
जब %1$s का अपडेट जारी किया जाता है, तो पुश सूचनाएँ प्राप्त करें
नया समय मान सहेजने में विफल
रूट स्क्रिप्ट स्लीप का समय
बढ़ते मुद्दों को ठीक करने के लिए उपयोगी /data/adb/service.d/app.sh स्क्रिप्ट में उपयोग की गई नींद के समय को समायोजित करें
सिस्टम डिफ़ॉल्ट
थीम
डार्क थीम
लाइट थीम
मैनेजर अपडेट केंद्र
कोई नया अपडेट नहीं
संस्करण
लॉग नहीं सहेजे गए
सफलतापूर्वक लॉग सहेजे गए
विवरण
%1$s इंस्टालेशन फ़ाइलों का पता चला!
प्रबंधक ने पाया कि %1$s इंस्टॉलेशन के लिए सभी आवश्यक फाइलें मिलीं। क्या आप इंस्टॉल करना चाहते हैं?
%1$s इंस्टालेशन प्राथमिकताएँ
अपडेट्स के लिए जांच हो रही है…
भाषा (एं): %1$s
थीम:%1$s
संस्करण:%1$s
त्रुटि
गाइड
रुकें!
आप Vanced के Magisk / TWRP संस्करण का उपयोग कर रहे हैं, जिसे बंद कर दिया गया है और इस ऐप का उपयोग करके अपडेट नहीं किया जा सकता है। कृपया इस Magisk मॉड्यूल को हटाकर / TWRP Vanced uninstaller का उपयोग करके हटा दें।
Vanced इनस्टॉल करने के लिए, आप डेवलपर सेटिंग में MIUI ऑप्टिमाइज़ेशन को निष्क्रिय करें। (यदि आप 20.2.20 या बाद में xiaomi.eu आधारित ROM का उपयोग कर रहे हैं तो आप इस चेतावनी को अनदेखा कर सकते हैं)
MIUI Optimizations सक्षम हैं!
कृपया इस प्रक्रिया के दौरान ऐप को बंद ना करें!
फिर से डाउनलोड करें
सुनिश्चित करें कि आपने vancedapp.com, Vanced Discord सर्वर, या Vanced GitHub से ऐप डाउनलोड किया है
संस्करण
स्वागत है!
Vanced के लिए अपनी पसंदीदा भाषा (ए) चुनें
नवीनतम
लाइट +%1$s
कम से कम एक भाषा का चयन करें!
काला
डार्क
प्रबंधक डेवलपर्स
अन्य योगदानकर्ता
स्रोत
वांसड टीम
सिस्टम के मालिक को APK को Chown करने में विफल, फिर से प्रयास करें।
डाउनलोड करने में त्रुटि %1$s
नया ऊपरी रंग लागू करने में विफल
पैकेज की स्थापना रद्द करने में विफल %1$s
स्थापना के लिए आवश्यक फ़ाइलों का पता लगाने में विफल। स्थापना फ़ाइलों को फिर से डाउनलोड करें, फिर पुनः प्रयास करें।
भंडारण से काले / अंधेरे विषय के लिए apk फ़ाइल खोजने में विफल, कृपया पुनः प्रयास करें।
स्थापना विफल रही क्योंकि उपयोगकर्ता ने स्थापना रद्द कर दी।
इंस्टॉलेशन विफल रहा क्योंकि ऐप पहले से इंस्टॉल किए गए ऐप के साथ टकराव करता है। Vanced के वर्तमान संस्करण को अनइंस्टॉल करें, फिर पुनः प्रयास करें।
स्थापना विफल रही क्योंकि उपयोगकर्ता ने पैकेज को डाउनग्रेड करने का प्रयास किया। स्टॉक ऐप से अपडेट अनइंस्टॉल करें, फिर प्रयास करें।
अज्ञात कारणों से इंस्टॉलेशन विफल हो गया, आगे के समर्थन के लिए हमारे टेलीग्राम या डिस्कॉर्ड में शामिल हों। कृपया उन्नत मेनू से स्क्रीनशॉट भी संलग्न करें ।
इंस्टॉलेशन विफल हो गया क्योंकि इंस्टॉलेशन फ़ाइल आपके डिवाइस के साथ असंगत है। सेटिंग्स में डाउनलोड की गई फ़ाइलों को साफ़ करें, फिर प्रयास करें।
स्थापना विफल रही क्योंकि एपीके फ़ाइलें दूषित हैं, कृपया पुनः प्रयास करें।
MIUI ऑप्टिमाइज़ेशन सक्षम होने के कारण स्थापना विफल रही। MIUI ऑप्टिमाइज़ेशन अक्षम करें, फिर प्रयास करें।
स्थापना विफल रही क्योंकि एपीके हस्ताक्षर सत्यापन सक्षम है। एपीके हस्ताक्षर सत्यापन अक्षम करें, फिर प्रयास करें।
इंस्टॉलेशन विफल हो गया क्योंकि डिवाइस में पर्याप्त खाली जगह नहीं है।
इंस्टॉलर से ब्लैक / डार्क थीम के लिए एपीके फ़ाइल खोजने में विफल। प्रबंधक का एप्लिकेशन डेटा साफ़ करें, फिर प्रयास करें।
विभाजन स्थापना के बाद स्टॉक YouTube इंस्टॉलेशन पथ का पता लगाने में विफल
================================================
FILE: app/src/main/res/values-hr-rHR/strings.xml
================================================
Odustani
Zatvori
Prilagođena GMS implementacija za Vanced zasnovana na microG projektu.
Modificirani YouTube klijent sa mnogo korisnih značajki!
Vanced, ali za YouTube Music! S manje značajki ali ispunjava vaše potrebe.
Resetiraj
Spremi
Odaberite svoje aplikacije
O autorima
Vodič
Upravitelj
Zapisi
Postavke
Ažuriranje upravitelja
Je li vaš uređaj rootan?
Dopusti root dozvolu
Započnite
Odaberite najmanje jednu aplikaciju!
Ne znate što je ovo ili ne želite koristiti root izdanje? Jednostavno kliknite na plavu strelicu ispod!
O %1$s
Preuzmi
Informacije
Pokreni
Reinstaliraj
Deinstaliraj
Ažuriraj
Aplikacije
Zapis promjena
Preuzimam %1$s
Instaliraj
Dostupno:
Prvo instaliraj Vanced MicroG
Root pristup nije dopušten
Društvene mreže
Podržite nas
Nedostupno
Instalirano:
Boja naglašavanja
Izgled
Ponašanje
Ukloni preuzete datoteke
Datoteke su uspješno uklonjene
Ovo nam omogućuje prikupljanje informacija o performansama aplikacije i zapise rušenja
Firebase analitika
Jezik
Poveznice će se otvarati u prilagođenim karticama Chroma
Koristi prilagođene kartice Chroma
%1$s skočne obavijesti
Primite skočnu obavijest kada je ažuriranje za %1$s dostupno
Neuspjelo spremanje nove vrijednosti vremena
Vrijeme spavanja root skripte
Prilagodite vrijeme spavanja korišteno u /data/adb/service.d/app.sh skripti, korisno za ispravak problema s montiranjem
Zadano sustavom
Tema
Tamna tema
Svjetla tema
Središte ažuriranja upravitelja
Nema novih ažuriranja
Izdanje
Nije moguće spremiti zapise
Uspješno spremljeni zapisi
Detalji
%1$s instalacijska datoteka je otkrivena!
Upravitelj je otkrio da su sve potrebne datoteke za %1$s instalaciju pronađene. Želite li nastaviti instalaciju?
%1$s postavke instalacije
Provjera ažuriranja…
Jezik: %1$s
Tema: %1$s
Inačica: %1$s
Greška
Vodič
Zaustavi!
Koristite Magisk/TWRP inačicu Vanceda, koja više nije podržana i ne može se ažurirati ovom aplikacijom. Uklonite ju uklanjanjem Magisk modula/koristeći TWRP Vanced deinstalator.
Kako bi instalirali Vanced, MORATE onemogućiti MIUI optimizaciju u razvojnim mogućnostima. (Ovo upozorenje možete zanemariti ako koristite 20.2.20 ili noviji xiaomi.eu ROM)
MIUI optimizacija je omogućena!
NE zatvarajte aplikaciju tijekom ovog postupka!
Ponovno preuzmi
Aplikaciju obavezno preuzmite s vancedapp.com, Vanced Discord poslužitelja ili Vanced GitHuba
Inačica
Dobrodošli
Odaberite željeni jezika za Vanced
Najnovije
Svjetla + %1$s
Odaberite najmanje jedan jezik!
Crna
Tamna
Razvijatelji Vanced upravitelja
Ostali suradnici
Izvori
Vanced tim
Neuspjela promjena `chown` APK u vlasnika sustava, pokušajte ponovno.
Greška preuzimanja %1$s
Neuspjelo primijenjivanje nove boje naglašavanja
Neuspjela deinstalacija %1$s paketa
Neuspjelo lociranje potrebnih datoteka za instalaciju. Ponovno preuzmite datoteke za instalaciju, zatim ponovno pokušajte.
Neuspjelo lociranje apk datoteke za crnu/tamnu temu iz pohrane, pokušajte ponovno.
Instalacija je prekinuta zato jer ju je korisnik prekinuo.
Instalacija nije uspjela jer je aplikacija u sukobu s već instaliranom aplikacijom. Deinstalirajte trenutnu inačicu aplikacije zatim pokušajte ponovno.
Instalacija nije uspjela jer je korisnik pokušao instalirati stariju inačicu paketa. Deinstalirajte ažuriranja izvorne YouTube aplikacije, zatim pokušajte ponovno.
Neuspjela instalacija, nepoznati razlog. Priključite se našem Telegramu ili Diskordu za našu pomoć. Molimo Vas da priključite sliku ekrana iz Proširenog Menua
Instalacija nije uspjela zato jer datoteka instalacije nije kompatibilna s vašim uređajem. Uklonite preuzete datoteke u postavkama, zatim pokušajte ponovno.
Instalacija nije uspjela zato jer je apk datoteka oštećena.
Instalacija nije uspjela zato jer je MIUI optimizacija uključena. Isključite MIUI optimizaciju, zatim pokušajte ponovno.
Instalacija nije uspjela zato jer je provjera potpisa omogućena. Onemogućite apk provjeru potpisa, zatim pokušajte ponovno.
Neuspješna instalacija jer na uređaju nema dovoljno slobodnog prostora.
Neuspjeli pronalazak apk datoteke za crnu/tamnu temu u programu instalacije. Uklonite podatke aplikacije upravitelja, zatim pokušajte ponovno.
Neuspjelo lociranje putanje izvorne YouTube instalacije nakon razdvojene instalacije.
================================================
FILE: app/src/main/res/values-hu-rHU/strings.xml
================================================
Visszavonás
Bezárás
Egyedi GMS implementáció a Vanced számára a microG Projekt alapján.
Egy módosított YouTube kliens számos hasznos funkcióval!
Vanced, a YouTube Music-ra! Kevésbé funkciógazdag, de kielégíti az igényeidet.
Visszaállítás
Mentés
Válaszd ki az Appot
Rólunk
Útmutató
Manager
Naplók
Beállítások
Manager frissitése
Rootolt az eszközöd?
Root hozzáférés engedélyezése
Lássunk neki
Legalább egy appot válassz!
Nem tudod mi ez vagy csak nem akarod használni a root verziót? Csak kattins a lenti kék nyílra!
%1$s- ról
Download
Info
Launch
Újratelepítés
Uninstall
Update
Alkalmazások
Változáslista
%1$s letöltése
Telepítés
Legújabb:
Először telepítse a Vanced microG-t
A root hozzáférés nincs megadva
Közösségi média
Támogasson bennünket
Nem elérhető
Telepítve:
Kiemelés színe
Megjelenítés
Viselkedés
Letöltött fájlok törlése
Sikeresen törölte a fájlokat
Ezzel megengedi hogy információkat gyűjtsünk az alkalmazás teljesítményéről és az összeomlási naplóról
Firebase Analytics
Nyelv
A linkek egyéni Chrome ablakban nyílnak meg
Egyéni Chrome lapok használata
%1$s Leküldéses (Push) Értesítések
Értesítések fogadása, amikor a %1$s számára frissítés érhető el
Nem sikerült az időzítő új értékének mentése
Root alvás idő script
Alvás idő beállítás a /data/adb/service.d/app.sh scriptben, hasznos a csatlakoztatási problémák javítására
Rendszer alapértelmezett
Kinézet
Sötét téma
Világos téma
Frissítő központ
Új frissítések nem elérhetőek
Változat
A napló mentése nem sikerült
Napló sikeresen mentve
Részletek
%1$s telepítőfájlok észlelve!
A Manager észlelte a %1$s telepítéséhez szükséges fájlokat.
Akarod telepíteni?
%1$s Telepítés személyreszabása
Frissítések ellenőrzése...
Nyelv: %1$s
Kinézet: %1$s
Verzió: %1$s
Hiba
Útmutató
Állj!
A Vanced Magisk/TWRP verzióját használja, ami már nem támogatott és nem frissíthető ezzel az alkalmazással. Távolítsa el a Magisk modul eltávolításával vagy TWRP Vanced eltávolítóval.
Hogy a Vanced-et telepítsd, ki KELL kapcsolnod a MIUI Optimalizációt a fejlesztői beállításokban. (Ezt figyelmen kívül hagyhatod ha 20.2.20 vagy későbbi xiaomi.eu alapú ROM-ot használsz)
MIUI optimalizálások engedélyezve!
Kérjük NE lépjen ki a telepítési folyamat alatt!
Újra letölt
Arra kérünk, győződjön meg róla, hogy ezt az alkalmazást a vancedapp.com oldalról, a Vanced Discord szerveréről vagy a Vanced GitHub-ról töltötte le
Verzió
Üdvözöljük
Vanced nyelvének kiválasztása
Legújabb
Világos + %1$s
Válasszon ki legalább egy nyelvet!
Fekete
Sötét
Fejlesztői Menedzser
Egyéb Közreműködők
Források
Vanced csapat
Nem sikerült az APK beállítása a rendszer tulajdonoshoz, kérjük próbálja újra.
%1$s letöltése nem sikerült
Nem sikerült az új kiemelés szín beállítása
A %1$s-t nem sikerült eltávolítani
A telepítéshez szükséges file-ok megtalálása meghiúsult. Töltse le újra a telepítőfile-okat és próbálja újra.
Nem sikerült az apk file-t megtalálni a fekete/sötét kinézethez, kérjük próbálja újra.
A művelet végrehajtása nem sikerült, mert a felhasználó megszakította a telepítést.
A telepítés nem sikerült, mert az alkalmazás egy másik, már telepített alkalmazással ütközik. Távolítsd el a jelenlegi verziót és próbáld újra.
A telepítés nem sikerült, mert a felhasználó, régebbi verzióra próbált frissíteni. Távolítsa el az eredeti alkalmazás frissítéseit, majd próbálja újra.
A telepítés ismeretlen ok miatt meghiúsult, kérjük csatlakozzon a Telegram vagy a Discord csatornánkhoz további támogatásért. Kérjük egy képernyőképet is mellékeljen ami a Haladó menüben készült
A telepítés nem sikerült, mert a telepítő fájl nem kompatibilis az eszközöddel. Töröld ki a letöltött fájlokat a beállításokban és próbáld újra.
A telepítés nem sikerült, mert az apk fájlok korruptak, próbáld újra.
A telepítés nem sikerült, mert a MIUI Optimalizáció engedélyezve van. Kapcsold ki a MIUI Optimalizációt és próbáld újra.
A telepítés nem sikerült, mert az apk aláírás ellenőrzés engedélyezve van.
Kapcsold ki az apk aláírás ellenőrzését és próbáld újra.
A telepítés nem sikerült, mert nincs elég szabad hely.
Nem sikerült megtalálni az apk file-t a fekete/sötét kinézethez a telepítőből. Törölje a Manager alkalmazás adatait, majd próbálja újra.
Nem sikerült megtalálni az alap YouTube telepítési útvonalat a(z) split telepítés után.
================================================
FILE: app/src/main/res/values-in-rID/strings.xml
================================================
Batal
Tutup
Penerapan GMS kustom untuk Vanced yang didasarkan pada proyek microG.
Klien YouTube termodifikasi dengan berbagai fitur berguna!
Vanced, tetapi untuk YouTube Musik! Relatif memiliki fitur yang kurang kaya tetapi memenuhi kebutuhan anda.
Atur ulang
Simpan
Pilih Aplikasi Anda
Tentang
Petunjuk
Manager
Logs
Pengaturan
Perbarui Manager
Apakah Perangkat Anda Mempunyai Akses Root?
Berikan Izin Root
Mari memulai
Pilih setidaknya satu aplikasi!
Tidak tahu apa ini atau tidak ingin menggunakan versi root? cukup klik panah biru di bawah!
Tentang %1$s
Unduh
Informasi
Buka
Pasang ulang
Copot pemasangan
Perbarui
Aplikasi
Catatan perubahan
Mengunduh %1$s
Pasang
Terbaru:
Pasang Vanced microG terlebih dahulu
Akses Root tidak diberikan
Media Sosial
Dukung kami
Tidak tersedia
Terpasang:
Aksen Warna
Penampilan
Perilaku
Hapus file yang diunduh
Berhasil menghapus file
Analisis firebase mengizinkan kami mengumpulkan informasi tentang performa aplikasi dan catatan crash
Analisis Firebase
Bahasa
Tautan akan terbuka di Chrome Custom Tabs
Gunakan Chrome Custom Tabs
Notifikasi Push %1$s
Terima notifikasi push saat pembaruan untuk %1$s dirilis
Gagal untuk menyimpan value waktu baru
Waktu Root Script Sleep
Sesuaikan value sleep time yang digunakan dalam skript /data/adb/service.d/app.sh, berguna untuk memperbaiki masalah pemasangan
Standar Sistem
Tema
Tema Gelap
Tema Terang
Pusat Pembaruan Manager
Tidak ada pembaruan
Varian
Tidak bisa menyimpan log
Berhasil menyimpan log
Rincian
File instalasi %1$s terdeteksi!
Manager mendeteksi bahwa semua file yang diperlukan untuk instalasi %1$s ditemukan. Apakah anda ingin memasangnya?
Preferensi Instalasi %1$s
Memeriksa pembaruan…
Bahasa: %1$s
Tema: %1$s
Versi: %1$s
Terjadi kesalahan
Petunjuk
Berhenti!
Anda memakai Vanced versi Magisk/TWRP, yang pengembangannya dihentikan dan tidak bisa diperbarui menggunakan aplikasi ini. Mohon untuk menghapusnya dengan menghapus modul Magisk/gunakan pencopot Vanced TWRP.
Untuk memasang Vanced, anda HARUS menonaktifkan Optimisasi MIUI pada pengaturan developer. (Anda dapat mengabaikan peringatan ini apabila anda menggunakan ROM versi 20.2.20 atau lebih yang berbasis xiaomi.eu)
Optimisasi MIUI diaktifkan!
Mohon untuk TIDAK keluar dari aplikasi saat proses ini!
Unduh ulang
Pastikan anda mengunduh aplikasi ini dari vancedapp.com, server Discord Vanced, atau Vanced Github
Versi
Selamat datang
Pilih bahasa yang anda inginkan untuk Vanced
Terbaru
Terang + %1$s
Pilih setidaknya satu bahasa!
Hitam
Gelap
Pengembang Manager
Kontributor Lain
Sumber
Tim Vanced
Gagal untuk `chown` APK ke pemilik sistem, mohon coba lagi.
Gagal Mengunduh %1$s
Gagal untuk menerapkan warna aksen baru
Gagal untuk mencopot pemasangan paket %1$s
Gagal untuk menemukan file yang diperlukan untuk instalasi. Unduh ulang file instalasi, lalu coba lagi.
Gagal untuk menemukan file apk untuk tema hitam/gelap dari penyimpanan, mohon coba lagi.
Pemasangan gagal dikarenakan pengguna membatalkan pemasangan.
Pemasangan gagal dikarenakan aplikasi konflik dengan aplikasi yang sudah terpasang. Copot pemasangan aplikasi versi saat ini, lalu coba lagi.
Pemasangan gagal dikarenakan pengguna mencoba menurunkan versi paket. Hapus pembaruan dari aplikasi bawaan, lalu coba lagi.
Pemasangan gagal untuk alasan yang tidak diketahui, gabung Telegram atau Discord kami untuk bantuan lebih lanjut. Mohon untuk melampirkan screenshot dari menu Tingkat Lanjut
Pemasangan gagal dikarenakan file pemasangan tidak kompatibel dengan perangkat anda. Hapus file yang diunduh di pengaturan, lalu coba lagi.
Pemasangan gagal dikarenakan file apk rusak, mohon coba lagi.
Pemasangan gagal dikarenakan Optimisasi MIUI diaktifkan. Nonaktifkan Optimisasi MIUI, lalu coba lagi.
Pemasangan gagal dikarenakan apk signature verification diaktifkan. Nonaktifkan apk signature verification, lalu coba lagi.
Pemasangan gagal dikarenakan perangkat tidak memiliki ruang penyimpanan yang cukup.
Gagal untuk menemukan file apk untuk tema hitam/gelap dari penginstal. Hapus data aplikasi Manager, lalu coba lagi.
Gagal untuk menemukan path instalasi YouTube setelah pemasangan split.
================================================
FILE: app/src/main/res/values-it-rIT/strings.xml
================================================
Annulla
Chiudi
Un\'implementazione GMS personalizzata per Vanced basata sul progetto microG.
Un client YouTube modificato con molte utili funzionalità!
Vanced, ma per YouTube Music! Relativamente meno ricco di funzionalità ma ugualmente adattabile alle tue esigenze.
Reimposta
Salva
Seleziona le Tue App
Informazioni
Guida
Manager
Registri
Impostazioni
Aggiorna Manager
Il Tuo Dispositivo Ha i Permessi di Root?
Concedi i Permessi di Root
Iniziamo
Seleziona almeno un\'app!
Non sai cos\'è o non vuoi utilizzare la versione root? clicca sulla freccia blu qui in basso!
Informazioni su %1$s
Scarica
Informazioni
Avvia
Reinstalla
Disinstalla
Aggiorna
App
Novità
Download in corso di %1$s
Installa
Disponibile:
Installa prima Vanced microG
Accesso root non consentito
Social Media
Sostienici
Non disponibile
Installata:
Colore Evidenziazione
Aspetto
Comportamento
Cancella i file scaricati
Cancellazione file riuscita
Questo ci consente di raccogliere informazioni sulle prestazioni dell\'app ed i registri sui crash
Analisi Firebase
Lingua
I link verranno aperti nelle Schede Personalizzate di Chrome
Utilizza le Schede Personalizzate di Chrome
Notifiche Push di %1$s
Ricevi notifiche push quando un aggiornamento per %1$s è disponibile
Impossibile salvare il nuovo valore temporale
Tempo Di Sospensione Script Root
Regola il valore del tempo di sospensione utilizzato nello script /data/adb/service.d/app.sh, utile per risolvere i problemi di montaggio
Predefinito di Sistema
Tema
Tema Scuro
Tema Chiaro
Centro Aggiornamenti
Nessun nuovo aggiornamento
Variante
Impossibile salvare i registri
Registri salvati correttamente
Dettagli
%1$s file di installazione rilevati!
Manager ha trovato tutti i file necessari per l\'installazione di %1$s. Vuoi installarli?
Preferenze Installazione di %1$s
Verifica aggiornamenti…
Lingue: %1$s
Tema: %1$s
Versione: %1$s
Errore
Guida
Aspetta!
Stai utilizzando la versione Magisk/TWRP di Vanced, ormai obsoleta e non più aggiornabile tramite questa app. Per favore, rimuovila eliminando il modulo Magisk oppure utilizzando TWRP Vanced uninstaller.
Per installare Vanced, DEVI disabilitare le ottimizzazioni MIUI nelle opzioni sviluppatore. (Puoi ignorare questo avviso se stai usando la ROM 20.2.20 o successiva basata su xiaomi.eu)
Le ottimizzazioni MIUI sono abilitate!
Si prega di NON uscire dall\'app durante questo processo!
Scarica nuovamente
Assicurati di aver scaricato l\'app da vancedapp.com, dal server Discord di Vanced o dalla pagina GitHub di Vanced
Versione
Benvenuto
Scegli le tue lingue preferite per Vanced
Versione più recente
Chiaro + %1$s
Seleziona almeno una lingua!
Nero
Scuro
Sviluppatori di Manager
Altri Collaboratori
Codice Sorgente
Il Team di Vanced
Impossibile modificare il proprietario dell\'apk nel proprietario di sistema, per favore riprova.
Errore nel Download di %1$s
Impossibile applicare il nuovo colore di accento
Impossibile disinstallare il pacchetto %1$s
Impossibile individuare i file richiesti per l\'installazione. Scaricali nuovamente e riprova.
Impossibile individuare il file apk per il tema nero/scuro dalla memoria, per favore riprova.
Installazione non riuscita. L\'utente ha annullato l\'installazione.
Installazione fallita perché l\'applicazione è in conflitto con un\'app già installata. Disinstallare la versione corrente dell\'applicazione, quindi riprovare.
Installazione fallita. È stato effettuato un tentativo di downgrade del pacchetto. Disinstalla gli aggiornamenti dall\'app stock, quindi riprova.
Installazione non riuscita per motivi sconosciuti, unisciti al nostro Telegram o Discord per ulteriore supporto. Allega anche uno screenshot dal menu Avanzate
Installazione non riuscita, il file di installazione non è compatibile con il tuo dispositivo. Elimina i file scaricati nelle impostazioni, poi riprova.
Installazione non riuscita a causa di file apk corrotti, si prega di riprovare.
Installazione non riuscita, le ottimizzazioni di MIUI sono attivate. Disattiva le ottimizzazioni di MIUI, poi riprova.
Installazione non riuscita, la verifica della firma apk è attivata. Disattiva la verifica della firma apk, poi riprova.
Installazione non riuscita perché il dispositivo non dispone di sufficiente spazio libero.
Impossibile trovare il file apk per il tema nero/scuro dall\'installer. Cancella i dati dell\'app Manager, quindi riprova.
Impossibile individuare il percorso di installazione di YouTube stock dopo l\'installazione divisa.
================================================
FILE: app/src/main/res/values-iw-rIL/strings.xml
================================================
ביטול
סגור
שירותים מותאמים אישית של Google במיוחד ל־Vanced, מבוססים על פרויקט microG.
YouTube משופר עם תכונות שימושיות רבות!
Vacned, אבל של YouTube Music! יחסית פחות עשיר בתכונות, אבל ממלא אחר צרכיך.
איפוס
שמור
בחר את היישומים שלך
אודות
מדריך
מנהל
יומני רישום
הגדרות
מנהל העדכונים
האם המכשיר שלך בעל הרשאות Root?
הענק הרשאות Root
בואו נתחיל
בחר לפחות יישום אחד!
לא יודעים מה זה או לא רוצים להשתמש בגרסת ה־Root? פשוט לחצו על החץ הכחול למטה!
אודות %1$s
הורדה
מידע
הפעל
התקן מחדש
הסרת ההתקנה
עדכן
יישומים
היסטורית שינויים
מוריד את %1$s
התקן
החדש ביותר:
התקן את שירותי Google של Vanced תחילה
לא הוענקו הרשאות Root
רשתות חברתיות
תמכו בנו
לא זמין
מותקן:
צבע הדגשה
מראה
התנהגות
מחק קבצים שהורדו
מחיקת הקבצים הסתיימה בהצלחה
מאפשר לנו לאסוף מידע על ביצועי היישום וסיבות לקריסתו
ניתוח מידע משתמש
שפה
קישורים יפתחו בכרטיסיות מותאמות אישית של Chrome
השתמש בכרטיסייה מותאמת אישית של Chrome
%1$s התראות דחיפה
קבל התראות דחיפה כשעדכון ל־%1$s משתחרר
נכשל בשמירת ערך הזמן החדש
Root Script Sleep Time
תשנה את זמן השינה הנמצא ב /data/adb/service.d/app.sh, זה עוזר כדי לתקן בעיות אתחול
ברירת מחדל
ערכת נושא
ערכת נושא כהה
ערכת נושא בהירה
מרכז העדכונים
אין עדכונים חדשים
סוג
לא ניתן היה לשמור יומני רישום
יומני הרישום נשמרו בהצלחה
פרטים
%1$s קבצי התקנה נמצאו!
המנהל זיהה שכל הקבצים הנדרשים עבור התקנת %1$s נמצאו. האם ברצונך להתקינם?
%1$s העדפות התקנה
בודק אחר עדכונים…
שפה: %1$s
ערכת נושא: %1$s
גרסה: %1$s
שגיאה
מדריך
עצור!
נדמה שאתה משתמש בגרסת ה־Magisk/TWRP של Vanced, שהתמיכה בה הופסקה והיא לא יכולה להתעדכן להתעדכן בעזרת האפליקציה הזו. אנא מחק אותה על ידי מחיקת ה־Module ב־Magisk או בשימוש במסיר ההתקנה של TWRP Vanced.
על מנת להתקין את Vanced, עליך להשבית מיטוב ל־MIUI בהגדרות מפתחים. (אתה יכול להתעלם מאזהרה זו אם אתה משתמש בגרסה 20.2.2 של הרום הבין־לאומי של שיאומי או גרסה מאוחרת יותר)
מיטוב למערכת ההפעלה MIUI פועל!
נא לא לצאת מהיישום במהלך תהליך זה!
הורד מחדש
ודא שהורדת את האפליקציה מהאתר vancedapp.com, שרת הדיסקורד של Vanced או מהעמוד של Vanced ב־GitHub
גרסא
ברוכים הבאים
בחר את השפה המועדפת עליך ל־Vanced
העדכנית ביותר
בהיר + %1$s
בחר לפחות שפה אחת!
שחור
שחרחר
מנהל למפתחים
תורמים אחרים
מקורות
צוות Vanced
נכשל בהחלפת הבעלים של קובץ ה־APK, אנא נסה בשנית.
תקלה בהורדה של %1$s
נכשל בהחלת ערכת הנושא החדשה
נכשל במחיקת החבילה %1$s
איתור הקבצים הנדרשים להתקנה נכשל. הורד מחדש את קבצי ההתקנה ונסה שוב.
נכשל האיתור של קובץ APK לערכת נושא שחורה/כהה מהאחסון, אנא נסה שוב.
ההתקנה נכשלה כיוון שהמשתמש ביטל אותה.
ההתקנה נכשלה כיוון שהאפליקציה מתנגשת עם גרסה מותקנת שלה, מחק את הגרסה הנוכחית של Vanced ולאחר מכן נסה שוב.
ההתקנה נכשלה כיוון שהמשתמש ניסה לשנמך את גרסת היישום. מחק עדכונים מאפליקציית YouTube הרגילה, ולאחר מכן נסה שוב.
ההתקנה נכשלה מסיבות לא ידועות, הצטרף לטלגרם או לדיסקורד לקבלת תמיכה נוספת. אנא צרף גם צילום מסך מהתפריט המתקדם
ההתקנה נכשלה מכיוון שההתקנה או הקובץ לא תואמים עם מכשירך. נקה הורדות שהושלמו מתוך ההגדרות, ואז נסה שוב.
ההתקנה נכשלה מכיוון שקבצי הישום הרוסים, בבקשה נסה שוב.
ההתקנה נכשלה מכיוון שאופטימיזצית MIUI פעילה. השבת את אופטימיזצית MIUI, ואז נסה שוב.
ההתקנה נכשלה מכיוון שאימות החתימה בישום פעילה. השבת את אימות החתימה בישום, ואז נסה שוב.
ההתקנה נכשלה כיוון שאין מספיק מקום פנוי במכשיר.
נכשל במציאת קובץ APK של ערכת נושא שחורה/כהה. נקה את נתוני האפליקציה Vanced Manager, ולאחר מכן נסה שוב.
נכשל איתור נתיב ההתקנה של YouTube הרגיל לאחר התקנה מפוצלת.
================================================
FILE: app/src/main/res/values-ja-rJP/strings.xml
================================================
キャンセル
閉じる
microG Project をベースにした、Vanced のためのGMSのカスタム実装
多くの便利な機能を備えた、改造されたYouTubeアプリ!
YouTube Music のための Vanced! 比較的機能は少ないですが、あなたの欲望を満たします。
リセット
保存
アプリの選択
このアプリについて
ガイド
Manager
ログ
設定
Manager を更新
端末をルート化していますか?
root 権限を付与
さあ、始めましょう
アプリを少なくとも一つ選択してください!
これが何であるか分からないか、またはRootバージョンを使用したくない場合は、下の青い矢印をタップしてください!
%1$s について
Download
Info
Launch
Reinstall
Uninstall
Update
アプリ
更新履歴
%1$s をダウンロードしています
インストール
最新版:
はじめに Vanced microG をインストールしてください
Root アクセスは許可されていません
ソーシャルメディア
サポート
利用不可
インストール済み:
アクセントカラー
表示設定
動作
ダウンロード済みファイルを消去
ファイルを消去しました
アプリのパフォーマンスとクラッシュログに関する情報を収集できます
Firebase アナリティクス
言語
Chrome カスタムタブでリンクを開く
Chrome カスタムタブを使用
%1$s プッシュ通知
%1$s のアップデートがリリースされたときにプッシュ通知を受け取る
新しいタイマーの値の保存に失敗しました
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
システム設定
テーマ
ダークテーマ
ライトテーマ
Manager アップデートセンター
アップデートはありません
種類
ログの保存に失敗しました
ログが正常に保存されました
詳細
%1$s のインストールに必要なファイルが見つかりました
%1$s のインストールに必要な全てのファイル準備が整いました。インストールしますか?
%1$s のインストール設定
アップデートを確認中...
言語: %1$s
テーマ: %1$s
バージョン: %1$s
エラー
ガイド
ストップ!
Vanced の Magisk/TWRP バージョンを使用しているようです。このバージョンは廃止されており、このアプリでは更新できません。 まず Magisk モジュールを削除するか、TWRP で Vanced uninstaller を使用してください。
Vanced をインストールするには、開発者設定から MIUI 最適化を無効にしなければなりません。 (20.2.20 以降の xiaomi.eu ベースの ROM の場合はこの警告は無視してください)
MIUI 最適化が有効です!
この処理中はアプリを終了しないでください!
再ダウンロード
Vancedapp.com、Vanced の Discord サーバーまたは GitHub からアプリをダウンロードしたことを確認してください
バージョン
ようこそ
Vanced で使用する言語を選択
最新版
ライト + %1$s
少なくとも一つの言語を選択してください!
ブラック
ダーク
Manager 開発
他の貢献者
ソースコード
Vanced チーム
システム所有者への APK の Chown ができませんでした、もう一度やり直してください.
%1$s のダウンロード中にエラー
新しいアクセントカラーの適用に失敗しました
パッケージ %1$s のアンインストールに失敗しました
インストールに必要なファイルが見つかりませんでした。再ダウンロードし、もう一度お試しください。
ストレージからブラック/ダークテーマの APK ファイルが見つかりませんでした。もう一度お試しください。
ユーザーがインストールを中断したためインストールに失敗しました。
既にインストールされたアプリと競合したため、インストールに失敗しました。インストールされたアプリをアンインストールしてから、もう一度やり直してください。
アプリをダウングレードしようとしたため、インストールに失敗しました。インストールされたアプリをアンインストールしてから、再度お試しください。
不明な理由でインストールに失敗しました。さらなるサポートのためには、Telegram か Discord に参加してください。詳細メニューからスクリーンショットを添付してください。
インストールするファイルがお使いのデバイスと互換性がないためインストールに失敗しました。設定でダウンロードしたファイルを削除してから、もう一度やり直してください。
APK ファイルが破損しているためインストールに失敗しました、もう一度やり直してください。
MIUI の最適化が有効になっているためインストールに失敗しました。MIUI の最適化を無効化してから、もう一度やり直してください。
APK の署名検証が有効化されているためインストールに失敗しました。APK の署名検証を無効化してから、もう一度やり直してください。
デバイスに十分な空き容量がないため、インストールに失敗しました。
インストーラーからブラック/ダークテーマの APK ファイルが見つかりませんでした。Manager のアプリデータを消去してから、もう一度お試しください。
分割インストール後にストックの YouTube アプリのインストールパスが見つかりませんでした。
================================================
FILE: app/src/main/res/values-ka-rGE/strings.xml
================================================
გაუქმება
დახურვა
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
განულება
შენახვა
აირჩიეთ თქვენი აპები
შესახებ
ინსტრუქცია
მენეჯერი
ჟურნალი
პარამეტრები
მენეჯერის განახლება
არის თქვენი მოწყობილობა დარუთული?
მიეცით root წვდომა
დავიწყოთ
ერთი აპი მაინც მონიშნეთ!
არ იცით ეს რა არის ან არ გინდათ root ვერსიით სარგებობა? უბრალოდ დააჭირეთ ქვემოთ მოცემულ ლურჯ ისარს!
%1$s-ის შესახებ
გადმოწერა
ონფორმაცია
ჩართვა
რეინსტალაცია
დეინსტალაცია
განახლება
აპები
ცვლილებები
მიმდინარეობს %1$s-ის გადმოწერა
ინსტალაცია
უახლესი:
Install Vanced microG first
Root წვდომა არ არის მინიჭებული
სოციალური მედია
დაგვიჭირეთ მხარი
ხელმიუწვდომელია
დაინსტალირებული:
აქცენტის ფერი
შესახედაობა
ფუნქციები
გადმოწერილი ფაილების გაწმენდა
ფაილები წარმატებით გაიწმინდა
ეს გვაძლევს უფლებას მოვიპოვოთ ინფორმაცია აპის მუშაობის შესახებ
Firebase-ის ანალიტიკა
ენა
ლინკები გაიხსნება Chrome Custom Tabs-ში
გამოიყენეთ Chrome Custom Tabs
%1$s-ს შეტყობინებები
მიიღეთ შეტყობინებები როდესაც %1$s-ის განახლება იქნება ხელმისაწვდომი
Failed to save new time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
სისტემის ნაგულისხმევი
თემა
მუქი თემა
ღია თემა
განახლებების ცენტრი
განახლება არ არის აღმოჩენილი
ვარიანტი
Could not save logs
Successfully saved logs
დეტალები
აღმოჩენილია %1$s -ის საინსტალაციო ფაილები!
მენეჯერმა აღმოაჩინა %1$s -ის ყველა საჭირო საინსტალაციო ფაილი. გინდათ დააინსტალიროთ?
%1$s-ის ინსტალაციის პარამეტრები
მიმდინარეობს განახლებების შემოწმება…
ენა(ები): %1$s
თემა: %1$s
ვერსია: %1$s
შეცდომა
ინსტრუქცია
შეჩერდი!
თქვენ იყენებთ Vanced-ის Magisk/TWRP ვერსიას, მაგრამ მისი მენეჯერიდან განახლება შეუძლებელია. გთხოვთ წაშალოთ იგი Magisk-იდან/TWRP-ს დეინსტალერიდან.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
თავიდან გადმოწერა
დარწმუნდით, რომ აპი გადმოწერეთ vancedapp.com-იდან, Vanced Discord სერვერიდან ან GitHub-იდან
ვერსია
მოგესალმებით
აირჩიეთ სასურველი ენა(ები) Vanced-ისთვის
უახლესი
ღია + %1$s
ერთი ენა მაინც მონიშნეთ!
შავი
მუქი
Manager-ის დეველოპერები
Other Contributors
წყაროები
Vanced-ის გუნდი
`chown`-ის დროს მოხდა შეცდომა, გთცოვთ სცადოთ თავიდან.
შეცდომა %1$s-ის გადმოწერის დროს
შეცდომა აქცენტის ფერის მიღების დროს
პაკეტი %1$s ვერ დეინსტალირდა
Failed to locate the required files for installation. Re-download the installation files, then try again.
Failed to locate apk file for black/dark theme from storage, please try again.
Installation failed because the user aborted the installation.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Installation failed because the installation file is incompatible with your device. Clear downloaded files in the Settings, then try again.
Installation failed because the apk files are corrupted, please try again.
Installation failed because MIUI Optimization is enabled. Disable MIUI Optimization, then try again.
Installation failed because apk signature verification is enabled. Disable apk signature verification, then try again.
Installation failed because the device doesn\'t have enough free space.
Failed to find apk file for black/dark theme from the installer. Clear app data of Manager, then try again.
Failed to locate the stock YouTube installation path after split installation.
================================================
FILE: app/src/main/res/values-kmr-rTR/strings.xml
================================================
Betal bike
Bigire
Ji bo Projeya microG ji bo Vanced tê tetbîqkirin.
Mişterîya YouTube bi gelek taybetmendiyên kêrhatî guherî!
Vanced, lê ji bo YouTube Music!. Ji bo hewcedariyên te, hinekî kêm-dewlemend e.
Nûsaz bike
Tomar bike
Sepanên xwe hilbijêre
Derbarê de
Rêber
Rêveber
Tomar
Sazkarî
Rêveberê Nûve bike
Gelo cîhaza te Root e?
Destûra Root\'ê bide
Em dest pê bikin
Herî kêm sepanekê hilbijêre!
Gelo ev çi ye an naxwazî versiyona root bi kar bîne? tenê tîrê şîn ê jêrîn bitikînin!
Derbar %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Sepanan
Gurankarî
Dakêşe %1$s
Saz bike
Dawîn:
Pêşîn Vanced microG saz bikin
Destlênedanên kokê nayê dayîn
Medyaya Civakî
Piştgiriya me bikin
Neberdest
Sazkirî:
Rengê devkî
Xuyang
Tevger
Pelên dakêşandî paqij bikin
Pelên bi serkeftî hatin paqijkirin
Ev dibe ku em di derbarê performansa sepan û tomarê têkçûyî de agahdariyan berhev bikin
Firebase Analytics
Ziman
Girêdan dê di hilpekên taybet ên Chrome\'ê de vebin
Hilpekên Chrome\'ê yên taybet bi kar bîne
%1$s Danezanên Lezgîn
Dema ku hildemînek ji bo %1$s belav bû, danezanên lezgîn werbigire
Barkirina nirxa dema nû bi ser neket
Dema Xewê ya Skrîpta Root
Nirxa dema xewê ya ku tê bikaranîn sererast bikin /data/adb/service.d/app.sh skrîpt, ji bo rastkirina pirsgirêkên pêvekirinê kêrhatî ye
Jixwebera Sîstemê
Rûkar
Rûkara tarî
Rûkara Ronî
Navenda Hildemandina Rêveberê
Nûvekirinên nû tune
Varyant
Torkirina rojnivîsk bi ser neket
Rojnivîsk bi serkeftî torandin
Kîtekît
Pelên sazkirinê %1$s hatin tespîtkirin!
Rêveberê diyar kir ku hemû pelên pêwîst ji bo sazkirina %1$s hatine dîtin. Tu dixwazî saz bikî?
Vebijarkên Sazkirinê yên %1$s
Li nûvekirinan tê vekolîn…
Ziman(ên): %1$s
Rûkar: %1$s
Guherto: %1$s
Çewtî
Rêber
Bisekine!
Tu versiyona Magisk/TWRP ya Vanced ê ku hatiye jêbirin û bi bikaranîna vê sepanê nikare were nûjenkirin, bi kar tîne. Ji kerema xwe rake bi rakirina mobîla Magisk/bi karanîna TWRP Vanced rakirin.
Ji bo sazkirina Vanced, divê tu optimîzasyonên MIUI di mîhengên pêşdebiran de neçalak bikî. (Heke hûn 20.2.20 an jî paşê bi romê xiaomi.eu vê hişyariyê paşguh bikin)
Optimîzasyonên MIUI tên çalak kirin!
Ji kerema xwe di vê pêvajoyê de ji sepanê dernakeve!
Ji nû ve daxîne
Pê bawer bin ku te ev sepan ji vancedapp.com, servera Discord a Vanced an jî JiGitHub ya Vanced dakêşandine
Versiyon
Bi xêr hatî
Ziman(ên) xwe yën dilxwaz ji bo Vanced\'ê hilbijêre
Herî dawî
Ronahî + %1$s
Bi kêmanî zimanekî hilbijêre!
Reş
Tarî
Pêşvebirên Rêveberê
Beşdarên din
Çavkanî
Koma Vanced\'ê
APK\'yê ji xwediyê pergalê re \'chown\' bi ser neket, ji kerema xwe re careke din biceribînin.
Di daxistina %1$s de çewtî
Lêpirandina rengê nû yê zaravayê biserneket
Sazkirina pakêta %1$s bi ser neket
Sazkirina pelên pêwîst bi ser neket. Pelên sazkirinê ji nû ve dakêşin, piştre dîsa biceribînin.
Nekarî pelê apk ji bo dirba reş/tarî ji hilanînê bicîh bike, ji kerema xwe re dîsa biceribîne.
Sazkirin bi ser neket ji ber ku bikarhêner sazkirin bete betalkirin.
Sazkirin bi ser neket ji ber ku pêvek bi pêvek berê sazkirî re naqede. Vê versiyona heyî ya vê appê saz bike, paşê dîsa biceribîne.
Sazkirin bi ser neket ji ber ku bikarhêner hewl da pakêtê kêm bike. Nûvekirinên ji parsûyê rabike, paşê dîsa biceribîne.
Sazkirin ji ber sedemên nediyar têk çû, ji bo piştgiriya zêdetir tevlî Telegram an Jî Discordê me bibin. Ji kerema xwe dîmenek ekranê jî ji menuya Pêşkeftî ve girêdayî bikin
Sazkirin bi ser neket ji ber ku pelê sazkirinê bi cîhaza we re ne hevkar e. Mîhengên daxistinî paqij bike, paşê dîsa biceribîne.
Sazkirin bi ser neket ji ber ku pelên apk\'ê nebaş in, ji kerema xwe careke din biceribînin.
Sazkirin bi ser neket ji ber ku MIUI Optimization çalak e. MIUI Optimization\'ê neçalak bikin, paşê dîsa biceribînin.
Sazkirin bi ser neket ji ber ku rastandina îmzeya apk\'ayê çalak e. Rastandina îmzeya apk\'ayê neçalak bikin, paşê dîsa biceribînin.
Sazkirin bi ser neket ji ber ku cîhaz têra xwe cihê belaş tune.
Dozîna dosiya apk ji bo rûkara reş/tarî ji sazkirinê bi ser neket. Daneyên sepanê ji rêveberê paqij bikin, paşê dîsa biceribîne.
Piştî sazkirina dabeşkirî, dozîna rêka sazkirina YouTube stokê bi ser neket.
================================================
FILE: app/src/main/res/values-ko-rKR/strings.xml
================================================
취소
닫기
microG 프로젝트를 기반으로 커스텀한 Vanced용 Google 모바일 서비스입니다.
다수의 유용한 기능을 가지는 YouTube 변경 클라이언트입니다!
YouTube Music의 Vanced 버전입니다. 추가된 기능이 그렇게 많지는 않지만 충분히 만족하실 거예요.
초기화
저장
설치할 앱 선택하기
정보
가이드
Manager
로그
설정
매니저 업데이트
기기가 루팅되어 있나요?
루트 권한 부여
시작하기
적어도 하나의 앱을 선택해주세요
이게 무슨 뜻인지 모르시거나 루트 버전을 사용하고 싶지 않으시다고요? 그냥 아래의 파란색 화살표를 클릭하세요!
%1$s 정보
다운로드
정보
실행
재설치
제거
업데이트
앱
변경 사항
%1$s 다운로드 중
설치
최신:
Vanced microG를 우선 설치하십시오
루트 권한이 부여되지 않았습니다
소셜 미디어
지원하기
사용 불가
설치됨:
강조 색상
모양
동작
다운로드된 파일 모두 지우기
다운로드된 파일을 모두 삭제했습니다
앱 성능과 충돌 기록에 대한 정보를 수집할 수 있게 해줍니다
Firebase 분석
언어
링크가 Chrome 커스텀 탭으로 열립니다
Chrome 커스텀 탭으로 열기
%1$s 푸시 알림
새로운 %1$s 업데이트가 출시되면 알림 받기
새 시간 값을 저장할 수 없습니다.
루트 스크립트 대기 시간
/data/adb/service.d/app.sh 스크립트에 쓰이는 대기 시간을 조정하십시오. 설치 문제 해결에 유용합니다.
시스템 기본값
테마
다크 테마
라이트 테마
업데이트 센터
새로운 업데이트 없음
앱 종류
로그 저장 실패
로그 저장됨
자세히
%1$s 설치에 필요한 파일을 찾았습니다!
Manager 앱이 %1$s 설치에 필요한 모든 파일을 찾았습니다. 지금 설치하시겠어요?
%1$s 설치 설정
업데이트 확인 중입니다...
언어: %1$s
테마: %1$s
버전: %1$s
오류
가이드
잠깐만요!
현재 설치되어 있는 Vanced의 Magisk/TWRP 버전은 더 이상 지원되지 않으며 이 앱으로 업데이트할 수 없습니다. 먼저 삭제 프로그램을 이용하여 Vanced의 TWRP/Magisk 모듈을 제거하여 주시기 바랍니다.
Vanced를 올바르게 설치하려면, 개발자 설정으로 들어가서 MIUI 최적화 기능을 반드시 끄셔야 합니다. (단, 버전이 20.2.20 이상인 xiaomi.eu 기반 ROM을 사용하는 경우 이 경고를 무시하셔도 좋습니다)
MIUI 최적화 기능이 켜져 있습니다!
이 작업을 하는 동안 이 앱에서 나가지 마세요!
다시 다운로드
항상 vancedapp.com, 공식 Vanced 디스코드 서버 또는 공식 GitHub 저장소에서 Vanced Manager 앱을 다운로드해주세요.
버전
환영합니다
Vanced에서 선호하는 언어를 선택해주세요
최신
라이트 + %1$s
적어도 하나의 언어를 선택해주세요!
검정
다크
Manager 개발자
기타 기여자
소스 코드
Vanced 팀
APK의 소유권을 시스템 관리자로 변경하던 중에 오류가 발생하였습니다. 다시 시도하십시오.
%1$s 다운로드 중 오류 발생
강조 색상을 적용하지 못했습니다
%1$s 패키지 제거에 실패하였습니다
설치에 필요한 파일을 찾지 못했습니다. 설치 파일을 다시 다운로드한 다음 재시도하십시오.
저장소에서 블랙/다크 테마에 대한 apk 파일을 찾지 못했습니다. 다시 시도하십시오.
사용자가 설치를 중단했기 때문에 앱을 설치하지 못했습니다.
앱이 이미 설치된 앱과 충돌하여 설치하지 못했습니다. 현재 버전의 앱을 제거한 다음 다시 시도하십시오.
사용자가 패키지를 이전 버전으로 변경하려고 하여 앱을 설치하지 못했습니다. 기본 앱의 업데이트를 제거한 후, 설치를 다시 시도해주세요.
알 수 없는 이유로 인해 설치가 실패했습니다. 저희 텔레그램 또는 디스코드에 알려주시면 도와드리겠습니다. \'고급\' 메뉴의 스크린샷도 첨부하여 주십시오.
설치 파일이 기기와 호환되지 않아 앱을 설치하지 못했습니다. Manager 설정에서 다운로드된 파일을 모두 삭제한 다음, 설치를 다시 진행해주세요.
APK 파일이 손상되어 앱을 설치하지 못했습니다. 설치를 다시 진행해주세요.
MIUI 최적화 기능이 켜져 있어 앱을 설치하지 못했습니다. MIUI 최적화 기능을 끄고, 설치를 다시 진행해주세요.
APK 서명 검증 기능이 활성화되어 있어 앱을 설치하지 못했습니다. 먼저 APK 서명 검증 기능을 비활성화한 다음, 설치를 다시 진행해주세요.
기기에 충분한 여유 공간이 없어 설치하지 못했습니다.
설치 관리자에서 블랙/다크 테마에 대한 apk 파일을 찾지 못했습니다. Vanced Manager의 앱 데이터를 삭제 한 다음 다시 시도하십시오.
분할 설치 완료 후 기본 YouTube 앱 설치 경로를 찾을 수 없습니다.
================================================
FILE: app/src/main/res/values-ku-rTR/strings.xml
================================================
Betal bike
Bigire
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
Nûsaz bike
Tomar bike
Sepanên xwe hilbijêre
Derbar
Rêzan
Rêvebirin
Logs
Sazkarî
Rêveberê hildemîne
Gelo cîhaza te Root e?
Destûra Root\'ê bide
Dest pê kirin
Herî kêm sepanekê hilbijêre!
Don\'t know what this is or don\'t want to use the root version? just click the blue arrow below!
Derbar %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
Guherîn
Tê daxistin %1$s
Saz bike
Dawîn:
Install Vanced microG first
Rê li gihana Root nehate dayîn
Social Media
Piştgiriya me bike
Berdest nîne
Saz bike:
Rengê devokê
Xuyang
Behavior
Dosiyayên daxistî paqij bike
Dosiya, biserketî paqij bûn
Ev yek dihêle ku em di bara performansa sepanê û tomarên hilweşiyayî de agahiyan berhev bikin
Analîza Firebase\'ê
Ziman
Girêdan dê di hilpekên taybet ên Chrome\'ê de vebin
Hilpekên Chrome\'ê yên taybet bi kar bîne
%1$s danezanên lezgîn
Dema ku hildemînek ji bo %1$s belav bû, danezanên lezgîn werbigire
Failed to save new time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
Jixwebera sîstemê
Rûkar
Rûkara tarî
Rûkara ronak
Navenda hildemandina rêveberê
Hildema nû nîne
Guharto
Could not save logs
Successfully saved logs
Details
%1$s dosiyên sazkirinê peyda bûn!
Rêveberê peydabûna hemû ew dosiyên pêwîst ên ji bo sazkirina %1$s tesbît kir. Gelo tu dixwazî saz bikî?
%1$s sazkariyên bijarde yên sazkirinê
Hildem tên kontrolkirin...
Ziman(ên):%1$s
Rûkar: %1$s
Guherto: %1$s
Çewtî
Rêzan
Rawestîne!
Hûn niha guhertoya Magisk/TWRP ji Vanced\'ê bi kar tînin, ku qut bûye û bi saya vê sepanê naye hildemandin. Jkx magsik module/bi alîkariya TWRP Vanced uninstaller\'ê rakin.
Ji bo ku Vanced were sazkirin, DIVÊ hûn Optimîzasyonên MIUI-yê di sazkariyên pêşvebirinê de neçalak bikin. (Hûn dikarin vê hişyariyê paşguh bikin heke hûn ROM\'a li ser esasa xiaomi.eu 20.2.20 an jortir bi kar tînin)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Ji nû ve daxîne
Piştrast bin ku we sepan ji vancedapp.com\'ê, ji servera Vanced Discord\'ê an Vanced GitHub\'ê daxistiye
Guherto
Bi xêr hatî
Ziman(ên) xwe yën dilxwaz ji bo Vanced\'ê hilbijêre
Dawîn
Ronak + %1$s
Herî kêm zimanekê hilbijêre!
Reş
Tarî
Pêşvebirên rêveberê
Other Contributors
Çavkanî
Koma Vanced\'ê
\'Chown\' apk ji xwediyê sîstemê re bi ser neket, jkx dîsa biceribîne.
Çewtiya daxistinê %1$s
Failed to apply new accent color
Rakirina pakêta %1$s bi ser neket
Dozîna dosiyên pêwîst ji bo sazkirinê bi ser neket. Dosiyên sazkirinê dîsa daxîne, paşê dubare biceribîne.
Dozîna dosiya apk ji bo rûkara reş/tarî ji bîrgehê bi ser neket, jkx dîsa biceribîne.
Sazkirin bi ser neket ji ber ku bikarîner dawî li pêvajoya sazkirinê anî.
Sazkirin bi ser neket ji ber ku ev bernameya ligel bernameyeke din ya sazkirî li hev nake. Guhertoya heyî ya Vanced\'ê rakin, paşê dîsa biceribînin.
Sazkirin bi ser neket ji ber ku bikarîner hewl dida derecebendiya pakêtê kêm bike. Hildeman ji bernameya YouTube\'ê ya heyî rakin, paşê dîsa biceribînin.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Sazkirin bi ser neket ji ber ku dosiya sazkirinê ligel cîhaza te hevaheng nîne. Dosiyên daxistî ji sazkariyan paqij bike, paşê dîsa biceribîne.
Sazkirin bi ser neket ji ber ku dosiyên apk\'ayê xirab in, jkx dîsa biceribîne.
Sazkirin bi ser neket ji ber ku MIUI Optimization çalak e. MIUI Optimization\'ê neçalak bikin, paşê dîsa biceribînin.
Sazkirin bi ser neket ji ber ku rastandina îmzeya apk\'ayê çalak e. Rastandina îmzeya apk\'ayê neçalak bikin, paşê dîsa biceribînin.
Installation failed because the device doesn\'t have enough free space.
Dozîna dosiya apk ji bo rûkara reş/tarî ji sazkirinê bi ser neket. Daneyên sepanê ji rêveberê paqij bikin, paşê dîsa biceribîne.
Piştî sazkirina dabeşkirî, dozîna rêka sazkirina YouTube stokê bi ser neket.
================================================
FILE: app/src/main/res/values-lt-rLT/strings.xml
================================================
Cancel
Close
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
Reset
Save
Select Your Apps
About
Guide
Manager
Logs
Settings
Update Manager
Is Your Device Rooted?
Grant Root Permission
Let\'s get started
Select at least one app!
Don\'t know what this is or don\'t want to use the root version? just click the blue arrow below!
About %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
Changelog
Downloading %1$s
Install
Latest:
Install Vanced microG first
Root access not granted
Social Media
Support us
Unavailable
Installed:
Accent Color
Appearance
Behavior
Clear downloaded files
Successfully cleared files
This lets us collect information about app performance and crash logs
Firebase Analytics
Language
Links will open in Chrome Custom Tabs
Use Chrome Custom Tabs
%1$s Push Notifications
Receive push notifications when an update for %1$s is released
Failed to save new time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
System Default
Theme
Dark Theme
Light Theme
Manager Update Center
No new updates
Variant
Could not save logs
Successfully saved logs
Details
%1$s installation files detected!
Manager detected that all necessary files for %1$s installation were found. Do you want to install it?
%1$s Installation Preferences
Checking for updates…
Language(s): %1$s
Theme: %1$s
Version: %1$s
Error
Guide
Stop!
You are using the Magisk/TWRP version of Vanced, which is discontinued and cannot be updated using this app. Please remove it by removing the Magisk module/using TWRP Vanced uninstaller.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Redownload
Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub
Version
Welcome
Choose your preferred language(s) for Vanced
Latest
Light + %1$s
Select at least one language!
Black
Dark
Manager Devs
Other Contributors
Sources
Vanced Team
Failed to `chown` APK to system owner, please try again.
Error Downloading %1$s
Failed to apply new accent color
Failed to uninstall package %1$s
Failed to locate the required files for installation. Re-download the installation files, then try again.
Failed to locate apk file for black/dark theme from storage, please try again.
Installation failed because the user aborted the installation.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Installation failed because the installation file is incompatible with your device. Clear downloaded files in the Settings, then try again.
Installation failed because the apk files are corrupted, please try again.
Installation failed because MIUI Optimization is enabled. Disable MIUI Optimization, then try again.
Installation failed because apk signature verification is enabled. Disable apk signature verification, then try again.
Installation failed because the device doesn\'t have enough free space.
Failed to find apk file for black/dark theme from the installer. Clear app data of Manager, then try again.
Failed to locate the stock YouTube installation path after split installation.
================================================
FILE: app/src/main/res/values-ml-rIN/strings.xml
================================================
റദ്ദാക്കുക
അടക്കുക
മൈക്രോ ജി പ്രോജക്റ്റിനെ അടിസ്ഥാനമാക്കി വാൻസിനായി ഒരു ഇഷ്ടാനുസൃത ജിഎംഎസ് നടപ്പിലാക്കൽ.
ഉപയോഗപ്രദമായ നിരവധി സവിശേഷതകളുള്ള ഒരു പരിഷ്ക്കരിച്ച YouTube ക്ലയന്റ്!
വിജയിച്ചു, പക്ഷേ YouTube സംഗീതത്തിനായി! താരതമ്യേന സവിശേഷത കുറവാണെങ്കിലും നിങ്ങളുടെ ആവശ്യങ്ങൾ നിറവേറ്റുന്നു.
പുനഃക്രമീകരിക്കുക
സൂക്ഷിക്കുക
നിങ്ങളുടെ അപ്ലിക്കേഷനുകൾ തിരഞ്ഞെടുക്കുക
കുറിച്ച്
മാർഗരേഖ
മാനേജർ
ലോഗുകൾ
ക്രമീകരണങ്ങൾ
മാനേജർ പുതുക്കുക
നിങ്ങളുടെ ഉപകരണം റൂട്ടു ചെയ്തതാണോ?
റൂട്ട് അനുമതി നൽകുക
നമുക്ക് തുടങ്ങാം
ഒരു അപ്ലിക്കേഷനെങ്കിലും തിരഞ്ഞെടുക്കുക!
ഇത് എന്താണെന്ന് അറിയില്ല അല്ലെങ്കിൽ റൂട്ട് പതിപ്പ് ഉപയോഗിക്കാൻ ആഗ്രഹിക്കുന്നില്ലേ? ചുവടെയുള്ള നീല അമ്പടയാളത്തിൽ ക്ലിക്കുചെയ്യുക!
ഏകദേശം %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
അപ്ലിക്കേഷനുകൾ
ചേഞ്ച് ലോഗ്
%1$s ഡൗൺലോഡ് ചെയ്യുന്നു
ഇൻസ്റ്റാൾ ചെയ്യുക
ഏറ്റവും പുതിയത്:
ആധ്യം വാൻസ്ഡ് മൈക്രോ-ജി ഇൻസ്റ്റാൾ ചെയ്യുക്ക
റൂട്ട് ആക്സസ് അനുവദിച്ചിട്ടില്ല
സോഷ്യൽ മീഡിയ
ഞങ്ങളെ പിന്തുണയ്ക്കുക
ലഭ്യമല്ല
ഇൻസ്റ്റാൾ ചെയ്തു:
ആക്സന്റ് വർണ്ണം
രൂപം
പെരുമാറ്റം
ഡൗൺലോഡുചെയ്ത ഫയലുകൾ മായ്ക്കുക
ഫയലുകൾ വിജയകരമായി മായ്ച്ചു
അപ്ലിക്കേഷൻ പ്രകടനത്തെയും ക്രാഷ് ലോഗുകളെയും കുറിച്ചുള്ള വിവരങ്ങൾ ശേഖരിക്കാൻ ഇത് ഞങ്ങളെ അനുവദിക്കുന്നു
ഫയർബേസ് അനലിറ്റിക്സ്
ഭാഷ
Chrome Custom ടാബുകളിൽ ലിങ്കുകൾ തുറക്കും
Chrome Custom ടാബുകൾ ഉപയോഗിക്കുക
%1$s പുഷ് അറിയിപ്പുകൾ
%1$s ഒരു അപ്ഡേറ്റ് പുറത്തിറങ്ങുമ്പോൾ പുഷ് അറിയിപ്പുകൾ സ്വീകരിക്കുക
പുതിയ സമയ മൂല്യം സംരക്ഷിക്കുന്നതിൽ പരാജയപ്പെട്ടു
റൂട്ട് സ്ക്രിപ്റ്റ് ഉറക്ക സമയം
മ d ണ്ടിംഗ് പ്രശ്നങ്ങൾ പരിഹരിക്കുന്നതിന് ഉപയോഗപ്രദമായ /data/adb/service.d/app.sh സ്ക്രിപ്റ്റിൽ ഉപയോഗിച്ചിരിക്കുന്ന ഉറക്ക സമയ മൂല്യം ക്രമീകരിക്കുക
സിസ്റ്റം സ്ഥിരസ്ഥിതി
തീം
ഡാർക്ക് തീം
ലൈറ്റ് തീം
മാനേജർ അപ്ഡേറ്റ് സെന്റർ
പുതിയ അപ്ഡേറ്റുകളൊന്നുമില്ല
വേരിയൻറ്
ലോഗുകൾ സംരക്ഷിക്കാനായില്ല
ലോഗുകൾ വിജയകരമായി സംരക്ഷിച്ചു
വിശദാംശങ്ങൾ
%1$s ഇൻസ്റ്റാളേഷൻ ഫയലുകൾ കണ്ടെത്തി!
%1$s ഇൻസ്റ്റാളേഷന് ആവശ്യമായ എല്ലാ ഫയലുകൾ മാനേജർ കണ്ടെത്തി. ഇത് ഇൻസ്റ്റാൾ ചെയ്യാൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നുണ്ടോ?
%1$s ഇൻസ്റ്റാളേഷൻ മുൻഗണനകൾ
അപ്ഡേറ്റുകൾക്കായി പരിശോധിക്കുന്നു…
ഭാഷ(കൾ):%1$s
തീം: %1$s
പതിപ്പ്:%1$s
തെറ്റ്
മാർഗരേഖ
നിർത്തുക!
നിങ്ങൾ വാൻസെഡിന്റെ മാജിസ്ക് / ടിഡബ്ല്യുആർപി പതിപ്പ് ഉപയോഗിക്കുന്നു, അത് നിർത്തലാക്കുകയും ഈ അപ്ലിക്കേഷൻ ഉപയോഗിച്ച് അപ്ഡേറ്റ് ചെയ്യാൻ കഴിയില്ല. മാജിസ്ക് മൊഡ്യൂൾ നീക്കംചെയ്ത് / ടിഡബ്ല്യുആർപി വാൻസ്ഡ് അൺഇൻസ്റ്റാളർ ഉപയോഗിച്ച് ഇത് നീക്കംചെയ്യുക.
വാൻസ്ഡ് ഇൻസ്റ്റാൾ ചെയ്യുന്നതിന്, ഡവലപ്പർ ക്രമീകരണങ്ങളിൽ നിങ്ങൾ MIUI ഒപ്റ്റിമൈസേഷനുകൾ അപ്രാപ്തമാക്കണം. (നിങ്ങൾ 20.2.20 അല്ലെങ്കിൽ അതിനുശേഷമുള്ള xiaomi.eu അടിസ്ഥാനമാക്കിയുള്ള റോം ഉപയോഗിക്കുകയാണെങ്കിൽ നിങ്ങൾക്ക് ഈ മുന്നറിയിപ്പ് അവഗണിക്കാം)
MIUI ഒപ്റ്റിമൈസേഷനുകൾ പ്രാപ്തമാക്കി!
പ്രോസസ്സ് സമയത്ത് അപ്ലിക്കേഷനിൽ നിന്ന് പുറത്തുകടക്കരുത്!
വീണ്ടും ഡൗൺലോഡുചെയ്യുക
നിങ്ങൾ vancedapp.com, Vanced Discord സെർവർ, അല്ലെങ്കിൽ Vanced GitHub എന്നിവയിൽ നിന്ന് അപ്ലിക്കേഷൻ download ൺലോഡ് ചെയ്തുവെന്ന് ഉറപ്പാക്കുക
പതിപ്പ്
സ്വാഗതം
വാൻസിനായി നിങ്ങൾ ഭാഷ (കൾ) തിരഞ്ഞെടുക്കുക
ഏറ്റവും പുതിയ
പ്രകാശം +%1$s
ഒരു ഭാഷയെങ്കിലും തിരഞ്ഞെടുക്കുക!
കറുപ്പ്
ഇരുണ്ടത്
മാനേജർ ഡവലപ്പർമാർ
മറ്റ് സംഭാവകർ
ഉറവിടങ്ങൾ
വാൻസ്ഡ് ടീം
സിസ്റ്റം ഉടമയ്ക്ക് APK `chown` ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു, ദയവായി വീണ്ടും ശ്രമിക്കുക.
%1$s ഡൗൺലോഡുചെയ്യുന്നതിൽ പിശക്
പുതിയ ആക്സന്റ് വർണ്ണം പ്രയോഗിക്കുന്നതിൽ പരാജയപ്പെട്ടു
%1$s package അൺഇൻസ്റ്റാൾ ചെയ്യുന്നതിൽ പരാജയപ്പെട്ടു
ഇൻസ്റ്റാളേഷന് ആവശ്യമായ ഫയലുകൾ കണ്ടെത്തുന്നതിൽ പരാജയപ്പെട്ടു. ഇൻസ്റ്റാളേഷൻ ഫയലുകൾ വീണ്ടും ഡ download ൺലോഡ് ചെയ്യുക, തുടർന്ന് വീണ്ടും ശ്രമിക്കുക.
സംഭരണത്തിൽ നിന്ന് കറുപ്പ് / ഇരുണ്ട തീമിനായി Apk ഫയൽ കണ്ടെത്തുന്നതിൽ പരാജയപ്പെട്ടു, ദയവായി വീണ്ടും ശ്രമിക്കുക.
ഉപയോക്താവ് ഇൻസ്റ്റാളേഷൻ നിർത്തലാക്കിയതിനാൽ ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു.
ഇതിനകം ഇൻസ്റ്റാളുചെയ്ത അപ്ലിക്കേഷനുമായി അപ്ലിക്കേഷൻ പൊരുത്തപ്പെടുന്നതിനാൽ ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു. അപ്ലിക്കേഷന്റെ നിലവിലെ പതിപ്പ് അൺഇൻസ്റ്റാൾ ചെയ്യുക, തുടർന്ന് വീണ്ടും ശ്രമിക്കുക.
ഉപയോക്താവ് പാക്കേജ് തരംതാഴ്ത്താൻ ശ്രമിച്ചതിനാൽ ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു. സ്റ്റോക്ക് അപ്ലിക്കേഷനിൽ നിന്ന് അപ്ഡേറ്റുകൾ അൺഇൻസ്റ്റാൾ ചെയ്യുക, തുടർന്ന് വീണ്ടും ശ്രമിക്കുക.
അജ്ഞാതമായ കാരണങ്ങളാൽ ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു, കൂടുതൽ പിന്തുണയ്ക്കായി ഞങ്ങളുടെ ടെലിഗ്രാം അല്ലെങ്കിൽ ഡിസ്കോർഡിൽ ചേരുക. വിപുലമായ മെനുവിൽ നിന്ന് ഒരു സ്ക്രീൻഷോട്ട് അറ്റാച്ചുചെയ്യുക
ഇൻസ്റ്റാളേഷൻ ഫയൽ നിങ്ങളുടെ ഉപകരണവുമായി പൊരുത്തപ്പെടാത്തതിനാൽ ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു. ക്രമീകരണങ്ങളിൽ ഡ download ൺലോഡ് ചെയ്ത ഫയലുകൾ മായ്ക്കുക, തുടർന്ന് വീണ്ടും ശ്രമിക്കുക.
Apk ഫയലുകൾ കേടായതിനാൽ ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു, ദയവായി വീണ്ടും ശ്രമിക്കുക.
MIUI ഒപ്റ്റിമൈസേഷൻ പ്രാപ്തമാക്കിയതിനാൽ ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു. MIUI ഒപ്റ്റിമൈസേഷൻ അപ്രാപ്തമാക്കുക, തുടർന്ന് വീണ്ടും ശ്രമിക്കുക.
Apk സിഗ്നേച്ചർ പരിശോധന പ്രാപ്തമാക്കിയതിനാൽ ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു. Apk സിഗ്നേച്ചർ പരിശോധന അപ്രാപ്തമാക്കുക, തുടർന്ന് വീണ്ടും ശ്രമിക്കുക.
ഉപകരണത്തിന് മതിയായ ഇടമില്ലാത്തതിനാൽ ഇൻസ്റ്റാളേഷൻ പരാജയപ്പെട്ടു.
ഇൻസ്റ്റാളറിൽ നിന്ന് കറുപ്പ് / ഇരുണ്ട തീമിനായി Apk ഫയൽ കണ്ടെത്തുന്നതിൽ പരാജയപ്പെട്ടു. മാനേജറിന്റെ അപ്ലിക്കേഷൻ ഡാറ്റ മായ്ക്കുക, തുടർന്ന് വീണ്ടും ശ്രമിക്കുക.
വിഭജന ഇൻസ്റ്റാളേഷന് ശേഷം സ്റ്റോക്ക് YouTube ഇൻസ്റ്റാളേഷൻ പാത്ത് കണ്ടെത്തുന്നതിൽ പരാജയപ്പെട്ടു.
================================================
FILE: app/src/main/res/values-mr-rIN/strings.xml
================================================
रद्द करा
बंद करा
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
रीसेट करा
सेव करा
आपले अप्प्स निवडा
अॅप बद्दल माहिती
Guide
मॅनेजर
Logs
सेटिंग
मॅनेजर ला अपडेट करा
आपला मोबाइल रूट आहे का?
रूट ची परवानगी द्या
Let\'s get started
कमीत कमी एक अॅप निवडा!
Don\'t know what this is or don\'t want to use the root version? just click the blue arrow below!
About %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
Changelog
Downloading %1$s
Install
Latest:
Install Vanced microG first
Root access not granted
Social Media
Support us
Unavailable
Installed:
Accent Color
Appearance
Behavior
Clear downloaded files
Successfully cleared files
This lets us collect information about app performance and crash logs
Firebase Analytics
Language
Links will open in Chrome Custom Tabs
Use Chrome Custom Tabs
%1$s Push Notifications
Receive push notifications when an update for %1$s is released
Failed to save new time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
System Default
Theme
Dark Theme
Light Theme
Manager Update Center
No new updates
Variant
Could not save logs
Successfully saved logs
Details
%1$s installation files detected!
Manager detected that all necessary files for %1$s installation were found. Do you want to install it?
%1$s Installation Preferences
Checking for updates…
Language(s): %1$s
Theme: %1$s
Version: %1$s
Error
Guide
Stop!
You are using the Magisk/TWRP version of Vanced, which is discontinued and cannot be updated using this app. Please remove it by removing the Magisk module/using TWRP Vanced uninstaller.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Redownload
Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub
Version
Welcome
Choose your preferred language(s) for Vanced
Latest
Light + %1$s
Select at least one language!
Black
Dark
Manager Devs
Other Contributors
Sources
Vanced Team
Failed to `chown` APK to system owner, please try again.
Error Downloading %1$s
Failed to apply new accent color
Failed to uninstall package %1$s
Failed to locate the required files for installation. Re-download the installation files, then try again.
Failed to locate apk file for black/dark theme from storage, please try again.
Installation failed because the user aborted the installation.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Installation failed because the installation file is incompatible with your device. Clear downloaded files in the Settings, then try again.
Installation failed because the apk files are corrupted, please try again.
Installation failed because MIUI Optimization is enabled. Disable MIUI Optimization, then try again.
Installation failed because apk signature verification is enabled. Disable apk signature verification, then try again.
Installation failed because the device doesn\'t have enough free space.
Failed to find apk file for black/dark theme from the installer. Clear app data of Manager, then try again.
Failed to locate the stock YouTube installation path after split installation.
================================================
FILE: app/src/main/res/values-night/colors.xml
================================================
#131317
================================================
FILE: app/src/main/res/values-nl-rNL/strings.xml
================================================
Annuleren
Sluiten
Een aangepaste GMS-implementatie voor Vanced gebaseerd op het microG-project.
Een aangepaste versie van YouTube met veel handige functies!
Vanced, maar voor YouTube Music!\nMinder functies maar voldoet aan al je wensen.
Herstellen
Bewaren
Apps selecteren
Over
Gids
Manager
Logs
Instellingen
Manager bijwerken
Is je apparaat geroot?
Root-machtiging toestaan
Aan de slag!
Selecteer minstens één app!
Weet je niet wat dit is of wil je de root-versie niet gebruiken? Klik dan op de blauwe pijl hieronder!
Over %1$s
Downloaden
Info
Starten
Herinstalleren
Verwijderen
Bijwerken
Apps
Wijzigingen
%1$s downloaden
Installeren
Recentste:
Installeer eerst Vanced microG
Root machtiging niet toegestaan
Sociale media
Steun ons
Niet beschikbaar
Geïnstalleerd:
Accentkleur
Weergave
Gedrag
Gedownloade bestanden verwijderen
Bestanden succesvol verwijderd
Hiermee kunnen we informatie over app-prestaties en crashlogs verzamelen
Firebase-analytics
Taal
Links zullen openen in aangepaste Chrome-tabs
Aangepaste Chrome-tabs gebruiken
Pushmeldingen %1$s
Pushmeldingen ontvangen wanneer er een update voor %1$s beschikbaar is
Bewaren van nieuwe waarde voor slaaptimer mislukt
Slaaptimer root script
Aanpassen waarde voor slaaptimer gebruikt in /data/adb/service.d/app.sh script, nuttig bij mount-issues
Systeemstandaard
Thema
Donker thema
Licht thema
Manager bijwerken
Geen nieuwe updates
Versie
Logs niet opgeslagen
Logs succesvol opgeslagen
Details
Installatiebestanden voor %1$s gedetecteerd!
Manager heeft alle nodige bestanden gedetecteerd voor het installeren van %1$s. Wil je ze installeren?
Installatievoorkeuren voor %1$s
Controleren op updates…
Talen: %1$s
Thema: %1$s
Versie: %1$s
Fout
Handleiding
Stoppen!
Je gebruikt de Magisk/TWRP-versie van Vanced, die is stopgezet en niet met deze app kan worden bijgewerkt. Verwijder deze eerst door de Magisk-module te verwijderen of door de TWRP Vanced-uninstaller te gebruiken.
Om Vanced te installeren MOET je MIUI-optimalisaties uitschakelen in de ontwikkelaarsinstellingen (je kunt deze waarschuwing negeren als je de op xiaomi.eu gebaseerde ROM 20.2.20 of later gebruikt)
MIUI-optimalisaties zijn ingeschakeld!
Sluit de app NIET af tijdens dit proces!
Opnieuw downloaden
Zorg ervoor dat je de app hebt gedownload van vancedapp.com, de Vanced Discord-server of Vanced GitHub
Versie
Welkom
Kies je gewenste taal/talen voor Vanced
Nieuwste versie
Licht + %1$s
Selecteer minstens één taal!
Zwart
Donker
Ontwikkelaars Manager
Andere bijdrages
Bronnen
Vanced Team
Wijzigen van APK-eigenaar naar systeemeigenaar mislukt. Probeer het opnieuw.
Fout bij downloaden van %1$s
Nieuwe accentkleur toepassen mislukt
Deïnstalleren van pakket %1$s mislukt
Kan de vereiste bestanden voor de installatie niet vinden. Download de installatiebestanden opnieuw en probeer het opnieuw.
Kan het apk-bestand voor zwart/donker thema niet vinden in opslag. Probeer het opnieuw.
Installatie mislukt omdat de gebruiker de installatie heeft afgebroken.
Installatie mislukt omdat de app conflicten heeft met een reeds geïnstalleerde app. Verwijder de huidige versie van die app en probeer het opnieuw.
Installatie mislukt omdat de gebruiker het pakket probeerde te downgraden. Verwijder updates van de standaard app en probeer het daarna opnieuw.
Installatie is mislukt om onbekende redenen, ga naar Telegram of Discord voor verdere ondersteuning. Voeg een screenshot toe via het menu Geavanceerd.
Installatie mislukt omdat het installatiebestand niet compatibel is met jouw apparaat. Wis de gedownloade bestanden in de instellingen en probeer het opnieuw.
Installatie mislukt omdat de apk-bestanden beschadigd zijn. Probeer het opnieuw.
Installatie mislukt omdat MIUI-optimalisatie is ingeschakeld. Schakel MIUI-optimalisatie uit en probeer het opnieuw.
Installatie mislukt omdat apk-handtekeningverificatie is ingeschakeld. Schakel apk-handtekeningverificatie uit en probeer het opnieuw.
Installatie mislukt omdat het apparaat niet genoeg vrije ruimte heeft.
Kan het apk-bestand voor zwart/donker thema niet vinden in het installatiebestand. Verwijder de appdata van Vanced Manager en probeer het opnieuw.
Kan het standaard YouTube-installatiepad niet vinden na de gesplitste installatie.
================================================
FILE: app/src/main/res/values-no-rNO/strings.xml
================================================
Avbryt
Lukk
En tilpasset GMS-implementering for Vanced basert på microG-prosjektet.
En modifisert YouTube klient med mange nyttige funksjoner!
Vanced, med for YouTube Musikk! Relativt mindre funkjonsrik men dekker dine behov.
Tilbakestill
Lagre
Velg dine apper
Om
Guide
Leder
Logger
Innstillinger
Oppdater administrator
Er enheten tilkoblet?
Gi root-tillatelse
La oss komme i gang
Velg minst en app!
Vet du ikke hva detter er eller ikke ønsker å bruke rot-versjonen? Bare klikk på den blå pilen nedenfor!
Om %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apper
Endringslogg
Laster ned %1$s
Installer
Siste:
Installer Vanced microG først
Root-tilgang ikke godkjent
Sosiale Medier
Støtt oss
Utilgjengelig
Installert:
Aksentfarge
Utseende
Oppførsel
Fjern nedlastede filer
Valgte filer er fjernet
Dette lar oss samle informasjon om app-ytelse og krasj-logger
Firebase analyser
Språk
Lenker vil åpne i Chrome Custom Tabs
Bruk Chrome Custom Tabs
%1$s Push varsler
Motta push varsler når en oppdatering for %1$s er utgitt
Kan ikke lagre ny tidsverdi
Hviletid for Root skript
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
System standard
Tema
Mørkt tema
Lyst tema
Oppdateringssenter
Ingen nye oppdateringer
Variant
Could not save logs
Successfully saved logs
Details
%1$s installasjonsfiler oppdaget!
Manager oppdaget at alle nødvendige filer for %1$s installasjonen ble funnet. Vil du installere den?
%1$s Installasjonsinnstillinger
Sjekker etter oppdateringer…
Språk: %1$s
Tema: %1$s
Versjon: %1$s
Feil
Guide
Stopp!
Du bruker Magisk/TWRP-versjonen av Vansert, som seponeres og som ikke kan oppdateres ved hjelp av denne appen. Vennligst fjern den ved å fjerne Magisk modul/bruke TWRP Vanced uninstaller.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Last ned på nytt
Sørg for at du lastet ned appen fra vancedapp.com, Vanced Discord server, eller Vanced GitHub
Versjon
Velkommen
Velg dine foretrukne språk for Vanced
Latest
Lys + %1$s
Velg minst ett språk!
Black
Dark
Manager Devs
Other Contributors
Kilder
Vanced Team
Kan ikke `chown` APK til systemeieren, vennligst prøv igjen.
Feil ved nedlasting %1$s
Failed to apply new accent color
Kunne ikke avinstallere pakken %1$s
Kunne ikke finne de nødvendige filene for installasjon. Last ned installasjonsfilene på nytt, og prøv på nytt.
Klarte ikke å finne apk-filen for svart/mørkt tema på enheten, vennligst prøv igjen.
Installasjonen mislyktes fordi brukeren avbrutt installasjonen.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Installasjonen mislyktes på grunn av at installasjonsfilen er inkompatibel med enheten. Fjern nedlastede filer i innstillinger og prøv på nytt.
Installasjonen mislyktes fordi apk-filene er ødelagt, vennligst prøv på nytt.
Installasjonen mislyktes fordi MIUI-optimalisering er aktivert. Deaktiver MIUI-optimalisering og prøv på nytt.
Installasjon feilet fordi apk signaturverifikasjon er aktivert. Deaktiver apk signaturverifikasjon og prøv på nytt.
Installation failed because the device doesn\'t have enough free space.
Finner ikke apk-filen for svart/mørkt tema fra installatøren. Fjern data fra denne appen og prøv på nytt.
Klarte ikke å lokalisere YouTube installasjonsstien etter splittet installasjon.
================================================
FILE: app/src/main/res/values-pa-rIN/strings.xml
================================================
ਰੱਦ ਕਰੋ
ਬੰਦ ਕਰੋ
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
ਰੀਸੈੱਟ
ਸੁੱਰਖਿਅਤ ਕਰੋ
ਹੋਰ ਐਪ ਚੁਣੋ
ਸਾਡੇ ਬਾਰੇ ਵਿੱਚ
Guide
ਮੈਨੇਜਰ
Logs
ਸੈਟਿੰਗਜ਼
ਅਪਡੇਟ ਮੈਨੇਜਰ
ਕੀ ਤੁਹਾਡੀ ਡਵਿਾਈਸ ਰੂਟ ਕੀਤਾ ਹੈ?
ਰੂਟ ਹਿਦਾਇਤਾਂ ਜਾਰੀ
ਆਓ ਸ਼ੁਰੂ ਕਰੀਏ
ਘੱਟੋ ਘੱਟ ਇੱਕ ਐਪ ਦੀ ਚੋਣ ਕਰੋ!
ਪਤਾ ਨਹੀਂ ਇਹ ਕੀ ਹੈ ਜਾਂ ਰੂਟ ਵਰਜ਼ਨ ਨਹੀਂ ਵਰਤਣਾ ਚਾਹੁੰਦੇ? ਹੇਠ ਦਿੱਤੇ ਨੀਲੇ ਤੀਰ ਤੇ ਕਲਿਕ ਕਰੋ!
ਬਾਰੇ %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
ਤਬਦੀਲੀਆਂ
ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ %1$s
ਸਥਾਪਨਾ
ਨਵੀਨਤਮ:
Install Vanced microG first
ਰੂਟ ਐਕਸੈਸ ਨਹੀਂ ਦਿੱਤੀ ਗਈ
ਸੋਸ਼ਲ ਮੀਡੀਆ
ਸਾਡਾ ਸਮਰਥਨ ਕਰੋ
ਮੋਜੂਦ ਨਹੀਂ ਹੈ
ਸਥਾਪਿਤ:
ਐੱਕਸੈਂਟ ਰੰਗ
ਦਿੱਖ
ਵਿਹਾਰ
ਡਾਉਨਲੋਡ ਕੀਤੀਆਂ ਫਾਇਲਾਂ ਸਾਫ਼ ਕਰੋ
ਸਫਲਤਾਪੂਰਵਕ ਫਾਈਲਾਂ ਸਾਫ਼ ਕੀਤੀਆਂ
ਇਹ ਸਾਨੂੰ ਐਪ ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਕਰੈਸ਼ ਲੌਗਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਇਕੱਠੀ ਕਰਨ ਦਿੰਦਾ ਹੈ
ਫਾਇਰਬੇਸ ਵਿਸ਼ਲੇਸ਼ਣ
ਭਾਸ਼ਾ
ਲਿੰਕ ਕਰੋਮ ਕਸਟਮ ਟੈਬਸ ਵਿੱਚ ਖੁੱਲ੍ਹਣਗੇ
ਕਰੋਮ ਕਸਟਮ ਟੈਬਸ ਦੀ ਵਰਤੋਂ ਕਰੋ
%1$s ਪੁਸ਼ ਸੂਚਨਾਵਾਂ
ਜਦੋਂ %1$s ਦਾ ਅੱਪਡੇਟ ਜਾਰੀ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਤਾਂ ਪੁਸ਼ ਸੂਚਨਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰੋ
ਨਵਾਂ ਸਮਾਂ ਮੁੱਲ ਬਚਾਉਣ ਵਿੱਚ ਅਸਫਲ
ਰੂਟ ਸਕ੍ਰਿਪਟ ਨੀਂਦ ਦਾ ਸਮਾਂ
ਮਾdਟ ਕਰਨ ਵਾਲੇ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਲਾਭਦਾਇਕ, /data/adb/service.d/app.sh ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਸੁੱਤਾ ਸਮਾਂ ਮੁੱਲ ਵਿਵਸਥਿਤ ਕਰੋ
ਸਿਸਟਮ ਡਿਫੌਲਟ
ਥੀਮ
ਡਾਰਕ ਥੀਮ
ਲਾਇਟ ਥੀਮ
ਮੈਨੇਜਰ ਅਪਡੇਟ ਕੇਂਦਰ
ਕੋਈ ਨਵੇਂ ਅਪਡੇਟਸ ਨਹੀਂ
ਕਿਸਮ
Could not save logs
Successfully saved logs
Details
%1$s ਇੰਸਟਾਲੇਸ਼ਨ ਫਾਈਲਾਂ ਲੱਭੀਆਂ!
ਮੈਨੇਜਰ ਨੇ ਖੋਜਿਆ ਕਿ ਇੰਸਟਾਲੇਸ਼ਨ ਲਈ ਲੋੜੀਂਦੀਆਂ ਫਾਇਲਾਂ %1$s ਮਿਲੀਆਂ ਹਨ. ਕੀ ਤੁਸੀਂ ਇਸ ਨੂੰ ਸਥਾਪਤ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?
%1$s ਸਥਾਪਨਾ ਚੁਣੋ
ਅੱਪਡੇਟ ਲਈ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ…
ਭਾਸ਼ਾ (ਇ): %1$s
ਥੀਮ: %1$s
ਵਰਜਨ %1$s
ਗਲਤੀ
ਗਾਇਡ
ਉਡੀਕੋ!
ਤੁਸੀਂ Vanced ਦੇ Magisk / TWRP ਸੰਸਕਰਣ ਦਾ ਉਪਯੋਗ ਕਰ ਰਹੇ ਹੋ, ਜਿਸਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ ਅੱਤੇ ਇਸ ਐਪ ਦਾ ਉਪਯੋਗ ਕਰਕੇ ਅੱਪਡੇਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ| ਕਿਰਪਾ ਇਸ Magisk ਮੋਡੂਅਲ ਨੂੰ / TWRP Vanced uninstaller ਦਾ ਉਪਯੋਗ ਕਰਕੇ ਹੱਟਾ ਦੇਵੋਂ.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
ਮੁੜ ਡਾਉਨਲੋਡ
ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਸੀਂ vancedapp.com, Vanced Discord ਸਰਵਰ ਜਾਂ Vanced GitHub ਤੋਂ ਐਪ ਡਾਉਨਲੋਡ ਕੀਤਾ ਹੈ
ਵਰਜਨ
ਜੀ ਆਇਆਂ ਨੂੰ
Vanced ਦੇ ਲਈ ਆਪਣੀ ਪਸੰਦੀਦਾ ਭਾਸ਼ਾ (ਏ) ਚੁਣੋ
Latest
ਲਾਇਟ + %1$s
ਘੱਟੋ-ਘੱਟ ਇੱਕ ਭਾਸ਼ਾ ਚੁਣੋ!
Black
Dark
ਪ੍ਬੰਧਕ ਨਿਰਮਾਣਕਰਤਾ
Other Contributors
ਸਰੋਤ
Vanced ਟੋਲੀ
ਸਿਸਟਮ ਦੇ ਮਾਲਕ ਨੂੰ APK ਨੂੰ `chown` ਕਰਨ ਵਿੱਚ ਨਾਕਾਮ, ਫਿਰ ਤੋਂ ਕੋਸ਼ਿਸ਼ ਕਰੋ.
ਡਾਉਨਲੋਡ ਕਰਨ ਦੌਰਾਨ ਗਲਤੀ %1$s
ਨਵਾਂ ਲਹਿਜ਼ਾ ਰੰਗ ਲਾਗੂ ਕਰਨ ਵਿੱਚ ਅਸਫਲ
ਪੈਕਜ ਦੀ ਸਥਾਪਨਾ ਰੱਦ ਕਰਨ ਵਿੱਚ ਨਾਕਾਮ %1$s
ਇੰਸਟਾਲੇਸ਼ਨ ਲਈ ਲੋੜੀਂਦੀਆਂ ਫਾਈਲਾਂ ਦਾ ਪਤਾ ਲਗਾਉਣ ਵਿੱਚ ਅਸਫਲ. ਇੰਸਟਾਲੇਸ਼ਨ ਫਾਈਲਾਂ ਨੂੰ ਮੁੜ ਡਾਉਨਲੋਡ ਕਰੋ, ਫਿਰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ.
ਸਟੋਰੇਜ ਤੋਂ ਕਾਲੇ / ਹਨੇਰੇ ਥੀਮ ਲਈ ਏਪੀਕੇ ਫਾਈਲ ਲੱਭਣ ਵਿੱਚ ਅਸਫਲ, ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ.
ਇੰਸਟਾਲ ਨਾਕਾਮ ਰਹੀ ਕਿਓਂਕਿ ਉਪਯੋਗਕਰਤਾ ਨੇ ਇੰਸਟਾਲੇਸ਼ਨ ਰੱਦ ਕਰ ਦਿੱਤੀ.
ਸਥਾਪਨਾ ਅਸਫਲ ਕਿਉਂਕਿ ਐਪ ਪਹਿਲਾਂ ਤੋਂ ਸਥਾਪਤ ਐਪ ਨਾਲ ਟਕਰਾਉਂਦੀ ਹੈ. ਐਪ ਦੇ ਮੌਜੂਦਾ ਸੰਸਕਰਣ ਨੂੰ ਅਣਇੰਸਟੌਲ ਕਰੋ, ਫਿਰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
ਸਥਾਪਨਾ ਅਸਫਲ ਹੋਈ ਕਿਉਂਕਿ ਇੰਸਟਾਲੇਸ਼ਨ ਫਾਈਲ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਦੇ ਅਨੁਕੂਲ ਨਹੀਂ ਹੈ. ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਡਾਉਨਲੋਡ ਕੀਤੀਆਂ ਫਾਈਲਾਂ ਸਾਫ਼ ਕਰੋ, ਫਿਰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ.
ਸਥਾਪਨਾ ਅਸਫਲ ਹੋਈ ਕਿਉਂਕਿ ਏਪੀਕੇ ਫਾਈਲਾਂ ਖ਼ਰਾਬ ਹਨ, ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ.
MIUI ਸਥਾਪਨਾ ਅਸਫਲ, ਕਿਉਂਕਿ Optimization ਯੋਗ ਕੀਤੀ ਗਈ ਸੀ. MIUI Optimization ਅਯੋਗ ਕਰੋ ਫਿਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ.
ਸਥਾਪਨਾ ਅਸਫਲ ਕਿਉਂਕਿ ਏਪੀਕੇ ਦਸਤਖਤ ਤਸਦੀਕ ਯੋਗ ਹੈ. ਏਪੀਕੇ ਦਸਤਖਤ ਤਸਦੀਕ ਨੂੰ ਅਯੋਗ ਕਰੋ, ਫਿਰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ.
Installation failed because the device doesn\'t have enough free space.
ਇੰਸਟੌਲਰ ਤੋਂ ਕਾਲੇ / ਹਨੇਰੇ ਥੀਮ ਲਈ ਏਪੀਕੇ ਫਾਈਲ ਲੱਭਣ ਵਿੱਚ ਅਸਫਲ. ਮੈਨੇਜਰ ਐਪ ਦਾ ਡਾਟਾ ਸਾਫ਼ ਕਰੋ, ਫਿਰ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ.
ਸਪਲਿਟ ਇੰਸਟਾਲੇਸ਼ਨ ਦੇ ਬਾਅਦ ਸਟਾਕ YouTube ਇੰਸਟਾਲੇਸ਼ਨ ਮਾਰਗ ਦਾ ਪਤਾ ਲਗਾਉਣ ਵਿੱਚ ਅਸਫਲ.
================================================
FILE: app/src/main/res/values-pa-rPK/strings.xml
================================================
Cancel
Close
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
Reset
Save
Select Your Apps
About
Guide
Manager
Logs
Settings
Update Manager
Is Your Device Rooted?
Grant Root Permission
Let\'s get started
Select at least one app!
Don\'t know what this is or don\'t want to use the root version? just click the blue arrow below!
About %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
Changelog
Downloading %1$s
Install
Latest:
Install Vanced microG first
Root access not granted
Social Media
Support us
Unavailable
Installed:
Accent Color
Appearance
Behavior
Clear downloaded files
Successfully cleared files
This lets us collect information about app performance and crash logs
Firebase Analytics
Language
Links will open in Chrome Custom Tabs
Use Chrome Custom Tabs
%1$s Push Notifications
Receive push notifications when an update for %1$s is released
Failed to save new time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
System Default
Theme
Dark Theme
Light Theme
Manager Update Center
No new updates
Variant
Could not save logs
Successfully saved logs
Details
%1$s installation files detected!
Manager detected that all necessary files for %1$s installation were found. Do you want to install it?
%1$s Installation Preferences
Checking for updates…
Language(s): %1$s
Theme: %1$s
Version: %1$s
Error
Guide
Stop!
You are using the Magisk/TWRP version of Vanced, which is discontinued and cannot be updated using this app. Please remove it by removing the Magisk module/using TWRP Vanced uninstaller.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Redownload
Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub
Version
Welcome
Choose your preferred language(s) for Vanced
Latest
Light + %1$s
Select at least one language!
Black
Dark
Manager Devs
Other Contributors
Sources
Vanced Team
Failed to `chown` APK to system owner, please try again.
Error Downloading %1$s
Failed to apply new accent color
Failed to uninstall package %1$s
Failed to locate the required files for installation. Re-download the installation files, then try again.
Failed to locate apk file for black/dark theme from storage, please try again.
Installation failed because the user aborted the installation.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Installation failed because the installation file is incompatible with your device. Clear downloaded files in the Settings, then try again.
Installation failed because the apk files are corrupted, please try again.
Installation failed because MIUI Optimization is enabled. Disable MIUI Optimization, then try again.
Installation failed because apk signature verification is enabled. Disable apk signature verification, then try again.
Installation failed because the device doesn\'t have enough free space.
Failed to find apk file for black/dark theme from the installer. Clear app data of Manager, then try again.
Failed to locate the stock YouTube installation path after split installation.
================================================
FILE: app/src/main/res/values-pl-rPL/strings.xml
================================================
Anuluj
Zamknij
Niestandardowa implementacja GMS dla Vanced w oparciu o projekt microG.
Zmodyfikowany klient YouTube z wieloma przydatnymi funkcjami!
Vanced, ale dla Muzyki YouTube! Stosunkowo mniej bogaty w funkcje, ale spełnia Twoje potrzeby.
Zresetuj
Zapisz
Wybierz swoje aplikacje
O nas
Przewodnik
Menedżer
Dzienniki
Ustawienia
Zaktualizuj Menedżera
Czy Twoje urządzenie jest zakorzenione (root)?
Przyznaj uprawnienie root
Zaczynajmy
Wybierz co najmniej jedną aplikację!
Nie wiesz, co to jest lub nie chcesz użyć wersji z rootem? Po prostu kliknij niebieską strzałkę poniżej!
O %1$s
Pobierz
Informacja
Uruchom
Przeinstaluj
Odinstaluj
Aktualizuj
Aplikacje
Lista zmian
Pobieranie %1$s
Zainstaluj
Najnowsza:
Najpierw zainstaluj Vanced microG
Root nie został przyznany
Media Społecznościowe
Wesprzyj nas
Niedostępne
Zainstalowano:
Kolor Akcentu
Wygląd
Zachowanie
Wyczyść pobrane pliki
Pomyślnie wyczyszczono pliki
To pozwala nam zbierać informacje o wydajności aplikacji i dziennikach awarii
Analityka Firebase
Język
Linki zostaną otwarte w niestandardowych kartach Chrome
Używaj niestandardowych kart Chrome
%1$s Powiadomień Push
Otrzymuj powiadomienia push po wydaniu aktualizacji dla %1$s
Nie udało się zapisać nowej wartości czasu
Czas snu skryptu root
Dostosuj wartość czasu uśpienia w skrypcie /data/adb/service.d/app.sh, przydatne do naprawy problemów z montowaniem
Domyślny systemowy
Motyw
Ciemny Motyw
Jasny Motyw
Centrum aktualizacji
Brak nowych aktualizacji
Wariant
Nie udało się zapisać dzienników
Pomyślnie zapisano dzienniki
Szczegóły
Wykryto %1$s plików instalacyjnych!
Menedżer wykrył, że znaleziono wszystkie pliki niezbędne do instalacji %1$s. Czy chcesz zainstalować?
Preferencje instalacji %1$s
Sprawdzam aktualizacje…
Język(i): %1$s
Motyw: %1$s
Wersja: %1$s
Błąd
Przewodnik
Stop!
Używasz wersji Magisk/TWRP Vanced, która została przerwana i nie może zostać zaktualizowana za pomocą tej aplikacji. Proszę go usunąć usuwając moduł Magisk/używając TWRP Vanced deinstalatora.
Aby zainstalować Vanced, MUSISZ wyłączyć optymalizację MIUI w ustawieniach dewelopera. (Możesz zignorować to ostrzeżenie, jeśli korzystasz z ROM 20.2.20 lub późniejszego xiaomi.eu)
Optymalizacja MIUI jest włączona!
NIE wychodź z aplikacji podczas trwania tego procesu!
Pobierz ponownie
Upewnij się, że pobrałeś aplikację z vancedapp.com, serwera Vanced Discord lub Vanced GitHub
Wersja
Witaj
Wybierz preferowany język(i) dla Vanced
Najnowsza
Jasny + %1$s
Wybierz co najmniej jeden język!
Czarny
Ciemny
Deweloperzy Menedżera
Inni współtwórcy
Źródła
Zespół Vanced
Nie udało się `chown` APK dla właściciela systemu, spróbuj ponownie.
Błąd pobierania %1$s
Nie udało się zastosować nowego koloru akcentu
Nie udało się odinstalować pakietu %1$s
Nie udało się zlokalizować wymaganych plików do instalacji. Pobierz ponownie pliki instalacyjne, a następnie spróbuj ponownie.
Nie udało się zlokalizować pliku apk dla czarnego/ciemnego motywu, spróbuj ponownie.
Instalacja nie powiodła się, ponieważ użytkownik przerwał instalację.
Instalacja nie powiodła się ponieważ aplikacja konfliktuje z już zainstalowaną aplikacją. Odinstaluj aktualną wersję aplikacji a następnie spróbuj ponownie.
Instalacja nie powiodła się, ponieważ użytkownik próbował obniżyć paczkę. Odinstaluj aktualizacje z domyślnej aplikacji YouTube, a następnie spróbuj ponownie.
Instalacja nie powiodła się z nieznanych powodów, dołącz do naszego Telegrama lub Discorda, aby uzyskać dalsze wsparcie. Proszę również dołączyć zrzut ekranu z zaawansowanego menu
Instalacja nie powiodła się, ponieważ plik instalacyjny jest niezgodny z Twoim urządzeniem. Wyczyść pobrane pliki w Ustawieniach, a następnie spróbuj ponownie.
Instalacja nie powiodła się, bo pliki apk są uszkodzone, spróbuj jeszcze raz.
Instalacja nie powiodła się, ponieważ optymalizacja MIUI jest włączona. Wyłącz optymalizację MIUI, a następnie spróbuj ponownie.
Instalacja nie powiodła się, ponieważ włączona jest weryfikacja podpisu apk. Wyłącz weryfikację podpisu apk, a następnie spróbuj ponownie.
Instalacja nie powiodła się, ponieważ urządzenie nie ma wystarczającej ilości wolnego miejsca.
Nie udało się znaleźć pliku apk dla czarnego/ciemnego motywu z instalatora. Wyczyść dane aplikacji Menedżera i spróbuj ponownie.
Nie udało się zlokalizować ścieżki instalacji YouTube po podzieleniu instalacji.
================================================
FILE: app/src/main/res/values-ps-rAF/strings.xml
================================================
Cancel
Close
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
Reset
Save
Select Your Apps
About
Guide
Manager
Logs
Settings
Update Manager
Is Your Device Rooted?
Grant Root Permission
Let\'s get started
Select at least one app!
Don\'t know what this is or don\'t want to use the root version? just click the blue arrow below!
About %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
Changelog
Downloading %1$s
Install
Latest:
Install Vanced microG first
Root access not granted
Social Media
Support us
Unavailable
Installed:
Accent Color
Appearance
Behavior
Clear downloaded files
Successfully cleared files
This lets us collect information about app performance and crash logs
Firebase Analytics
Language
Links will open in Chrome Custom Tabs
Use Chrome Custom Tabs
%1$s Push Notifications
Receive push notifications when an update for %1$s is released
Failed to save new time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
System Default
Theme
Dark Theme
Light Theme
Manager Update Center
No new updates
Variant
Could not save logs
Successfully saved logs
Details
%1$s installation files detected!
Manager detected that all necessary files for %1$s installation were found. Do you want to install it?
%1$s Installation Preferences
Checking for updates…
Language(s): %1$s
Theme: %1$s
Version: %1$s
Error
Guide
Stop!
You are using the Magisk/TWRP version of Vanced, which is discontinued and cannot be updated using this app. Please remove it by removing the Magisk module/using TWRP Vanced uninstaller.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Redownload
Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub
Version
Welcome
Choose your preferred language(s) for Vanced
Latest
Light + %1$s
Select at least one language!
Black
Dark
Manager Devs
Other Contributors
Sources
Vanced Team
Failed to `chown` APK to system owner, please try again.
Error Downloading %1$s
Failed to apply new accent color
Failed to uninstall package %1$s
Failed to locate the required files for installation. Re-download the installation files, then try again.
Failed to locate apk file for black/dark theme from storage, please try again.
Installation failed because the user aborted the installation.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Installation failed because the installation file is incompatible with your device. Clear downloaded files in the Settings, then try again.
Installation failed because the apk files are corrupted, please try again.
Installation failed because MIUI Optimization is enabled. Disable MIUI Optimization, then try again.
Installation failed because apk signature verification is enabled. Disable apk signature verification, then try again.
Installation failed because the device doesn\'t have enough free space.
Failed to find apk file for black/dark theme from the installer. Clear app data of Manager, then try again.
Failed to locate the stock YouTube installation path after split installation.
================================================
FILE: app/src/main/res/values-pt-rBR/strings.xml
================================================
Cancelar
Fechar
Uma implementação personalizada de GMS para Vanced com base no projeto microG.
Um cliente modificado do YouTube com muitos recursos úteis!
Vanced, mas para o YouTube Music! Relativamente menos funções, mas satisfaz suas necessidades.
Resetar
Salvar
Selecione Seus Aplicativos
Sobre
Guia
Gerenciador
Registros
Configurações
Gerenciador de Atualização
Seu Dispositivo Tem Root?
Conceder Permissão de Root
Vamos começar
Selecione pelo menos um aplicativo!
Não sabe o que isto é ou não quer usar a versão root? basta clicar na seta azul abaixo!
Sobre %1$s
Baixar
Informações
Iniciar
Reinstalar
Desinstalar
Atualizar
Aplicativos
Registro de mudanças
Baixando %1$s
Instalar
Mais recente:
Instale o microG Vanced primeiro
Acesso root não concedido
Mídias Sociais
Apoie-nos
Indisponível
Instalado:
Cor de destaque
Aparência
Comportamento
Limpar arquivos baixados
Arquivos limpos com sucesso
Isto nos permite coletar informações sobre o desempenho do aplicativo e registros de falhas
Análises de Firebase
Idioma
Os links serão abertos nas abas personalizadas do Chrome
Usar abas personalizadas do Chrome
%1$s notificações push
Receber notificações quando uma atualização para o %1$s for lançado
Falha ao salvar o novo valor de tempo
Tempo de repouso do script root
Ajuste o valor do tempo de suspensão usado no script/data/adb/service.d/app.sh, útil para corrigir problemas de montagem
Padrão do sistema
Tema
Escuro
Claro
Centro de Atualizações
Não há novas atualizações
Variante
Não foi possível salvar os registros
Registros salvos com sucesso
Detalhes
%1$s arquivos de instalação detectados!
O gerenciador detectou que todos os arquivos necessários para a instalação de %1$s foram encontrados. Você quer instalar?
%1$s Preferências de Instalação
Verificando por atualizações…
Idioma(s): %1$s
Tema: %1$s
Versão: %1$s
Erro
Guia
Pare!
Você está usando a versão Magisk/TWRP do Vanced, que foi descontinuada e não pode ser atualizada com este aplicativo. Desinstale-o removendo o módulo em Magisk/usando o desinstalador TWRP Vanced.
Para instalar o Vanced, você PRECISA desligar as otimizações da MIUI nas opções de desenvolvedor. (Você pode ignorar esse aviso caso estiver usando uma ROM baseada na xiaomi.eu versão 20.2.20 ou superior)
Otimização MIUI está habilitada!
Por favor NÃO saia do aplicativo durante este processo!
Baixar novamente
Certifique-se de fazer o download do aplicativo em vancedapp.com, no servidor Vanced Discord ou no Vanced GitHub
Versão
Bem-vindo
Escolha o seu idioma preferido para o Vanced
Mais recente
Claro + %1$s
Selecione pelo menos um idioma!
Preto
Escuro
Desenvolvedores do Manager
Outros contribuidores
Fontes
Equipe Vanced
Falha ao enviar o Apk para o proprietário do sistema, Tente Novamente.
Erro ao baixar %1$s
Falha ao aplicar nova cor de destaque
Falha ao desinstalar o pacote %1$s
Falha ao localizar os arquivos necessários para instalação. Baixe novamente os arquivos de instalação e tente novamente.
Falha ao localizar o arquivo apk para o tema preto/escuro a partir do armazenamento, por favor tente novamente.
A instalação falhou porque o usuário abortou a instalação.
A instalação falhou porque o app está em conflito com um app já instalado. Desinstale a versão atual do aplicativo e tente novamente.
A instalação falhou porque o usuário tentou fazer o downgrade do pacote. Desinstale as atualizações do aplicativo padrão e tente novamente.
A instalação falhou por razões desconhecidas, junte-se ao nosso Telegram ou Discord para obter mais suporte. Por favor, anexe também uma captura de tela do menu Avançado
A instalação falhou porque o arquivo de instalação é incompatível com o seu dispositivo. Limpe os arquivos baixados nas configurações e tente novamente.
A instalação falhou porque os arquivos apk estão corrompidos, tente novamente.
A instalação falhou porque a Otimização MIUI está ativada. Desative a Otimização MIUI e tente novamente.
A instalação falhou porque a verificação de assinatura do apk está ativado. Desative a verificação de assinatura do apk e tente novamente.
A instalação falhou porque o dispositivo não tem espaço livre suficiente.
Falha ao encontrar o arquivo apk para o tema preto/escuro a partir do instalador. Limpe os \"dados do app\" do Manager e tente novamente.
Falha ao localizar o caminho de instalação padrão do YouTube após a instalação dividida (split).
================================================
FILE: app/src/main/res/values-pt-rPT/strings.xml
================================================
Cancelar
Fechar
Uma implementação personalizada de GMS para Vanced com base no projeto microG.
Um cliente modificado do YouTube com muitos recursos úteis!
Vanced, mas para o YouTube Music! Relativamente menos rico em recursos, mas atende às suas necessidades.
Resetar
Guardar
Selecione as suas aplicações
Sobre
Guia
Gestor
Registo de Eventos
Configurações
Gestor de Atualização
Seu Dispositivo Tem Root?
Conceder Permissão de Root
Vamos começar
Selecione pelo menos uma aplicação!
Não sabes o que é isto ou não queres utilizar a versão root? apenas clique a seta azul abaixo!
Acerca de %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Aplicações
Lista de alterações
Transferindo %1$s
Instalar
Mais Recente:
Instale o microG Vanced primeiro
Acesso root negado.
Redes Sociais
Suporte-nos
Indisponível
Instalado:
Cor de Destaque
Aparência
Comportamento
Limpar ficheiros descarregados
Arquivos limpos com sucesso
Isto permite-nos recolher informações sobre o desempenho da aplicação e registos de falhas
Análise do Firebase
Idioma
Os links serão abertos em abas personalizadas do Chrome
Usar abas personalizadas do Chrome
Notificações Push %1$s
Receber notificações Push quando uma actualização para %1$s estiver disponível
Falhou ao salvar novo valor de tempo
Tempo de suspensão do script Root
Ajuste o valor de tempo de suspensão usado no script /data/adb/service.d/app.sh, útil para a correção de problemas de montagem
Padrão do sistema
Tema
Tema Escuro
Tema Claro
Centro de Actualizações
Sem atualizações
Variante
Não foi possível salvar os registos
Registos salvos com sucesso
Detalhes
%1$s arquivos de instalação detetados!
O gestor detectou que todos os arquivos necessários para a instalação %1$s foram encontrados. Você quer instalá-lo?
Preferências de instalação %1$s
A procurar por atualizações…
Língua(s): %1$s
Tema: %1$s
Versão: %1$s
Erro
Guia
Parar!
Você está usando a versão Magisk/TWRP do Vanced, que está descontinuada e não pode ser atualizada usando este aplicativo. Por favor, remova-o removendo o módulo Magisk/usando a desinstalação TWRP Vanced Uninstaler.
Para instalar o Vanced, você DEVE desativar as Otimizações MIUI nas configurações do desenvolvedor. (Você pode ignorar este aviso se você estiver usando ROM baseada em 20.2.20 ou mais tarde xiaomi.eu)
Optimizações MIUI estão habilitadas!
Por favor NÃO saia do aplicativo durante este processo!
Voltar a descarregar
Certifique-se de que você baixou o aplicativo do vancedapp.com, o servidor Vanced Discord ou o Vanced GitHub
Versão
Bem-Vindo
Escolha a(s) sua(s) língua(s) de preferência para o Vanced
Mais Recente
Claro + %1$s
Selecione ao menos um idioma!
Preto
Escuro
Desenvolvedores do Manager
Outros Colaboradores
Fontes
Equipa Vanced
Falhou na mudança de dono do Apk para o proprietário do sistema, por favor, tente novamente.
Erro Transferindo %1$s
Falha ao aplicar nova cor de destaque
Erro a desinstalar pacote %1$s
Falha ao localizar os arquivos necessários para instalação. Faça o download dos arquivos de instalação e tente novamente.
Falha ao localizar o apk para o tema preto/escuro no armazenamento, por favor, tente novamente.
A instalação falhou porque o usuário abortou a instalação.
A instalação falhou porque o app entra em conflito com um app já instalado. Desinstale a versão atual do app e tente novamente.
A instalação falhou porque o usuário tentou fazer o downgrade do pacote. Desinstale as atualizações do app do YouTube e, em seguida, tente novamente.
A instalação falhou por razões desconhecidas, junte-se ao nosso Telegram ou Discord para mais suporte. Por favor, anexe também uma captura de tela do menu Avançado
Falha na instalação porque o pacote de instalação é incompatível com o seu dispositivo. Limpe os pacotes transferidos nas Configurações e tente novamente.
A instalação falhou porque os pacotes apk estão corrompidos, por favor tente novamente.
A instalação falhou porque a Otimização MIUI está ativada. Desative a Otimização MIUI e tente novamente.
A instalação falhou porque a verificação de assinatura apk está ativa. Desative a verificação de assinatura apk e tente novamente.
A instalação falhou porque o dispositivo não tem espaço livre suficiente.
Falha ao encontrar o arquivo apk para o tema preto/escuro no instalador. Limpe os dados do app do Gerenciador (Vanced Manager) e tente novamente.
Falha ao localizar o caminho de instalação padrão do YouTube após instalação dividida.
================================================
FILE: app/src/main/res/values-ro-rRO/strings.xml
================================================
Anulaţi
Închide
O implementare personalizată a GMS pentru Vanced pe baza proiectului microG.
Un client YouTube modificat, cu multe caracteristici utile!
Vansat, dar pentru muzica YouTube! Relativ mai puțin bogat în caracteristici, dar îți îndeplinește nevoile.
Resetează
Salvează
Selectați aplicațiile
Despre
Ghid
Manager
Jurnale
Configurări
Actualizați Manager
Dispozitivul tău este rootat?
Acordați permisiunea Root
Să începem
Selectaţi cel puţin o aplicație!
Nu știți ce este sau nu vreți să folosiți versiunea root? Apăsați săgeata albastră de mai jos!
Despre %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Aplicații
Schimbări
Se descarcă %1$s
Instalează
Ultima:
Instalați Vanced microG mai întâi
Accesul root nu este permis
Rețele sociale
Ajutați-ne
Indisponibil
Instalat:
Nuanță culoare
Aspect
Comportament
Ştergeţi fişierele descărcate
Fişiere şterse cu succes
Acest lucru ne permite să colectăm informații despre performanța aplicației și jurnale de eroare
Statistici Firebase
Limbă
Link-uri se vor deschide în filele personalizate Chrome
Utilizează file personalizate Chrome
%1$s Notificari push
Primiți notificări push când o actualizare pentru %1$s este lansată
Salvarea noii valori de timp a eșuat
După cât timp se activează script-ul root
Reglați după cât timp este activat script-ul root folosit în /data/adb/service.d/app.sh script, util pentru remedierea problemelor de montare
Setarea implicită a sistemului
Temă
Temă întunecată
Temă deschisă
Actualizator
Nu există actualizări noi
Variantă
Jurnalele nu pot fi salvate
Jurnale salvate cu succes
Detalii
%1$s fișiere de instalare detectate!
Manager a detectat că au fost găsite toate fişierele necesare pentru instalarea %1$s . Doriţi să le instalaţi?
%1$s Preferințe de instalare
Verificare actualizări…
Limbă: %1$s
Temă: %1$s
Versiune: %1$s
Eroare
Ghid
Oprește!
Folosiți versiunea Magisk/TWRP a Vanced, care nu mai este în uz și nu poate fi actualizată folosind această aplicație. Vă rugăm să o eliminați prin eliminarea modulului Magisk/folosind dezinstalatorul Vanced TWRP.
Pentru a instala Vanced, TREBUIE să dezactivați Optimizările MIUI în setările pentru dezvoltatori. (Puteți ignora această avertizare dacă utilizați un ROM bazat pe xiaomi.eu cu versiunea 20.2.20 sau mai recent)
Optimizările MIUI sunt activate!
Vă rugăm să NU ieșiți din aplicație în timpul acestui proces!
Redescărcare
Asigurați-vă că ați descărcat aplicația de pe vancedapp.com, de pe serverul Discord Vanced sau de pe GitHub Vanced
Versiune
Bun venit
Alegeți limba preferată pentru Vanced
Cel mai recent
Alb + %1$s
Selectaţi cel puţin o limbă!
Negru
Întunecat
Dezvoltatori
Alți Contribuitori
Surse
Echipa Vanced
Nu s-a reușit comanda chown pentru APK la proprietarul sistemului. Încercați din nou.
Eroare la descărcarea %1$s
Nu s-a putut aplica noua culoare de evidențiere
Dezinstalarea pachetului %1$s a eșuat
Nu s-a reușit localizarea fișierelor necesare pentru instalare. Redescărcați fișierele de instalare, apoi încercați din nou.
Nu s-a reuşit localizarea fişierului apk pentru tema neagră/întunecată din stocare, vă rugăm să încercaţi din nou.
Instalarea a eșuat deoarece utilizatorul a anulat instalarea.
Instalarea a eșuat deoarece aplicația intră în conflict cu o aplicație deja instalată. Dezinstalați versiunea curentă a aplicației, apoi încercați din nou.
Instalarea a eșuat deoarece utilizatorul a încercat să retrogradeze pachetul. Dezinstalați actualizările din aplicația stock YouTube, apoi încercați din nou.
Instalarea a eșuat din motive necunoscute. Pentru asistență, intră pe grupul nostru de Telegram sau Discord. Te rugăm să atașezi și o captură de ecran din meniul Avansat
Instalarea a eșuat deoarece fișierul de instalare este incompatibil cu dispozitivul dvs. Ștergeți fișierele descărcate din Setări, apoi încercați din nou.
Instalarea a eșuat deoarece fișierele apk sunt corupte, încercați din nou.
Instalarea a eșuat deoarece este activată optimizarea MIUI. Dezactivați optimizarea MIUI, apoi încercați din nou.
Instalarea a eșuat deoarece verificarea semnăturii apk este activată. Dezactivați verificarea semnăturii apk, apoi încercați din nou.
Instalarea a eșuat deoarece dispozitivul nu are suficient spațiu liber.
Nu s-a putut găsi fișierul apk pentru tema neagră/întunecată din instalator. Ștergeți datele aplicației Manager, apoi încercați din nou.
Localizarea instalarii YouTube-ului stock a eșuat dupa instalarea divizată.
================================================
FILE: app/src/main/res/values-ru-rRU/strings.xml
================================================
Отмена
Закрыть
Пользовательская реализация GMS (сервисов Google) для Vanced создана на основе microG.
Модифицированный клиент YouTube с массой полезных функций!
Vanced, но для YouTube Music! Относительно меньше возможностей, но удовлетворит ваши потребности.
Сброс
Сохранить
Выберите ваши приложения
О нас
Руководство
Менеджер
Логи
Настройки
Обновить Менеджер
На устройстве есть рут-права?
Предоставить root-права
Давайте приступим
Выберите хотя бы одно приложение!
Не знаете, что это, или не хотите использовать рут версию? Просто нажмите на синюю стрелку ниже!
О %1$s
Скачать
Информация
Запустить
Переустановить
Удалить
Обновить
Приложения
Список изменений
Загрузка %1$s
Установить
Последняя:
Сначала установите Vanced microG
Рут-доступ не предоставлен
Социальные сети
Поддержите нас
Недоступно
Установлена:
Второстепенный цвет
Оформление
Поведение
Удалить загруженные файлы
Файлы успешно удалены
Это позволяет нам собирать информацию о производительности приложения и журналы сбоев
Аналитика Firebase
Язык
Открывать ссылки в Chrome Custom Tabs
Использовать Chrome Custom Tabs
Push Уведомления для %1$s
Получать уведомления о выходе обновления для %1$s
Не удалось сохранить новое значение времени
Скрипт Таймера сна
Настройка значения времени сна, используемого в скрипте /data/adb/service.d/app.sh, полезно для решения проблем монтирования
Как в системе
Тема оформления
Тёмная тема
Светлая тема
Центр обновлений
Обновлений не найдено
Вариант
Не удалось сохранить логи
Логи успешно сохранены
Подробнее
Обнаружены установочные файлы для %1$s!
Менеджер обнаружил все необходимые файлы для установки %1$s. Продолжить установку?
Параметры установки %1$s
Проверка обновлений…
Язык(и): %1$s
Тема: %1$s
Версия: %1$s
Ошибка
Руководство
Стойте!
Похоже, вы используете Magisk/TWRP версию Vanced, которая больше не поддерживается и не может быть обновлена с помощью этого приложения. Пожалуйста, удалите модуль Vanced через Magisk или с помощью деинсталлятора Vanced для TWRP.
Чтобы установить Vanced, вы ДОЛЖНЫ отключить оптимизацию MIUI в настройках разработчика. (Вы можете проигнорировать это предупреждение, если вы используете прошивку на xiaomi.eu версии 20.2.20+)
Оптимизация MIUI включена!
Пожалуйста, НЕ выходите из приложения в течение этого процесса!
Скачать заново
Пожалуйста, убедитесь, что вы скачали это приложение с vancedapp.com, сервера Vanced в Discord или с официального GitHub
Версия
Добро пожаловать
Выберите предпочитаемый язык для Vanced
Последняя
Светлая + %1$s
Выберите хотя бы один язык!
Черный
Темный
Разработчики Менеджера
Другие участники
Исходники
Команда Vanced
Не удалось передать apk владельцу системы, попробуйте еще раз.
Ошибка загрузки %1$s
Не удалось применить новый второстепенный цвет
Ошибка установки пакета %1$s
Не удалось найти необходимые файлы для установки. Повторно загрузите установочные файлы и попробуйте еще раз.
Не удалось найти apk-файл для черной/темной темы в памяти устройства, повторите попытку.
Установка не была выполнена, поскольку пользователь прервал установку.
Установка не удалась, так как приложение конфликтует с уже установленным приложением. Удалите текущую версию приложения, затем повторите попытку.
Установка не удалась, так как пользователь попытался понизить версию приложения. Удалите обновления обычного приложения YouTube, затем повторите попытку.
Установка не удалась по неизвестным причинам, присоединитесь к нашим каналам Telegram или Discord для дальнейшей поддержки. Пожалуйста, также прикрепите скриншот из расширенного меню
Установка не удалась, так как установочный файл несовместим с вашим устройством. Очистите загруженные файлы в настройках, затем повторите попытку.
Установка не удалась, так как установочные файлы повреждены, попробуйте еще раз.
Установка не удалась, так как включена Оптимизация MIUI. Отключите Оптимизацию MIUI, затем повторите попытку.
Установка не удалась, так как включена проверка подписи apk. Отключите проверку подписи apk, а затем повторите попытку.
Установка не удалась из-за отсутствия на устройстве свободного места.
Не удалось найти apk-файл для черной/темной темы в программе установки. Удалите данные приложения из Менеджера и повторите попытку.
Не удалось найти стандартный путь установки YouTube после раздельной установки.
================================================
FILE: app/src/main/res/values-si-rLK/strings.xml
================================================
අවලංගු කරන්න
වසන්න
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
ප්රතිස්ථාපනය කරන්න
සුරකින්න
ඔබගේ යෙදුම් තෝරන්න
මේ ගැන
Guide
Manager
Logs
සැකසුම්
Update Manager
Is Your Device Rooted?
Grant Root Permission
Let\'s get started
Select at least one app!
Don\'t know what this is or don\'t want to use the root version? just click the blue arrow below!
About %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
Changelog
Downloading %1$s
ස්ථාපනය
අලුත්
Install Vanced microG first
මූල ප්රවේශය ලබා දී නොමැත
Social Media
Support us
නොමැත
ස්ථාපනය:
අනෙක් වර්ණය
Appearance
Behavior
Clear downloaded files
Successfully cleared files
This lets us collect information about app performance and crash logs
Firebase Analytics
භාෂාව
Links will open in Chrome Custom Tabs
Use Chrome Custom Tabs
%1$s Push Notifications
Receive push notifications when an update for %1$s is released
Failed to save new time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
System Default
තේමාව
අඳුරු තේමාව
Light Theme
Manager Update Center
No new updates
Variant
Could not save logs
Successfully saved logs
Details
%1$s installation files detected!
Manager detected that all necessary files for %1$s installation were found. Do you want to install it?
%1$s Installation Preferences
Checking for updates…
Language(s): %1$s
Theme: %1$s
Version: %1$s
දෝෂය
මාර්ගෝපදේශය
නවත්වන්න!
You are using the Magisk/TWRP version of Vanced, which is discontinued and cannot be updated using this app. Please remove it by removing the Magisk module/using TWRP Vanced uninstaller.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Redownload
Make sure that you downloaded the app from vancedapp.com, the Vanced Discord server, or the Vanced GitHub
අනුවාදය
ආයුබෝවන්
Choose your preferred language(s) for Vanced
Latest
Light + %1$s
Select at least one language!
Black
Dark
Manager Devs
Other Contributors
මූලාශ්ර
Vanced Team
Failed to `chown` APK to system owner, please try again.
Error Downloading %1$s
Failed to apply new accent color
Failed to uninstall package %1$s
Failed to locate the required files for installation. Re-download the installation files, then try again.
Failed to locate apk file for black/dark theme from storage, please try again.
Installation failed because the user aborted the installation.
Installation failed because the app conflicts with an already installed app. Uninstall the current version of the app, then try again.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Installation failed because the installation file is incompatible with your device. Clear downloaded files in the Settings, then try again.
Installation failed because the apk files are corrupted, please try again.
Installation failed because MIUI Optimization is enabled. Disable MIUI Optimization, then try again.
Installation failed because apk signature verification is enabled. Disable apk signature verification, then try again.
Installation failed because the device doesn\'t have enough free space.
Failed to find apk file for black/dark theme from the installer. Clear app data of Manager, then try again.
Failed to locate the stock YouTube installation path after split installation.
================================================
FILE: app/src/main/res/values-sk-rSK/strings.xml
================================================
Zrušiť
Zavrieť
Vlastná implementácia GMS pre Vanced založená na projekte microG.
Upravený YouTube klient s mnohými užitočnými funkciami!
Vanced, ale YouTube Music! Obsahuje o trochu menej funkcií, ale splní vaše potreby.
Resetovať
Uložiť
Vyberte svoje aplikácie
O aplikácií
Sprievodca
Manažér
Logy
Nastavenia
Aktualizovať Manažéra
Má vaše zariadenie oprávnenie root?
Udeliť oprávnenie root
Začnime
Vyberte aspoň jednu aplikáciu!
Neviete, čo to je alebo nechcete používať verziu s prístupom root? Stačí kliknúť na modrú šípku dole!
O aplikácií %1$s
Stiahnuť
Informácie
Spustiť
Preinštalovať
Odinštalovať
Aktualizovať
Aplikácie
Zoznam zmien
Sťahovanie %1$s
Inštalovať
Najnovšie:
Najprv nainštalujte Vanced microG
Root prístup nebol udelený
Sociálne médiá
Podporte nás
Nedostupné
Nainštalované:
Sekundárna farba
Vzhľad
Správanie
Vymazať stiahnuté súbory
Súbory boli úspešne vymazané
Toto nám umožňuje zhromažďovať informácie o výkone aplikácie a logy o zlyhaní
Firebase Analytics
Jazyk
Odkazy sa otvoria na vlastných kartách prehliadača Chrome
Používať vlastné karty prehliadača Chrome
%1$s Vyskakovacie oznámenia
Dostávať upozornenia ak je dostupná aktualizácia pre %1$s
Nepodarilo sa uložiť novú hodnotu času
Doba nečinnosti root skriptu
Upravte hodnotu doby nečinnosti použitú v skripte /data/adb/service.d/app.sh, ktorá je užitočná na riešenie problémov s pripojením
Systémovo predvolené
Téma
Tmavá téma
Svetlá téma
Centrum aktualizácií
Žiadne nové aktualizácie
Varianta
Logy nebolo možné uložiť
Logy boli úspešne uložené
Podrobnosti
Nájdených %1$s inštalačných súborov!
Manažér zistil, že všetky potrebné súbory na inštaláciu aplikácie %1$s boli nájdené. Prajete si spustiť inštaláciu?
%1$s Predvoľby inštalácie
Kontrola aktualizácií…
Jazyk(y): %1$s
Téma: %1$s
Verzia: %1$s
Chyba
Sprievodca
Zadržte!
Používate verziu Vanced pre Magisk/TWRP, ktorej vývoj bol ukončený, a ktorú nie je možno pomocou tejto aplikácie aktualizovať. Odstráňte ju prosím odobraním modulu Magisk/použitím TWRP Vanced odinštalátora.
Ak chcete nainštalovať Vanced, MUSÍTE deaktivovať optimalizáciu MIUI v nastaveniach pre vývojárov. (Toto varovanie môžete ignorovať, ak používate ROM 20.2.20 alebo novšiu, založenú na xiaomi.eu)
Optimalizácie MIUI sú zapnuté!
Počas tohto procesu NEODCHÁDZAJTE z aplikácie!
Stiahnuť znova
Uistite sa, že ste si aplikáciu stiahli zo stránky vancedapp.com, servera Vanced Discord alebo Vanced GitHub
Verzia
Vitajte
Vyberte si jeden alebo viac preferovaných jazykov pre Vanced
Najnovšie
Svetlý + %1$s
Vyberte aspoň jeden jazyk!
Čierna
Tmavá
Vývojári aplikácie
Ostatní prispievatelia
Zdrojové kódy
Tím Vanced
Nepodarilo sa zmeniť vlastníka súboru APK na vlastníka systému. Skúste to znovu prosím.
Chyba pri sťahovaní %1$s
Nepodarilo sa nastaviť novú sekundárnu farbu
Nepodarilo sa odinštalovať balíček %1$s
Nepodarilo sa nájsť požadované súbory na inštaláciu. Opätovne stiahnite inštalačné súbory a skúste to znova.
V lokálnom úložisku sa nepodarilo nájsť APK súbor pre čiernu/tmavú tému. Skúste to znovu prosím.
Inštalácia zlyhala, kvôli zrušeniu užívateľom.
Inštalácia zlyhala, pretože aplikácia je v konflikte s už nainštalovanou aplikáciou. Odinštalujte aktuálnu verziu aplikácie a potom to skúste znova.
Inštalácia zlyhala, pretože užívateľ sa pokúsil downgradovať balík. Odinštalujte aktualizácie z pôvodnej aplikácie a potom to skúste znova.
Inštalácia zlyhala z neznámych dôvodov. Pre poskytnutie podpory sa pripojte sa k nášmu Telegramu alebo Discordu. Pripojte tiež snímky obrazovky z ponuky Pokročilé
Inštalácia zlyhala, pretože inštalačný súbor nie je kompatibilný s vaším zariadením. V Nastaveniach vymažte stiahnuté súbory a potom to skúste znova.
Inštalácia zlyhala, pretože súbory APK sú poškodené. Skúste to prosím znova.
Inštalácia zlyhala, pretože je povolená optimalizácia MIUI. Zakážte optimalizáciu MIUI a potom to skúste znova.
Inštalácia zlyhala, pretože overenie podpisu APK je povolené. Zakážte overenie podpisu APK a potom to skúste znova.
Inštalácia zlyhala, pretože v zariadení nie je dostatok voľného miesta.
Z inštalačného programu sa nepodarilo nájsť súbor APK pre čiernu/tmavú tému. Vymažte údaje aplikácie Vanced Manager a potom to skúste znova.
Po split inštalácii aplikácie sa nepodarilo nájsť cestu inštalácie originálnej YouTube aplikácie.
================================================
FILE: app/src/main/res/values-so-rSO/strings.xml
================================================
Ka noqo
Xidh
A custom GMS Implementation for Vanced based on the microG Project.
A modified YouTube client with many useful features!
Vanced, but for YouTube Music! Relatively less feature-rich but fulfills your needs.
Dib uceli
Kaydi
Dooro apps-ka
Anaga
Guide
Maamule
Logs
Fadhiga
Cusboonaysii
Aaladaada miyay root-garaysan tahay?
U Ogolow Fasaxa Root-ka
Aan bilawno
Ugu yaraan hal app dooro!
Ma aqaano wuxuu kani yahay ama ma doonayo inaan isticmaalo midka root-ka ah? Aayar taabo falaadha buluuga ah ee hoose!
Ku saabsan %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Apps
Waxa isbadalay
Dajinaya %1$s
Kushub
U dambeeyay:
Install Vanced microG first
\'Root\' looma fasaxin
Baraha Bulshada
Na taageer
Lama heli karo
Ka kujira:
Midabka
Muuqaalka
Dabeecada
Nadiifi waxyaabaha lasoo dajiyay
Waa la nadiifiyay
Tani waxay noo ogolaanaysaa inaan uruurino xog ku saabsan shaqaynta app-ka iyo kaydinta xogta khaladaadka dhaca
Falanqaynta Firebase
Luuqada
Linkiyadu waxay ku furmi doonaan daaqadaha Chrome-ka ee loogu talagalay
Isticmaal Daaqadaha Chrome
%1$s Ogaysiisyadiisa
Ha kuu soo dhacaan ogaysiisyo marka mid cusub oo %1$s ah lasoo saaro
Laguma guulaysan in cadadka wakhtiga la kaydiyo
Qormada Wakhtiga Jiifka ee Root-ka
Habee cadadka wakhtiga jiifka ee loo isticmaalay qormada /data/adb/service.d/app.s, waxay muhiim u tahay cilladaha galinta
Sida aaladu tahay
Nashqada
Nashqad Madow
Nashqad Cad
Xarunta Cusboonaysiinta Manager-ka
Majiro wax cusub
Nooca
Could not save logs
Successfully saved logs
Details
%1$s faylashiisii kushubi lahaa ayaa la helay!
Manager-ku wuxuu helay dhamaan faylashii loo baahnaa %1$s inuu ku shubmo. Ma rabtaa inaad ku shubto?
Fadhiga Kushubida %1$s
Hubinaya wax cusub…
Luuqada(ha): %1$s
Nashqada: %1$s
Tirsiga: %1$s
Khalad
Hagitaan
Jooji!
Waxaad isticmaalaysaa version-ka Vanced ee loogu talagalay Magisk/TWRP, kaasoo aan hada la taageerin halkana lagama cusboonaysiin karo. Fadlan iska saar lifaaqa Magisk/adoo isticmaalaya kasaaraha Vanced ee TWRP-ga xagiisa.
To install Vanced, you MUST disable MIUI Optimizations in the developer settings. (You can ignore this warning if you are using 20.2.20 or later xiaomi.eu based ROM)
MIUI Optimizations are enabled!
Please do NOT exit the app during this process!
Dib udaji
Iska hubi inaad app-ka kaso dajisatay vancedapp.com, xaga martigaliyaha Discord, ama meesha Vanced ee GitHub
Tirsiga
Soo dhawoow
Dooro luuqada(ha) aad rabto ee app-ka Vanced
Latest
Cadiin + %1$s
Ugu yaraan hal luuqad dooro!
Black
Dark
Sameeyaasha Manager-ka
Other Contributors
Tixraacyo
Kooxda Vanced
Laguma guulaysan in APK-ga `mulkiilihiisa loo badalo` barnaamijka aaladu kushaqayso, fadlan markale kuceli.
Khalad ayaa ka dhacay soo dajintii %1$s
Laguma guulaysanin in midabka cusub lagu fadhiisiyo
Laguma guulaysan in laga saaro %1$s
Laguma guulaysan in la helo faylashii ku shubi lahaa. Dib-usoodaji faylasha, kadibna isku day markale.
Laguma guulaysanin in faylka apk-ga ee nashqada madow/mugdiga laga helo kaydka aalaada, fadlan markale isku day.
Ku shubidii way guuldaraysatay sababtoo ah qofka aalada isticmaalaya ayaa joojiyay.
Ku shubidii way guuldaraysatay sababtoo ah app-ka waxay iskhilaafeen mid horay ugu jiray aalada. Ka saar nooca hadda ee kujira, kadib markale ku celi.
Installation failed because the user tried to downgrade the package. Uninstall updates from the stock app, then try again.
Installation failed for unknown reasons, join our Telegram or Discord for further support. Please also attach a screenshot from the Advanced menu
Ku shubidii way guuldaraysatay sababtoo ah faylka kuma shaqaynayo aaladaada. Xaga Fadhiga ka saar waxyaabaha lasoo dajiyay, kadib markale isku day.
Ku shubidii way guuldaraysatay sababtoo ah faylashii apk-ga ayaa khalkhalsan, markale isku day.
Ku shubidii way guuldaraysatay sababtoo ah waxaa furan MIUI Optimization. Xidh MIUI Optimization-ka, kadib markale ku celi.
Ku shubidii way guuldaraysatay sababtoo ah waxaa furan xaqiijinta saxiixa apk-ga. Xidh xaqiijinta saxiixa apk-ga, kadibna markale ku celi.
Installation failed because the device doesn\'t have enough free space.
Lama helin faylka apk-ga ee nashqada madow/mugdiga ah. Tirtir xogta Manager-ka, kadib markale ku celi.
Waa lagu guuldaraysatay in la helo wadadii ku shubida app-ka caadiga ah ee YouTube-ka ee kuxigtay ku shubida kala qaybsan.
================================================
FILE: app/src/main/res/values-sr-rSP/strings.xml
================================================
Откажи
Затвори
Независна GMS имплементација за Vanced заснована на microG пројекту.
Модификовани YouTube клијент са многим корисним функцијама!
Vanced, али за YouTube Music! Релативно са мање напредних карактеристикама, али ће задовољити ваше потребе.
Ресетуј
Сачувај
Одабери своје апликације
О апликацији
Водич
Менаџер
Дневници
Поставке
Освежи Менаџера
Да ли је ваш уређај рутован?
Омогућите дозволу за рут
Хајде да почнемо
Одабери барем једну апликацију!
Не знате шта је ово или не желите да користите роот верзију апликације? Само кликните на плаву стрелицу испод!
О %s
Преузми
Инфо
Покрени
Reinstall
Деинсталирај
Ажурирај
Апликације
Историја измена
Преузимање %1$s
Инсталација
Најновија:
Инсталирајте прво Vanced microG
Root приступ није омогућен
Социјалне мреже
Подржите нас
Недоступно
Инсталирана:
Боја наглашавања
Изглед
Понашање
Обриши преузете датотеке
Успешно брисање датотека
Ово нам омогућава да прикупљамо извештаје о перформансама и грешкама
Firebase Анализа
Језик
Линкови ће бити отворени у Chrome Custom Tabs
Користите Chrome Custom Tabs
%1$s слање обавештења
Примај обавештења када је достигнута верзија %1$s
Грешка при снимању вредности за ново време
Роот скрипта за Време спавања
Подесите време спавања путем у /data/adb/service.d/app.sh скрипти, ово је корисно код грешке при повезивању
Системски подразумевано
Тема
Тамна тема
Светла тема
Менаџер ажурирања
Нема нове верзије
Варијанта
Није могуће снимити дневнике
Успешно сачувани дневници
Детаљи
%1$s верзија је пронађена!
Менаџер је пронашао све датотеке за %1$s верзију инсталације. Да ли желите да инсталирате?
%1$s Инсталациона подешавања
Провера ажурирања…
Језик (Језици):%1$s
Тема: %1$s
Верзија: %1$s
Грешка
Водич
Заустави!
Користите Magisk/TWRP верзију Vanced апликације, која више није подржана и чије коришћење није могуће. Молимо Вас да уклоните ову апликацију из Magisk/TWRP-а путем Vanced апликације за деинсталацију.
Да би апликација Vanced била исправно инсталирана морате да искључите оптимизацију за ову апликацију у MIUI подешавањима за програмере.( Ову напомену можете да занемарите у случају ако користите верзију 20.2.20 и новију xiaomi.eu ROM-а)
MIUI оптимизација је укључена!
Немојте излазити из апликације у току овога процеса!
Поново преузми
Преузмите апликацију само са официјелног Vanced сајта vancedapp.com, Vanced Discord сервера или Vanced GitHub-а
Верзија
Добро дошли
Одаберите језик за коришћење Vanced апликације
Најновија
Осветљење+%1$s
Одаберите барем један језик!
Црно
Тамно
Менаџер развоја
Други покровитељи
Извор
Vanced Тим
Грешка при додели apk власнику система, покушајте поново.
Грешка приликом преузимања %1$s
Неуспешно постављање нове носеће боје
Неуспешно деинсталирање пакета %1$s
Није могуће пронаћи датотеке за инсталацију. Преузмите их поново и поновите инсталацију.
Није могуће пронаћи apk датотеку за црно/тамну тему у меморијском простору, покушајте поново.
Инсталација није успешна, корисник је обуставио инсталацију.
Инсталација неуспешна, зато што је дошло до конфликта са већ инсталираном верзијом. Деинсталирајте тренутну верзију Vanced-а и затим покушајте поново.
Инсталација није успешна, корисник је покушао да инсталира старију верзију преко новије верзије апликације. Деинсталирајте све до предодређене инсталиране верзије YouTubе апликације, затим покушајте поново.
Неуспешна инсталација услед непознатих разлога, Прикључите се нашем Telegram или Discord каналима за помоћ. Молимо да прикључите снимак екрана из Проширеног Менија
Инсталација је неуспешна јер инсталациона датотека није компатибилна са вашим уређајем. Очистите преузете датотеке у Подешавањима и затим покушајте поново.
Инсталација није успеla јер је apk датотека оштећена, покушајте поново.
Инсталација неуспешна јер је укључена оптимизација за ову апликацију у MIUI систему. Искључите MIUI оптимизацију за ову апликацију и затим покушајте поново.
Инсталација неуспешна јер је укључена провера потписа преузете apk датотеке. Искључите apk проверу и затим покушајте поново.
Инсталација неуспешна јер на уређају нема довољно слободног простора.
Није могуће пронаћи apk датотеку за црно/тамну тему у инсталационим датотекама. Очистите податке у Менаџеру и покушајте поново.
Није могуће пронаћи подразумевану YouTube локацију за инсталацију после подељене инсталације.
================================================
FILE: app/src/main/res/values-sv-rSE/strings.xml
================================================
Avbryt
Stäng
En anpassad GMS-implementering för Vanced baserad på microG-projektet.
En modifierad YouTube-klient med många användbara funktioner!
Vanced, men för YouTube Music! Relativt mindre funktionsrika men uppfyller dina behov.
Återställ
Spara
Välj dina appar
Om
Guide
Hanterare
Loggar
Inställningar
Uppdatera hanteraren
Är din enhet rotad?
Ge Posting Permission
Nu sätter vi igång
Välj minst en zoomnivå!
Vet du inte vad detta är eller inte vill använda rotversionen? Klicka bara på den blå pilen nedan!
Cirka %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
Appar
Ändringslogg
Laddar ned %1$s
Install
Senaste:
Installera Vanced microG först
Root-åtkomst inte beviljat
Sociala medier
Stöd oss
Ej tillgänglig
Installerad:
Accentfärg
Utseende
Beteende
Rensa nedladdade filer
Rensade data
Detta gör att vi kan samla in information om appens prestanda och kraschloggar
Firebase Analys
Språk
Länkar öppnas i Chrome Custom Tabs
Använd Chrome-anpassade flikar
%1$s push-meddelanden
Få push-meddelanden när en uppdatering för %1$s släpps
Det gick inte att spara nytt tidsvärde
Root-skript sömntid
Justera vilotidsvärde som används i /data/adb/service.d/app.sh skript, användbart för att fixa monteringsproblem
Systemstandard
Tema
Mörkt tema
Ljust tema
Ansvarig uppdateringscenter
Inga nya uppdateringar
Variant
Kunde inte spara sida
Sparades
Detaljer
%1$s installationsfiler upptäckt!
Manager upptäckte att alla nödvändiga filer för %1$s installation hittades. Vill du installera?
%1$s Valda installationsinställningar
Söker efter uppdateringar…
Språk: %1$s
Tema: %1$s
Version %1$s
Fel
Guide
Stopp!
Ser ut som om du använder Magisk versionen av Vanced, som är avbruten och inte kan uppdateras med den här appen. Ta bort den först genom att ta bort magisk modulen.
För att installera Vanced, måste du inaktivera MIUI Optimisations i utvecklarinställningarna. (Du kan ignorera denna varning om du använder 20.2.20 eller senare xiaomi.eu-baserad ROM)
MIUI Optimeringar är aktiverade!
Vänligen avsluta INTE appen under denna process!
Ladda ner igen
Se till att du laddade ner appen från vancedapp.com, den Vanced Discord-servern eller den Vanced GitHub
Version
Välkommen
Välj önskade språk för Vanced
Senaste
Ljus + %1$s
Välj minst ett språk!
Svart
Mörk
Hanteraren Dev
Andra bidragsgivare
Källor
Vanced Team
Misslyckades att Chown Apk till systemägare, Försök igen.
Laddar ned %1$s
Det gick inte att tillämpa ny accentfärg
Det gick inte att avinstallera paket %1$s
Det gick inte att hitta de nödvändiga filerna för installationen. Ladda ner installationsfilerna igen och försök igen.
Det gick inte att hitta apk-fil för svart/mörkt tema från lagring, försök igen.
Åtgärden misslyckades eftersom användaren avbröt installationen.
Installationen misslyckades eftersom appen står i konflikt med en redan installerad app. Avinstallera den aktuella versionen av Vanced, försök sedan igen.
Installationen misslyckades eftersom användaren försökte nedgradera paketet. Avinstallera uppdateringar från lagerappen YouTube, försök sedan igen.
Installationen misslyckades av okända skäl, gå med i vårt Telegram eller Discord för ytterligare stöd. Vänligen bifoga även en skärmdump från menyn Avancerat
Installationen misslyckades eftersom installationsfilen är inkompatibel med din enhet. Rensa nedladdade filer i Inställningarna och försök igen.
Installationen misslyckades eftersom apk-filerna är skadade, försök igen.
Installationen misslyckades eftersom MIUI-optimering är aktiverad. Inaktivera MIUI-optimering och försök igen.
Installationen misslyckades eftersom apk signaturverifiering är aktiverad. Inaktivera apk signaturverifiering och försök igen.
Installationen misslyckades eftersom enheten inte har tillräckligt med ledigt utrymme.
Det gick inte att hitta apk-fil för svart/mörkt tema från installationsprogrammet. Rensa appdata från Manager och försök igen.
Det gick inte att hitta sökvägen för lagerinstallationen på YouTube efter delad installation.
================================================
FILE: app/src/main/res/values-ta-rIN/strings.xml
================================================
ரத்துசெய்
மூடுக
மைக்ஜிக் திட்டத்தின் அடிப்படையில் ஒரு தனிபயன் GMS செயல்படுத்துதல்.
பல பயனுள்ள அம்சங்களுடன் ஒரு திருத்தப்பட்ட YouTube வாடிக்கையாளர்!
Vanced, ஆனால் YouTube இசை! ஒப்பீட்டளவில் குறைவான அம்சம் நிறைந்த பணக்காரர்கள் ஆனால் உங்கள் தேவைகளை பூர்த்தி செய்கிறார்கள்.
மீட்டமை
சேமிக்கவும்
உங்கள் பயன்பாடுகளைத் தேர்ந்தெடுக்கவும்
பற்றி
வழிகாட்டி
மேலாளர்
பதிவுகள்
அமைப்புகள்
புதுப்பிப்பு மேலாளர்
உங்கள் சாதனம் வேரூன்றியதா?
கிராண்ட் ரூட் அனுமதி
தொடங்குவோம்
குறைந்தது ஒரு பயன்பாட்டையாவது தேர்ந்தெடுக்கவும்!
இது என்னவென்று தெரியவில்லையா அல்லது ரூட் பதிப்பைப் பயன்படுத்த விரும்பவில்லையா? கீழே உள்ள நீல அம்புக்குறியைக் கிளிக் செய்க!
பற்றி %1$s
Download
Info
Launch
Reinstall
Uninstall
Update
பயன்பாடுகள்
சேஞ்ச்லாக்
%1$s ஐப் பதிவிறக்குகிறது
நிறுவு
சமீபத்தியது:
முதலில் Vanced Microg ஐ நிறுவவும்
ரூட் அக்சஸ் வழங்கப்படவில்லை
சமூக ஊடகம்
எங்களை ஆதரியுங்கள்
கிடைக்கவில்லை
நிறுவப்பட்டது:
கவனங்கவர் நிறம்
தோற்றம்
செயல்பாடு
பதிவிறக்கிய கோப்புகளை அழிக்கவும்
கோப்புகளை வெற்றிகரமாக அழித்துவிட்டது
பயன்பாட்டு செயல்திறன் மற்றும் செயலிழப்பு பதிவுகள் பற்றிய தகவல்களை சேகரிக்க இது எங்களுக்கு உதவுகிறது
ஃபயர்பேஸ் அனலிட்டிக்ஸ்
மொழி
Chrome தனிப்பயன் தாவல்களில் இணைப்புகள் திறக்கப்படும்
Chrome தனிப்பயன் தாவல்களைப் பயன்படுத்தவும்
%1$s புஷ் அறிவிப்புகள்
%1$s க்கான புதுப்பிப்பு வெளியிடப்படும் போது புஷ் அறிவிப்புகளைப் பெறுக
புதிய நேர மதிப்பைச் சேமிப்பதில் தோல்வி
ரூட் ஸ்கிரிப்ட் தூக்க நேரம்
பெருகிவரும் சிக்கல்களை சரிசெய்ய பயனுள்ளதாக இருக்கும் /data/adb/service.d/app.sh ஸ்கிரிப்டில் பயன்படுத்தப்படும் தூக்க நேர மதிப்பை சரிசெய்யவும்
கணினி இயல்புநிலை
தீம்
இருண்ட தீம்
ஒளி தீம்
மேலாளர் புதுப்பிப்பு மையம்
புதிய புதுப்பிப்புகள் இல்லை
மாறுபாடு
பதிவுகளைச் சேமிக்க முடியவில்லை
பதிவுகள் வெற்றிகரமாக சேமிக்கப்பட்டன
விவரங்கள்
%1$s நிறுவல் கோப்புகள் கண்டறியப்பட்டன!
%1$s நிறுவலுக்கு தேவையான அனைத்து கோப்புகளும் கண்டறியப்பட்டதை மேலாளர் கண்டறிந்தார். நீங்கள் அதை நிறுவ விரும்புகிறீர்களா?
%1$s நிறுவல் விருப்பத்தேர்வுகள்
புதுப்பிப்புகளைச் சரிபார்க்கிறது…
மொழி: %1$s
தீம் %1$s
பதிப்பு: %1$s
பிழை
வழிகாட்டி
நிறுத்து!
நீங்கள் வேன்ஸின் மேஜிஸ்க் / டி. டபிள்யூ. ஆர். பி பதிப்பைப் பயன்படுத்துகிறீர்கள், இது நிறுத்தப்பட்டது மற்றும் இந்த பயன்பாட்டைப் பயன்படுத்தி புதுப்பிக்க முடியாது. மேஜிஸ்க் தொகுதியை அகற்றி / TWRP Vanced uninstaller ஐப் பயன்படுத்தி அதை அகற்றவும்.
Vanced நிறுவ, நீங்கள் டெவலப்பர் அமைப்புகளில் Miui மேம்படுத்தல்களை முடக்க வேண்டும். (நீங்கள் 20.2.20 அல்லது பின்னர் xiaomi.eu அடிப்படையிலான ROM ஐப் பயன்படுத்துகிறீர்களானால் இந்த எச்சரிக்கையை நீங்கள் புறக்கணிக்கலாம்)
MIUI மேம்படுத்தல்கள் இயக்கப்பட்டன!
இந்த செயல்முறையின் போது பயன்பாட்டை விட்டு வெளியேற வேண்டாம்!
மீண்டும் பதிவிறக்கு
பயன்பாட்டை vancedapp.com, Vanced Discord சேவையகம் அல்லது Vanced GitHub இலிருந்து பதிவிறக்கம் செய்துள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள்
பதிப்பு
வரவேற்பு
வேன்ஸ்டுக்காக உங்களுக்கு விருப்பமான மொழியைத் தேர்வுசெய்க
சமீபத்தியது
ஒளி + %1$s
குறைந்தது ஒரு மொழியையாவது தேர்ந்தெடுக்கவும்!
கருப்பு
இருள்
மேலாளர் டெவலப்பர்கள்
பிற பங்களிப்பாளர்கள்
மூலம்
Vanced கூட்டணி
கணினி உரிமையாளருக்கு APK ஐத் தேடுவதில் தோல்வி, தயவுசெய்து மீண்டும் முயற்சிக்கவும்.
%1$s பதிவிறக்குவதில் தோழ்வி
புதிய உச்சரிப்பு வண்ணத்தைப் பயன்படுத்துவதில் தோல்வி
%1$s நீக்குவதில் தோல்வி
நிறுவலுக்கு தேவையான கோப்புகளை கண்டுபிடிப்பதில் தோல்வி. நிறுவல் கோப்புகளை மீண்டும் பதிவிறக்கவும், பின்னர் மீண்டும் முயற்சிக்கவும்.
சேமிப்பகத்திலிருந்து கருப்பு / இருண்ட கருப்பொருளுக்கான Apk கோப்பை கண்டுபிடிப்பதில் தோல்வி, தயவுசெய்து மீண்டும் முயற்சிக்கவும்.
பயனர் நிறுவலை நிறுத்தியதால் நிறுவல் தோல்வியடைந்தது.
ஏற்கனவே நிறுவப்பட்ட பயன்பாட்டுடன் பயன்பாடு முரண்படுவதால் நிறுவல் தோல்வியடைந்தது. பயன்பாட்டின் தற்போதைய பதிப்பை நிறுவல் நீக்கி, பின்னர் மீண்டும் முயற்சிக்கவும்.
பயனர் தொகுப்பை தரமிறக்க முயற்சித்ததால் நிறுவல் தோல்வியடைந்தது. பங்கு பயன்பாட்டிலிருந்து புதுப்பிப்புகளை நிறுவல் நீக்க, பின்னர் மீண்டும் முயற்சிக்கவும்.
நிறுவல் அறியப்படாத காரணங்களுக்காக தோல்வியடைந்தது, எங்கள் டெலிகிராம் அல்லது மேலும் ஆதரவுக்கு இணக்கமாக இருக்கலாம். மேம்பட்ட மெனுவிலிருந்து ஒரு ஸ்கிரீன் ஷாட்டை இணைக்கவும்
நிறுவல் கோப்பு உங்கள் சாதனத்துடன் பொருந்தாததால் நிறுவல் தோல்வியடைந்தது. அமைப்புகளில் பதிவிறக்கம் செய்யப்பட்ட கோப்புகளை அழிக்கவும், பின்னர் மீண்டும் முயற்சிக்கவும்.
நிறுவல் தோல்வியுற்றது, ஏனெனில் Apk கோப்புகள் சிதைந்துள்ளன, தயவுசெய்து மீண்டும் முயற்சிக்கவும்.
MIUI உகப்பாக்கம் இயக்கப்பட்டிருப்பதால் நிறுவல் தோல்வியடைந்தது. MIUI உகப்பாக்கத்தை முடக்கு, பின்னர் மீண்டும் முயற்சிக்கவும்.
Apk கையொப்ப சரிபார்ப்பு இயக்கப்பட்டிருப்பதால் நிறுவல் தோல்வியடைந்தது. Apk கையொப்ப சரிபார்ப்பை முடக்கு, பின்னர் மீண்டும் முயற்சிக்கவும்.
சாதனம் போதுமான இலவச இடம் இல்லை என்பதால் நிறுவல் தோல்வியடைந்தது.
நிறுவியிலிருந்து கருப்பு / இருண்ட கருப்பொருளுக்கான Apk கோப்பைக் கண்டுபிடிப்பதில் தோல்வி. மேலாளரின் பயன்பாட்டுத் தரவை அழிக்கவும், பின்னர் மீண்டும் முயற்சிக்கவும்.
பிளவு நிறுவலுக்குப் பிறகு பங்கு YouTube நிறுவல் பாதையை கண்டுபிடிப்பதில் தோல்வி.
================================================
FILE: app/src/main/res/values-th-rTH/strings.xml
================================================
ยกเลิก
ปิด
การปรับใช้ GMS แบบกำหนดเองสำหรับ Vanced ตามโครงการ microG
ไคลเอนต์ YouTube ที่ได้รับการแก้ไขพร้อมคุณสมบัติที่มีประโยชน์มากมาย!
Vanced สำหรับ YouTube Music! คุณสมบัติค่อนข้างน้อย แต่ตอบสนองความต้องการของคุณ
ล้างค่าเริ่มต้น
บันทึก
เลือกแอปพลิเคชันของคุณ
ข้อมูลเกี่ยวกับทีมนักพัฒนา
แนะนำ
ตัวจัดการ
บันทึกข้อมูลระบบ
ตั้งค่า
อัพเดทตัวจัดการ
อุปกรณ์ของคุณได้รูทหรือไม่?
ให้สิทธิ์การใช้งานของรูท
เริ่มกันเลย!
เลือกแอปพลิเคชั่นอย่างน้อยหนึ่งรายการ!
ไม่รู้/ไม่ต้องการใช้เวอร์ชั่นรูท? แค่คลิ๊กบนไอคอนธนูสีฟ้า!
เกี่ยวกับ %1$s
ดาวน์โหลด
ข้อมูล
เปิด
Reinstall
ถอนการติดตั้ง
อัพเดท
แอป
บันทึกการเปลี่ยนแปลง
กำลังดาวน์โหลด %1$s
ติดตั้ง
ล่าสุด:
ติดตั้ง Vanced microG ก่อน
ไม่ได้รับสิทธิ์ของรูท
สื่อสังคม
สนับสนุนพวกเรา
ไม่สามารถใช้ได้
ติดตั้งแล้ว:
สีหลัก
ลักษณะที่ปรากฏ
ลักษณะการทำงาน
ล้างไฟล์ที่ดาวน์โหลดไว้
ล้างข้อมูลเรียบร้อยแล้ว
สำหรับ รวบรวมข้อมูลเกี่ยวกับประสิทธิภาพของแอป และบันทึกข้อขัดข้อง
การวิเคราะห์ Firebase
ภาษา
ลิ้งค์จะเปิดไปยังแท็บที่กำหนดเองของ Chrome
ใช้แท็บที่กำหนดเองของ Chrome
%1$s การแจ้งเตือนแบบพุช
รับการแจ้งเตือนแบบพุช เมื่อมีการเผยแพร่อัปเดต %1$s ล่าสุด
Failed to save new time value
Root Script Sleep Time
Adjust sleep time value used in /data/adb/service.d/app.sh script, useful for fixing mounting issues
ค่าเริ่มต้นของระบบ
ธีม
ธีมมืด
ธีมสว่าง
การจัดการอัพเดพหลัก
ไม่มีอัพเดตใหม่
ตัวแปร
ไม่สามารถบันทึกได้
ดำเนินการบันทึกเรียบร้อยแล้ว
รายละเอียด
%1$s ตรวจพบไฟล์สำหรับการติดตั้ง!
ตรวจพบการอัพเดทไฟล์สำหรับติดตั้งใหม่ที่จำเป็น %1$s คุณต้องการติดตั้งหรือไม่?
%1$s กำหนดค่าการติดตั้ง
ตรวจหาการปรับปรุงใหม่ๆ…
ภาษา: %1$s
ธีม: %1$s
รุ่น: %1$s
ผิดพลาด
คู่มือ
หยุด!
คุณกำลังใช้ Vanced เวอร์ชัน Magisk / TWRP ซึ่งถูกยกเลิกและไม่สามารถอัปเดตได้จากแอปนี้ กรุณาลบออกโดยการถอดโมดูล Magisk / ใช้โปรแกรมถอนการติดตั้ง TWRP Vanced
ในการติดตั้ง Vanced คุณต้องปิดใช้งาน การเพิ่มประสิทธิภาพ MIUI ในการตั้งค่าสำหรับนักพัฒนา (คุณสามารถเพิกเฉยต่อคำเตือนนี้ได้ หากคุณใช้ based ROM xiaomi.eu 20.2.20 หรือใหม่กว่า)
เปิดใช้งานการเพิ่มประสิทธิภาพ MIUI แล้ว!
โปรดอย่าออกจากแอปในระหว่างขั้นตอนนี้!
ดาวน์โหลดอีกครั้ง
ตรวจสอบให้แน่ใจว่าคุณดาวน์โหลดแอพจากช่องทางที่ถูกต้อง vancedapp.com, เซิร์ฟเวอร์ Vanced Discord หรือ Vanced GitHub
รุ่น
ยินดีต้อนรับ
เลือกภาษาที่คุณต้องการใช้สำหรับ Vanced
ล่าสุด
เบา + %1$s
เลือกอย่างน้อยหนึ่งภาษา!
สีดำ
สีเข้ม
ตัวจัดการ Devs
ผู้ร่วมให้ข้อมูลอื่น ๆ
แหล่งที่มา
ทีมงาน Vanced
ไม่สามารถ `chown` APK ในระบบได้ โปรดลองอีกครั้ง
เกิดข้อผิดพลาดในการดาวน์โหลด %1$s
การใช้สีที่เน้นใหม่มีความผิดพลาด
ถอนการติดตั้งแพ็กเกจไม่สำเร็จ %1$s
ไม่สามารถค้นหาไฟล์สำหรับการติดตั้งที่ต้องการได้. กรุณาดาวน์โหลดไฟล์สำหรับการติดตั้งใหม่แล้วลองอีกครั้ง
ไม่พบไฟล์ apk สำหรับธีมสีดำ / สีเข้ม จากที่เก็บข้อมูล โปรดลองอีกครั้ง
การติดตั้งล้มเหลวเนื่องจากผู้ใช้ยกเลิกการติดตั้ง
การติดตั้งล้มเหลวเนื่องจากแอปขัดแย้งกับแอปที่ติดตั้งไว้ก่อนหน้า ถอนการติดตั้งแอปเวอร์ชันปัจจุบันแล้วลองอีกครั้ง
การติดตั้งล้มเหลวเนื่องจากผู้ใช้พยายามดาวน์เกรดแพ็กเกจ ถอนการติดตั้งการอัปเดตจากแอปเดิมก่อน แล้วลองอีกครั้ง
การติดตั้งล้มเหลวโดยไม่ทราบสาเหตุเข้าร่วม Telegram หรือ Discord ของเราเพื่อรับการสนับสนุนเพิ่มเติม โปรดแนบภาพหน้าจอจากเมนู
การติดตั้งล้มเหลวเนื่องจากไฟล์การติดตั้งเข้ากันไม่ได้กับอุปกรณ์ของคุณ กรุณาล้างไฟล์ที่ดาวน์โหลดในการตั้งค่า แล้วลองอีกครั้ง
การติดตั้งล้มเหลวเนื่องจากไฟล์ apk เสียหายโปรดลองอีกครั้ง
การติดตั้งล้มเหลวเนื่องจากเปิดใช้งาน MIUI Optimization โปรดปิดการใช้งาน MIUI Optimization แล้วลองอีกครั้ง
การติดตั้งล้มเหลวเนื่องจากเปิดใช้งานการตรวจสอบลายเซ็น apk กรุณาปิดใช้งานการตรวจสอบลายเซ็น apk แล้วลองอีกครั้ง
การติดตั้งล้มเหลวเนื่องจากอุปกรณ์มีพื้นที่ว่างไม่เพียงพอ
ไม่พบไฟล์ apk สำหรับธีมสีดำ / สีเข้มจากโปรแกรมติดตั้ง กรุณาล้างข้อมูลแอปVanced-Manager แล้วลองอีกครั้ง
ไม่พบเส้นทางการติดตั้งสต็อกของ YouTube หลังจากการติดตั้งแบบแยก
================================================
FILE: app/src/main/res/values-tr-rTR/strings.xml
================================================
İptal
Kapat
Vanced için geliştirilmiş microG Projesi tabanlı GMH sürümü.
İşe yarar birçok özellikle modifiye edilmiş YouTube sürümü!
Yine Vanced, ama YouTube Music için! Kıyasen daha az özelliğe sahip ama beklentilerini karşılayacaktır.
Sıfırla
Kaydet
Uygulamalarınızı Seçin
Hakkında
Rehber
Manager
Geçmiş kayıtlar
Ayarlar
Manager\'ı güncelle
Cihazın rootlu mu?
Root yetkisi ver
Haydi başlayalım
En az bir uygulama seçin!
Root\'un ne olduğunu bilmiyor veya root sürümünü kullanmak istemiyorsan, alttaki mavi oka tıklayabilirsin!
%1$s hakkında
İndir
Bilgi
Başlat
Yeniden yükle
Kaldır
Güncelleştir
Uygulamalar
Sürüm Notları
%1$s indiriliyor
Yükle
En son:
Vanced microG\'yi kurmalısın
Root erişimi verilmedi
Sosyal Medya
Tıkla, destek ol
Yüklenmemiş
Yüklü:
Tema Rengi
Görünüm
Davranış
İndirilen dosyaları temizle
Dosyalar başarıyla temizlendi
Uygulama hakkında performans ve hata kayıtlarını toplamamıza izin verir
Firebase Analizi
Dil
Bağlantılar Chrome Özel Sekmelerinde açılacaktır
Chrome Özel Sekmelerini kullan
%1$s Anlık Bildirimleri
%1$s için bir güncelleme yayınlandığında anlık bildirimler alın
Yeni zaman değeri kaydedilemedi
Root kurulumu, bekletme süresi
[Gelişmiş] Kurulum sırasında çalıştırılan /data/adb/service.d/app.sh dosyasındaki uyku/bekletme süresinin değer ayarı. Kurulum sırasında oluşan hatalara çözüm olabilir
Sistem varsayılanı
Tema
Koyu Tema
Açık Tema
Manager Güncelleme Merkezi
Yeni güncelleme yok
Sürüm yapısı
Kayıtlar kaydedilemedi
Kayıtlar başarıyla kaydedildi
Ayrıntılar
%1$s için kurulum dosyaları bulundu!
Manager, %1$s kurulumu için gerekli olan dosyaları belirledi. Yüklemek ister misiniz?
%1$s Kurulum Tercihleri
Güncellemeler kontrol ediliyor…
Dil(ler): %1$s
Tema: %1$s
Sürüm: %1$s
Hata
Kılavuz
Durdur!
Geliştirilmesi durdurulan ve bu uygulama ile güncellenemeyen Vanced\'ın, Magisk/TWRP sürümünü kullanıyorsunuz. Lütfen Magisk/TWRP sürümünü cihazınızdan kaldırın.
Vanced\'ı yükleyebilmek için, geliştirici ayarlarından/seçeneklerinden MIUI optimizasyonunu devre dışı bırakmalısın. (xiaomi.eu tabanlı 20.2.20 sürüm veya üzeri ROM kullanıyorsan, bu uyarıyı göz ardı edebilirsin)
MIUI Optimizasyonu aktif gözüküyor!
İşlem süresince LÜTFEN uygulamadan çıkmayın!
Tekrar İndir
Uygulamayı vancedapp.com, Vanced Discord sunucusu, veya Vanced GitHub\'dan indirdiğinizden emin olun
Sürüm
Hoş Geldiniz
Vanced için tercih ettiğiniz dil(ler)i seçin
En yeni
Açık renk + %1$s
En az bir dil seçmelisin!
Siyah (amoled)
Koyu renk
Manager Geliştiricileri
Katkıda bulunan diğer kişiler
Kaynaklar
Vanced Ekibi
APK dosyasına sistem yetkisi atanamadı, lütfen tekrar deneyin.
%1$s indirilirken hata oluştu
Yeni vurgu rengi uygulanamadı
%1$s kaldırılırken hata oluştu
Kurulum için gerekli olan dosyaları belirlerken bir hata oluştu. Kurulum dosyalarını tekrar indirip, yeniden deneyin.
Depolama alanında Siyah/Koyu temanın APK dosyasını belirlerken bir hata oluştu. Tekrar deneyin lütfen.
Kullanıcı kurulumu iptal ettiği için kurulum başarısız oldu.
Uygulama önceden yüklenmiş bir uygulamayla çakıştığından yükleme başarısız oldu. Uygulamanın mevcut sürümünü kaldırın ve ardından tekrar deneyin.
Kullanıcı eski sürümü yüklemeye çalıştığı için kurulum tamamlanamadı. Orijinal YouTube uygulamasının güncellemelerini kaldırdıktan sonra yeniden deneyin.
Kurulum, bilinmeyen sebeplerden dolayı başarısız oldu. Telegram grubu veya Discord sunucusundan destek alabilirsin. Ayrıca, detaylar ekranının bir ekran görüntüsünü alıp, yardım talebinle birlikte iletmeyi unutma lütfen.
Kurulum dosyası cihazınız ile uyumsuz olduğu için kurulum işlemi başarısız oldu. Ayarlar\'da indirilen dosyaları temizleyip, tekrar deneyin.
APK dosyaları çözümlenemediğinden, kurulum başarısız oldu. Lütfen yeniden deneyin.
MIUI Optimizasyonu etkin olduğundan, kurulum başarısız oldu. MIUI Optimizasyonunu devre dışı bırakıp, yeniden deneyin.
APK imza doğrulaması etkin olduğundan, kurulum başarısız oldu. APK imza doğrulamasını devre dışı bırakıp, yeniden deneyin.
Yetersiz depolama alanından dolayı kurulum başarısız oldu.
Yükleyicide Siyah/Koyu tema için APK dosyalarını ararken bir hata oluştu. Manager\'ın verilerini temizleyip, yeniden deneyin.
Ayrı kurulum işleminden sonra orijinal YouTube kurulum yolu belirlenemedi.
================================================
FILE: app/src/main/res/values-uk-rUA/strings.xml
================================================
Скасувати
Закрити
Модифікований GMS для Vanced на основі проекту microG.
Модифікований клієнт YouTube з безліччю корисних функцій!
Vanced, але для YouTube Music! Відносно менш функціональний, але задовольняє ваші потреби.
Скинути
Зберегти
Виберіть Ваші Додатки
Про нас
Посібник
Менеджер
Логи
Налаштування
Оновіть Менеджер
На Пристрої Є Root Права?
Надати Root Права
Почнімо
Оберіть принаймні один додаток!
Не знаєте, що це або не хочете використовувати рутовану версію? Просто натисніть синю стрілку внизу!
Про %1$s
Download
Інформація
Відкрити
Reinstall
Видалити
Update
Додатки
Список змін
Завантаження %1$s
Встановити
Найновіша:
Спочатку встановіть Vanced microG
Права суперкористувача не були надані
Соціальні мережі
Підтримайте нас
Недоступно
Встановлена:
Вторинний колір
Вигляд
Поведінка
Очистити завантажені файли
Файли було успішно очищено
Це дозволяє нам збирати інформацію про продуктивність додатка та журнали збоїв
Аналітика Firebase
Мова
Відкривати посилання в Chrome Custom Tabs
Використовувати Chrome Custom Tabs
%1$s Спливаючі Сповіщення
Отримувати спливаючі сповіщення, коли доступне оновлення для %1$s
Не вдалося зберегти нове значення часу
Скрипт Таймера сну
Налаштування значення часу сну, використовуваного в скрипті /data/adb/service.d/app.sh, корисно для вирішення проблем монтування
Системна
Тема
Темна тема
Світла тема
Центр Оновлень
Оновлень не знайдено
Варіант
Не вдалося зберегти логи
Логи успішно збережені
Детальніше
Знайдено %1$s файлів для встановлення!
Менеджер виявив, що всі необхідні файли для %1$s встановлення було знайдено. Бажаєте встановити їх?
Параметри встановлення %1$s
Перевірка оновлень…
Мова(и): %1$s
Тема: %1$s
Версія: %1$s
Помилка
Гайд
Зупинись!
Ви використовуєте Magisk/TWRP версію Vanced, яка припиняється і не може бути оновлена за допомогою цього застосунку. Будь ласка, видаліть його, видаливши модуль Magisk / з використання TWRP Vanced uninstaller.
Щоб встановити Vanced, ви ПОВИННІ вимкнути оптимізацію MIUI у налаштуваннях розробника. (Ви можете ігнорувати це попередження якщо ви використовуєте 20.2.20 або новіші xiaomi.eu ROM)
Оптимізацію MIUI увімкнено!
Будь ласка, НЕ завершуйте роботу додатку під час цього процесу!
Завантажити заново
Переконайтеся, що ви завантажили додаток з vancedapp.com, Vanced Discord сервер або Vanced GitHub
Версія
Привіт!
Виберіть бажану мову(и) для Vanced
Найновіша
Світла + %1$s
Оберіть принаймні одну мову!
Чорний
Темний
Розробники Менеджера
Інші учасники
Джерела
Команда Vanced
Не вдалося створити файл APK системного власника програми, будь ласка, повторіть спробу.
Помилка Завантаження %1$s
Не вдалося застосувати новий другорядний колір
Не вдалося видалити пакет %1$s
Не вдалося знайти необхідні файли для встановлення. Повторно завантажте файли і спробуйте ще раз.
Не вдалося знайти apk-файл для чорної/темної теми зі сховища, спробуйте ще раз.
Встановлення не вдалося, оскільки користувач перервав встановлення.
Встановлення не вдалася, так як додаток конфліктує з уже встановленим додатком. Видаліть поточну версію додатку, і спробуйте ще раз.
Встановлення не вдалася, так як користувач спробував знизити версію програми. Видаліть поновлення звичайного додатку YouTube, спробуйте ще раз.
Не вдалося встановити з невідомих причин, підключіться до нашої Telegram групи або Discord сервера для подальшої підтримки. Будь ласка, додайте знімок екрану з розширеного меню
Помилка встановлення, оскільки файл несумісний з вашим пристроєм. Очистіть завантажені файли в Налаштуваннях, а потім спробуйте ще раз.
Встановлення неможливе, оскільки apk-файли пошкоджені, будь ласка, спробуйте ще раз.
Помилка встановлення, оскільки увімкнена оптимізація MIUI. Вимкніть оптимізацію MIUI і спробуйте ще раз.
Помилка встановлення, оскільки увімкнено перевірку підпису apk. Вимкніть перевірку підпису apk, а потім спробуйте ще раз.
Помилка встановлення, так як на пристрої недостатньо вільного місця.
Не вдалося знайти apk-файл для чорної/темної теми в програмі встановлення. Видаліть дані додатка з Менеджера і спробуйте ще раз.
Не вдалося знайти типовий шлях встановлення YouTube після роздільного встановлення.
================================================
FILE: app/src/main/res/values-vi-rVN/strings.xml
================================================
Hủy
Đóng
GMS Nhúng đã được tuỳ chỉnh cho Vanced dựa trên Dự án microG.
Một ứng dụng YouTube đã được sửa đổi với nhiều tính năng hữu ích!
Vanced, nhưng cho YouTube Music! Khá ít tính năng nhưng đáp ứng được nhu cầu của bạn.
Đặt lại
Lưu
Chọn ứng dụng của bạn
Giới thiệu
Hướng dẫn
Manager
Nhật ký
Cài đặt
Cập nhật Manager
Thiết Bị Của Bạn Đã Được Root?
Cấp quyền root
Bắt đầu
Chọn ít nhất một ứng dụng!
Bạn không biết đây là gì hoặc không muốn sử dụng phiên bản root? hãy nhấp vào dấu > bên dưới!
Thông tin về %1$s
Tải xuống
Thông tin
Mở
Cài đặt lại
Gỡ cài đặt
Cập nhật
Các ứng dụng
Các thay đổi
Đang tải xuống %1$s
Cài đặt
Mới nhất:
Bạn phải cài Vanced microG trước
Quyền root không được cấp
Mạng xã hội
Hỗ trợ chúng tôi
Chưa cài
Đã cài đặt:
Màu chủ đạo
Giao diện
Ứng dụng
Xóa các tệp tin đã tải về
Xóa các tệp tin thành công
Cho phép chúng tôi thu thập thông tin về hiệu suất và sự cố của ứng dụng
Firebase Analytics
Ngôn ngữ
Các liên kết sẽ mở trong Chrome Custom Tabs
Sử dụng Chrome Custom Tabs
Thông báo cho %1$s
Nhận thông báo khi một bản cập nhật của %1$s được phát hành
Lưu giá trị thời gian mới thất bại
Thời gian ngủ của tập lệnh root
Điều chỉnh giá trị thời gian ngủ được sử dụng trong tập lệnh /data/adb/service.d/app.sh, hữu ích khi khắc phục các vấn đề về mounting
Mặc định hệ thống
Nền
Nền tối
Nền sáng
Cập nhật Manager
Không có cập nhật mới
Phiên bản
Lưu nhật ký thất bại
Lưu nhật ký thành công
Chi tiết
Phát hiện tệp cài đặt của %1$s!
Manager đã tìm thấy tất cả các tệp cần thiết để cài đặt %1$s. Bạn có muốn cài đặt nó không?
%1$s Tùy biến Cài đặt
Đang kiểm tra cập nhật…
Ngôn ngữ: %1$s
Nền: %1$s
Phiên bản: %1$s
Lỗi
Hướng dẫn
Khoan đã!
Bạn đang sử dụng phiên bản Magisk/TWRP của Vanced, hiện đã bị ngừng phát triển và không thể được cập nhập bằng ứng dụng này. Hãy gỡ mô-đun Magisk/flash trình gỡ cài đặt TWRP.
Để cài Vanced, bạn PHẢI vô hiệu hóa Tối ưu hóa MIUI trong cài đặt nhà phát triển. (Bỏ qua cảnh báo này nếu bạn đang sử dụng ROM dựa trên xiaomi.eu phiên bản 20.2.20 hoặc mới hơn)
Tối ưu hoá MIUI đang được kích hoạt!
Vui lòng KHÔNG thoát khỏi ứng dụng trong tiến trình này!
Tải lại
Chắc chắn rằng bạn đã tải ứng dụng này từ vancedapp.com, server Discord của Vanced hoặc GitHub của Vanced
Phiên bản
Chào mừng
Chọn ngôn ngữ mong muốn cho Vanced
Mới nhất
Sáng + %1$s
Chọn ít nhất một ngôn ngữ!
Đen
Tối
Đội ngũ phát triển
Những người đóng góp khác
Nguồn
Đội ngũ Vanced
Thay đổi quyền sở hữu APK cho chủ hệ thống thất bại, vui lòng thử lại.
Lỗi khi tải xuống %1$s
Áp dụng màu chủ đạo mới thất bại
Gỡ cài đặt %1$s thất bại
Không thể xác định các tệp tin cần thiết để cài đặt. Tải lại các tệp cài đặt rồi thử lại.
Xác định tệp tin apk cho nền đen/tối từ bộ nhớ thất bại, vui lòng thử lại.
Cài đặt thất bại do người dùng hủy.
Cài đặt thất bại do có xung đột với ứng dụng đã được cài đặt trước đó. Gỡ cài đặt phiên bản hiện tại của ứng dụng rồi thử lại.
Cài đặt thất bại do người dùng cố hạ cấp ứng dụng. Gỡ cài đặt các bản cập nhật khỏi ứng dụng gốc rồi thử lại.
Cài đặt thất bại do lí do không xác định, tham gia Telegram hoặc Discord để được hỗ trợ. Vui lòng kèm theo ảnh chụp màn hình từ phần Chi tiết
Cài đặt thất bại do tệp tin cài đặt không tương thích với thiết bị của bạn. Xóa các tệp tin đã tải về trong Cài đặt rồi thử lại.
Cài đặt thất bại do các tệp tin apk bị lỗi, xin hãy thử lại.
Cài đặt thất bại do Tối ưu hóa MIUI được kích hoạt. Vô hiệu hóa Tối ưu hóa MIUI rồi thử lại.
Cài đặt thất bại do xác minh chứng chỉ apk được kích hoạt. Vô hiệu hóa xác minh chứng chỉ apk rồi thử lại.
Cài đặt thất bại do thiết bị của bạn không có đủ bộ nhớ trống.
Tìm kiếm tệp tin apk cho nền đen/tối từ trình cài đặt thất bại. Xoá dữ liệu của Manager rồi thử lại.
Không thể xác định thư mục cài đặt của YouTube gốc sau khi tải split.
================================================
FILE: app/src/main/res/values-zh-rCN/strings.xml
================================================
取消
关闭
以 microG 项目为基础並只用于 Vanced 的自定义 Google 移动服务。
经过修改的 YouTube 客户端,具有许多有用的功能!
Vanced ,不过是 YouTube Music !功能相对较少,但足以满足您的需求。
重置
保存
选择您的应用
关于
指南
Manager
日志
设置
更新 Manager
您的设备是否拥有 Root 权限?
授予 Root 权限
让我们开始吧
选择至少一个应用!
不知道这是什么或不想使用 Root 版本?只需点击下面的蓝色箭头!
关于 %1$s
下载
信息
打开
Reinstall
卸载
更新
应用
变更日志
正在下载 %1$s
安装
最新:
请先安装 Vanced microG
未授予 Root 权限
社交媒体
支持我们
不可用
已安装:
强调色
外观
行为
清除已下载文件
成功清除文件
这允许我们收集有关应用性能和崩溃日志的信息
Firebase 分析
语言
链接会使用 Chrome Custom Tabs 打开
使用 Chrome Custom Tabs
%1$s 推送通知
%1$s 有可用更新时接收推送通知
保存新定时器值失败
Root 脚本睡眠定时器
调整 /data/adb/service.d/app.sh 脚本中的睡眠定时器值,有助于修复挂载问题。
系统默认
主题
深色主题
浅色主题
Manager 更新中心
无可用更新
版本
无法保存日志
日志保存成功
详细信息
检测到 %1$s 安装文件!
Manager 检测到 %1$s 所需要的安装文件。您想现在安装吗?
%1$s 安装首选设定
正在检查更新…
语言: %1$s
主题: %1$s
版本: %1$s
错误
说明
警告!
您正在使用 Magisk/TWRP 版的 Vanced,它已被停止支持且无法通过此应用更新。请通过移除 Magisk 模块 / 使用 TWRP Vanced 卸载器来移除它。
为了能够安装 Vanced,您必须在开发者设置中禁用 MIUI 优化。(如果您正在使用基于 xiaomi.eu 20.2.20 或更新的 ROM,您可以忽略此警告)
MIUI 优化已启用!
请不要在此过程中退出应用!
重新下载
请确保您是从 vancedapp.com 、 Vanced Discord 服务器或 Vanced Github 下载本应用
版本
欢迎
为 Vanced 选择您的首选语言
最新
浅色 + %1$s
选择至少一种语言!
黑色
深色
Manager 开发人员
其它贡献者:
源码
Vanced 团队
无法 `chown` apk 为系统拥有者,请重试。
%1$s 下载错误
无法应用新的强调色
%1$s 卸载失败
无法找到需要安装的文件。重新下载安装文件,然后重试。
无法从存储中找到黑色/深色主题的 apk 文件,请重试。
用户放弃安装导致安装失败。
应用与已安装的应用发生冲突导致安装失败。卸载当前的版本,然后重试。
用户试图降级应用导致安装失败。卸载官方应用的更新,然后重试。
未知原因导致安装失败,请加入我们的 Telegram 或 Discord 并附上高级设置中的截图以获得更多支援。
安装文件与您的设备不相容导致安装失败。请在设置中清除已下载的文件,然后重试。
apk 文件已被损坏导致安装失败,请重试。
MIUI 优化已被启用导致安装失败。禁用 MIUI 优化,然后重试。
apk 签名验证已被启用导致安装失败。禁用apk 签名验证,然后重试。
设备的可用空间不足导致安装失败。
无法从安装程式中找到黑色/深色主题的 apk 文件。清除 Manager 的应用数据,然后重试。
分包安装后无法定位原生 YouTube 的安装路径。
================================================
FILE: app/src/main/res/values-zh-rTW/strings.xml
================================================
取消
關閉
以 microG 項目為基礎並用於 Vanced 的 GMS 工具。
經過修改而具有許多有用功能的 YouTube 客戶端!
Vanced ,不過是 YouTube Music!功能相對較少但足以滿足您的需要。
重設
儲存
選擇您需要的應用程式
關於
說明
Manager
日誌
設定
更新 Manager
您的裝置擁有 Root 權限嗎?
授予 Root 權限
讓我們開始吧
請至少選擇一個應用程式!
不知道這是什麼,或者不想使用 Root 版本?只需點選下面的藍色箭頭!
關於 %1$s
下載
關於
啟動
重新安裝
解除安裝
更新
應用程式
更新日誌
正在下載 %1$s
安裝
最新:
請先安裝 Vanced microG
未授予 Root 權限
社交媒體
支持我們
無法使用
已安裝:
輔色
外觀
行為
清除已下載的檔案
成功清除檔案
這讓我們可以收集關於應用程式效能和崩潰日誌的資訊
Firebase 分析
語言
連結會使用 Chrome Custom Tabs 開啟
使用 Chrome Custom Tabs
%1$s 推送通知
有可用更新時接收 %1$s 推送通知
儲存定時器時間失敗
Root 腳本休眠時間
調整 /data/adb/service.d/app.sh 指令碼中的休眠時間值,對修復掛載問題很有用
系統預設
主題
深色主題
淺色主題
Manager 更新中心
沒有更新
版本
無法儲存日誌
日誌成功儲存
詳細資訊
偵測到 %1$s 的安裝檔案!
Manager 找到所有 %1$s 所需的安裝檔案。您打算安裝嗎?
%1$s 安裝偏好設定
正在檢查更新…
語言:%1$s
主題: %1$s
版本: %1$s
錯誤
說明
警告!
您正使用 Magisk/TWRP 版本的 Vanced ,它已停止支援並無法透過此程式更新。請透過移除 Magisk 模組/使用 TWRP Vanced 解除安裝程式來移除它。
欲安裝 Vanced,請先至開發人員選項停用 MIUI 優化。(若您正在使用 20.2.20 或更新版本且基於的 xiaomi.eu 的系統,請忽略此警告)
已啟用 MIUI 優化!
在此過程中請不要退出應用程式!
重新下載
請確保您從 vancedapp.com、Vanced Discord 伺服器或 Vanced GitHub 下載本程式
版本
歡迎
為 Vanced 選擇您偏好的語言
最新
淺色 + %1$s
請至少選擇一種語言!
黑色
深色
Manager 開發者
其他貢獻者:
原始碼
Vanced 團隊
無法 `chown` apk 為系統擁有者,請重試。
%1$s 下載錯誤
無法套用新的輔色
%1$s 解除安裝失敗
無法找到安裝所需的檔案。請重新下載安裝檔案,然後再試。
無法在儲存空間中找到深色/黑色主題的 apk 檔案,請再試。
使用者放棄安裝導致安裝失敗。
程式與已安裝的程式發生衝突導致安裝失敗。解除安裝當前的版本,然後重試。
使用者試圖降級導致安裝失敗。解除安裝原生應用程式的更新,然後重試。
未知原因導致安裝失敗,請附上進階設定的截圖至我們的 Telegram 或 Discord 取得更多支援
安裝檔案與您的裝置不相容導致安裝失敗。請在設定中清除已下載的檔案,然後重試。
apk 檔案已被損毀導致安裝失敗,請重試。
MIUI 優化已被啟用導致安裝失敗。停用 MIUI 優化,然後重試。
apk 簽名驗證已被啟用導致安裝失敗。停用 apk 簽名驗證,然後重試。
裝置的可用空間不足導致安裝失敗。
在安裝程式中找不到深色/黑色主題的 apk 檔案。請清除 Manager 應用程式的資料,然後再試。
分割安裝後無法找到原生 YouTube 安裝路徑。
================================================
FILE: app/src/main/res/xml/file_provider.xml
================================================
================================================
FILE: build.gradle.kts
================================================
buildscript {
repositories {
google()
mavenCentral()
}
val kotlinVersion = "1.6.10"
dependencies {
classpath("com.android.tools.build:gradle:7.1.2")
classpath(kotlin("gradle-plugin", version = kotlinVersion))
classpath(kotlin("serialization", version = kotlinVersion))
}
}
allprojects {
repositories {
google()
mavenCentral()
maven(url = "https://jitpack.io")
}
}
task("clean") {
delete(rootProject.buildDir)
}
================================================
FILE: crowdin.yml
================================================
files:
- source: /app/src/main/res/values/strings.xml
translation: /app/src/main/res/values-%android_code%/strings.xml
================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: gradle.properties
================================================
## For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
#
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx1024m -XX:MaxPermSize=256m
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
#
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
#Sun Dec 13 13:42:32 GET 2020
android.enableJetifier=true
android.useAndroidX=true
kotlin.code.style=official
================================================
FILE: gradlew
================================================
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"
================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
================================================
FILE: settings.gradle.kts
================================================
rootProject.name = "Vanced Manager"
include(":app")