├── .github └── FUNDING.yml ├── .gitignore ├── Credits.md ├── LICENSE.md ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── fdroid │ └── java │ │ └── com │ │ └── smartpack │ │ └── busyboxinstaller │ │ └── utils │ │ └── Billing.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ ├── aarch64 │ │ ├── armv7l │ │ ├── changelogs.json │ │ └── i686 │ ├── ic_launcher-playstore.png │ ├── java │ │ └── com │ │ │ └── smartpack │ │ │ └── busyboxinstaller │ │ │ ├── MainActivity.java │ │ │ └── utils │ │ │ ├── AboutActivity.java │ │ │ ├── AsyncTask.java │ │ │ ├── RootFile.java │ │ │ ├── RootUtils.java │ │ │ └── Utils.java │ └── res │ │ ├── drawable │ │ ├── ic_back.xml │ │ ├── ic_coffee.xml │ │ ├── ic_dinner.xml │ │ ├── ic_donation_app.png │ │ ├── ic_heart.xml │ │ ├── ic_meal.xml │ │ └── ic_settings.xml │ │ ├── layout │ │ ├── activity_about.xml │ │ ├── activity_billing.xml │ │ ├── activity_main.xml │ │ ├── layout_checkbox.xml │ │ ├── recycle_view_about.xml │ │ └── recycle_view_donate.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── values-am │ │ └── strings.xml │ │ ├── values-ar │ │ └── strings.xml │ │ ├── values-cs │ │ └── strings.xml │ │ ├── values-el │ │ └── strings.xml │ │ ├── values-es │ │ └── strings.xml │ │ ├── values-fr │ │ └── strings.xml │ │ ├── values-hr │ │ └── strings.xml │ │ ├── values-in │ │ └── strings.xml │ │ ├── values-it │ │ └── strings.xml │ │ ├── values-ko │ │ └── strings.xml │ │ ├── values-my │ │ └── strings.xml │ │ ├── values-pl │ │ └── strings.xml │ │ ├── values-pt-rBR │ │ └── strings.xml │ │ ├── values-ru │ │ └── strings.xml │ │ ├── values-tr-rTR │ │ └── strings.xml │ │ ├── values-vi │ │ └── strings.xml │ │ ├── values-zh-rTW │ │ └── strings.xml │ │ └── values │ │ ├── colors.xml │ │ ├── ic_launcher_background.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── play │ ├── AndroidManifest.xml │ └── java │ └── com │ └── smartpack │ └── busyboxinstaller │ └── utils │ ├── Billing.java │ └── BillingActivity.java ├── banner.png ├── build.gradle ├── fastlane └── metadata │ └── android │ └── en-US │ ├── changelogs │ └── 18.txt │ ├── full_description.txt │ ├── images │ ├── featureGraphic.png │ ├── icon.png │ └── phoneScreenshots │ │ ├── 1.jpg │ │ ├── 2.jpg │ │ ├── 3.jpg │ │ └── 4.jpg │ └── short_description.txt ├── gradle.properties ├── gradle └── wrapper │ └── gradle-wrapper.jar ├── gradlew ├── gradlew.bat └── settings.gradle /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: sunilpaulmathew 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: ['https://www.paypal.me/menacherry', 'https://play.google.com/store/apps/details?id=com.smartpack.donate'] 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | *.properties 4 | .DS_Store 5 | /build 6 | /captures 7 | .idea 8 | -------------------------------------------------------------------------------- /Credits.md: -------------------------------------------------------------------------------- 1 | # Credits 2 | BusyBox Installer is, and as always, an open-source project which is ready to accept contributions from others. The application gladly received contributions from a number of people from time to time, mostly with translations. This page provides an incomplete list of people who contributed to this project, directly or indirectly. 3 | 4 | ## Code 5 | * [Grarak](https://github.com/Grarak), Kernel Adiutor, from where I took [Utils](https://raw.githubusercontent.com/Grarak/KernelAdiutor/master/app/src/main/java/com/grarak/kerneladiutor/utils/Utils.java), [RootUtils](https://raw.githubusercontent.com/Grarak/KernelAdiutor/master/app/src/main/java/com/grarak/kerneladiutor/utils/root/RootUtils.java) & [RootFile](https://raw.githubusercontent.com/Grarak/KernelAdiutor/master/app/src/main/java/com/grarak/kerneladiutor/utils/root/RootFile.java) 6 | * [topjohnwu](https://github.com/topjohnwu/), libsu, the library in which BusyBox Installer depending to handle root related tasks 7 | * [Lennoard Silva](https://github.com/Lennoard): contributed code to this project, especially in its early stage of development 8 | 9 | ## Binaries 10 | * [topjohnwu](https://github.com/topjohnwu/ndk-box-kitchen), BusyBox Binaries 11 | * [https://busybox.net/](https://busybox.net/), BusyBox Binaries (old) 12 | * [linsui](https://gitlab.com/linsui), BusyBox Binaries (building) 13 | 14 | ## Icon 15 | * [sajid_islam](https://t.me/sajid_islam), App Icon 16 | 17 | ## Translations 18 | * [FiestaLake](https://github.com/FiestaLake), Korean Translations 19 | * [Mikesew1320](https://github.com/Mikesew1320), Amharic & Russian Translations 20 | * [tsiflimagas](https://github.com/tsiflimagas), Greek Translations 21 | * [Lennoard Silva](https://github.com/Lennoard), Portuguese (Brazilian) Translations 22 | * [Hafitz Setya](https://github.com/breakdowns), Indonesian Translations 23 | * Jonas. Ned, Czech Translations 24 | * Cold, Spanish Translations 25 | * Waiyan, Burmese Translations 26 | * omerakgoz34, Turkish Translations 27 | * Khalid1717, Arabic Translations 28 | * Yadi, Chinese Translations 29 | * Dorian Ivancic, Croatian Translations 30 | * Lucas, French Translations 31 | * Valdnet, Polish Translations 32 | * hm & Hoa Gia Đại Thiếu, Vietnamese Translations 33 | * Many other people contributed via [POEditor](https://poeditor.com/join/project?hash=JsnaHsMpUk) 34 | 35 | _If you think I missed your name, please let me know._ -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](fastlane/metadata/android/en-US/images/featureGraphic.png) 2 | 3 | [![](https://img.shields.io/badge/BusyBox--Installer-v2.7-green)](https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller) 4 | ![](https://img.shields.io/github/languages/top/SmartPack/BusyBox-Installer) 5 | ![](https://img.shields.io/github/contributors/smartpack/BusyBox-Installer) 6 | 7 | # Introduction 8 | ### BusyBox Installer is a one-click BusyBox installation utility for Android. 9 | 10 | ## Download 11 | [](https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller) 14 | [](https://f-droid.org/packages/com.smartpack.busyboxinstaller) 17 | [](https://apt.izzysoft.de/fdroid/index/apk/com.smartpack.busyboxinstaller) 20 | 21 | ## Requirements 22 | * ROOT Access 23 | 24 | ## Features 25 | * Install BusyBox in one click. 26 | 27 | ## Support 28 | [](https://t.me/smartpack_kmanager) 31 | 32 | ## Report a bug or request a feature 33 | You can report a bug or request a feature by [opening an issue](https://github.com/SmartPack/BusyBox-Installer/issues/new). 34 | 35 | ## Translations 36 | Please help me to translate this application via [POEditor](https://poeditor.com/join/project?hash=JsnaHsMpUk). You may also translate after downloading the original language string available [here](app/src/main/res/values/strings.xml). 37 | 38 | ## Donations 39 | If you like to appreciate my efforts to provide this applications entirely free, non-intrusive and without Ads, please consider supporting the development in some way. 40 | 41 | [](https://github.com/sponsors/sunilpaulmathew) 44 | [](https://liberapay.com/sunilpaulmathew/donate) 47 | [](https://www.paypal.me/menacherry/) 50 | [](https://play.google.com/store/apps/details?id=com.smartpack.donate) 53 | [](https://ko-fi.com/sunilpaulmathew/) 56 | 57 | ## Credits 58 | A list of people who contributed to this project is available [here](Credits.md). 59 | 60 | ## License 61 | 62 | Copyright (C) 2022-2023 sunilpaulmathew 63 | 64 | BusyBox Installer is a free softwares: you can redistribute it and/or 65 | modify it under the terms of the GNU General Public License as published 66 | by the Free Software Foundation, either version 3 of the License, or (at 67 | your option) any later version. 68 | 69 | BusyBox Installer is distributed in the hope that it will be useful, but 70 | WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 71 | or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 72 | for more details. 73 | 74 | You should have received a copy of the GNU General Public License along 75 | with BusyBox Installer. If not, see . 76 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /fdroid 3 | /play 4 | /release 5 | /src/main/gen 6 | *.jks 7 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | 5 | signingConfigs { 6 | release { 7 | storeFile file("sp.jks") 8 | storePassword "smartpack" 9 | keyAlias "sp_key1" 10 | keyPassword "smartpack" 11 | } 12 | } 13 | 14 | compileSdkVersion 31 15 | buildToolsVersion = '30.0.3' 16 | defaultConfig { 17 | applicationId "com.smartpack.busyboxinstaller" 18 | minSdkVersion 23 19 | targetSdkVersion 31 20 | versionCode 18 21 | versionName "v2.7" 22 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 23 | archivesBaseName = "$applicationId-$versionName" 24 | testFunctionalTest = false 25 | testHandleProfiling = false 26 | } 27 | buildTypes { 28 | release { 29 | signingConfig signingConfigs.release 30 | minifyEnabled true 31 | shrinkResources true 32 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 33 | } 34 | } 35 | 36 | flavorDimensions "release" 37 | productFlavors { 38 | play { 39 | dimension "release" 40 | } 41 | fdroid { 42 | dimension "release" 43 | } 44 | } 45 | 46 | } 47 | 48 | dependencies { 49 | playImplementation 'com.android.billingclient:billing:4.0.0' 50 | implementation 'com.github.sunilpaulmathew:CrashReporter:93ff4f0' 51 | implementation "com.github.topjohnwu.libsu:core:3.2.1" 52 | implementation 'com.google.android.material:material:1.5.0' 53 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/fdroid/java/com/smartpack/busyboxinstaller/utils/Billing.java: -------------------------------------------------------------------------------- 1 | package com.smartpack.busyboxinstaller.utils; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.annotation.NonNull; 6 | 7 | /* 8 | * Created by sunilpaulmathew on March 29, 2021 9 | */ 10 | public class Billing { 11 | 12 | public static void launchDonationMenu(Context context) { 13 | Utils.launchUrl("https://smartpack.github.io/donation/", context); 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/assets/aarch64: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/assets/aarch64 -------------------------------------------------------------------------------- /app/src/main/assets/armv7l: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/assets/armv7l -------------------------------------------------------------------------------- /app/src/main/assets/changelogs.json: -------------------------------------------------------------------------------- 1 | { 2 | "releaseNotes": "v2.7\n - Implemented system-less installation mode if normal mode is unavailable (experimental).\n - App now targets targets SDK 31.\n - Implemented crash reporting.\n - Added French, Polish, and Vietnamese translations.\n - Updated build tools and dependencies.\n - Miscellaneous changes.\n\nv2.6\n - Added Chinese (TW) and Croatian (incomplete) translations.\n - Updated build tools and dependencies.\n - Miscellaneous changes.\n\nv2.5\n - App doesn't need storage access permission anymore.\n - Added Spanish, Turkish, Burmese and Arabic translations.\n - Updated Gradle plugin & build tools.\n - Internal updates.\n - Miscellaneous changes.\n\nv2.4\n - Restore separate binary for armv7l architecture.\n - Miscellaneous changes.\n\nv2.3\n - Updated to BusyBox v1.32.1.\n - Re-designed App theme and About page.\n - Miscellaneous changes.\n\nv2.2\n - Improved language switch.\n - Added Czech translations.\n - Miscellaneous changes.\n\nv2.1\n - Updates for latest Android versions.\n - App will now show a supporter badge for those who donated.\n - Updated Korean and Indonesian translations.\n - Added link to POEditor localization service to About menu.\n - Fixed possible crashes.\n - Miscellaneous changes.\n\nv2.0\n - Added support to armv8l architectures (need more testing).\n - App is now completely Ad-frees.\n - App will now follow the system themes.\n - Added a donation option (Settings --> About).\n - Merged About & Change-logs menus.\n - Added custom progress dialogue for BusyBox installation and removing processes.\n - Added Indonesian translations.\n - Replaced toast messages with SnackBars.\n - App now uses material elements as much as possibles.\n - Miscellaneous changes.\n\nv1.9\n - Added auto app theme mode.\n - Updated Ad layout.\n - Updated build tools.\n\nv1.8\n - Updated libsu to v3.0.2.\n - Updated translations, build tools and dependencies.\n - Miscellaneous changes.\n\nv1.7\n - Fixed crashes on clicking install/update button (sorry for that).\n - Slightly improved layout.\n - Miscellaneous changes.\n\nv1.6\n - Implemented Brand New About view.\n - Added change-logs to setting menu.\n - Added language switch.\n - Miscellaneous changes.\n\nv1.5\n - Improve Root handling.\n - Improved App UI.\n - Move top icons into a new Settings Menu.\n - Misc: Replace some toasts with snackbar.\n - Updated Portugease (Brazilian) (Credits @Lennoard) & Korean (Credits: @SmgKhOaRn) translations.\n\nv1.4\n - Migrated to libsu (Credits: @Lennoard ).\n - Largely improved BusyBox installation and removing process (Should work on most devices).\n - Updated Portuguese (Brazilian) translations (Credits: @Lennoard ).\n - Miscellaneous changes.\n\nv1.3\n - Added Greek translations (Credits: @tsiflimagas)\n - Replaced Paypal donation link with Donation app (to staisfy google)\n\nv1.2\n - Added option to remove BusyBox applets installed from the app.\n - Show installed applets list on long-clicking BusyBox image.\n - Show installed BusyBox version on long-clicking info icon.\n - Improved APP UI and coding quality (Credits: @Lennoard ).\n - Added share app & donation buttons.\n - Added Brazilian Portuguese (Credits: @Lennoard ), Amharic (Credits: @Mikesew1320 ) and Russian (Credits: @Mikesew1320 ) translations.\n - Improved Korean translations (Credits: @SmgKhOaRn )\n - Miscellaneous changes\n\nv1.1\n - Added Korean translations (Credits: @SmgKhOaRn)\n - Updated instalaltion success check\n\nv1.0\n - Initial release." 3 | } -------------------------------------------------------------------------------- /app/src/main/assets/i686: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/assets/i686 -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/smartpack/busyboxinstaller/utils/AboutActivity.java: -------------------------------------------------------------------------------- 1 | package com.smartpack.busyboxinstaller.utils; 2 | 3 | import android.annotation.SuppressLint; 4 | import android.graphics.Color; 5 | import android.graphics.Paint; 6 | import android.os.Bundle; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | 11 | import androidx.annotation.NonNull; 12 | import androidx.annotation.Nullable; 13 | import androidx.appcompat.app.AppCompatActivity; 14 | import androidx.appcompat.widget.AppCompatImageButton; 15 | import androidx.recyclerview.widget.GridLayoutManager; 16 | import androidx.recyclerview.widget.RecyclerView; 17 | 18 | import com.google.android.material.card.MaterialCardView; 19 | import com.google.android.material.textview.MaterialTextView; 20 | import com.smartpack.busyboxinstaller.BuildConfig; 21 | import com.smartpack.busyboxinstaller.R; 22 | 23 | import org.json.JSONException; 24 | import org.json.JSONObject; 25 | 26 | import java.io.Serializable; 27 | import java.util.ArrayList; 28 | import java.util.Objects; 29 | 30 | /* 31 | * Created by sunilpaulmathew on November 17, 2020 32 | */ 33 | 34 | public class AboutActivity extends AppCompatActivity { 35 | 36 | private final ArrayList mData = new ArrayList<>(); 37 | 38 | @SuppressLint("SetTextI18n") 39 | @Override 40 | protected void onCreate(@Nullable Bundle savedInstanceState) { 41 | super.onCreate(savedInstanceState); 42 | setContentView(R.layout.activity_about); 43 | 44 | AppCompatImageButton mBack = findViewById(R.id.back); 45 | MaterialCardView mCreditsCard = findViewById(R.id.credits_card); 46 | MaterialCardView mChangeLogsCard = findViewById(R.id.change_log_card); 47 | MaterialTextView mChangeLogs = findViewById(R.id.change_logs); 48 | MaterialTextView mCancel = findViewById(R.id.cancel_button); 49 | MaterialTextView mVersion = findViewById(R.id.version); 50 | MaterialTextView mCopyright = findViewById(R.id.copyright); 51 | RecyclerView mRecyclerView = findViewById(R.id.recycler_view); 52 | 53 | mVersion.setText(getString(R.string.version) + (Utils.isSupporter(this) ? ": Pro " : ": ") + BuildConfig.VERSION_NAME); 54 | mCopyright.setText(getString(R.string.copyright, "2021-2022, sunilpaulmathew")); 55 | 56 | if (!Utils.isDarkTheme(this)) { 57 | mCreditsCard.setBackgroundColor(Color.LTGRAY); 58 | mChangeLogsCard.setBackgroundColor(Color.LTGRAY); 59 | } 60 | 61 | mData.add(new RecycleViewItem("Willi Ye", "Code Contributions", "https://github.com/Grarak")); 62 | mData.add(new RecycleViewItem("topjohnwu", "libsu", "https://github.com/topjohnwu/libsu")); 63 | mData.add(new RecycleViewItem("topjohnwu", "BusyBox Binaries", "https://github.com/topjohnwu/ndk-box-kitchen")); 64 | mData.add(new RecycleViewItem("https://busybox.net/", "BusyBox Binaries (old versions)", "https://busybox.net/")); 65 | mData.add(new RecycleViewItem("linsui", "BusyBox Binaries (building)", "https://gitlab.com/linsui")); 66 | mData.add(new RecycleViewItem("Lennoard Silva", "Code Contributions & Portuguese (Brazilian) Translations", "https://github.com/Lennoard")); 67 | mData.add(new RecycleViewItem("sajid_islam", "App Icon", "https://t.me/sajid_islam")); 68 | mData.add(new RecycleViewItem("FiestaLake", "Korean Translations", "https://github.com/FiestaLake")); 69 | mData.add(new RecycleViewItem("Mikesew1320", "Amharic & Russian Translations", "https://github.com/Mikesew1320")); 70 | mData.add(new RecycleViewItem("tsiflimagas", "Greek Translations", "https://github.com/tsiflimagas")); 71 | mData.add(new RecycleViewItem("Hafitz Setya", "Indonesian Translations", "https://github.com/breakdowns")); 72 | mData.add(new RecycleViewItem("Jonas. Ned", "Czech Translations", null)); 73 | mData.add(new RecycleViewItem("Cold", "Spanish Translations", null)); 74 | mData.add(new RecycleViewItem("omerakgoz34", "Turkish Translations", null)); 75 | mData.add(new RecycleViewItem("Waiyan", "Burmese Translations", null)); 76 | mData.add(new RecycleViewItem("Khalid1717", "Arabic Translations", null)); 77 | mData.add(new RecycleViewItem("Yadi", "Chinese (Traditional) Translations", null)); 78 | mData.add(new RecycleViewItem("Dorian Ivancic", "Croatian Translations", null)); 79 | mData.add(new RecycleViewItem("Lucas", "French Translations", null)); 80 | mData.add(new RecycleViewItem("Valdnet", "Polish Translations", null)); 81 | mData.add(new RecycleViewItem("hm", "Vietnamese Translations", null)); 82 | mData.add(new RecycleViewItem("Hoa Gia Đại Thiếu", "Vietnamese Translations", null)); 83 | 84 | mRecyclerView.setLayoutManager(new GridLayoutManager(this, 1)); 85 | RecycleViewAdapter mRecycleViewAdapter = new RecycleViewAdapter(mData); 86 | mRecyclerView.setAdapter(mRecycleViewAdapter); 87 | 88 | String change_log = null; 89 | try { 90 | change_log = new JSONObject(Objects.requireNonNull(Utils.readAssetFile( 91 | this, "changelogs.json"))).getString("releaseNotes"); 92 | } catch (JSONException ignored) { 93 | } 94 | mChangeLogs.setText(change_log); 95 | mCopyright.setOnClickListener(v -> { 96 | Utils.launchUrl("https://github.com/sunilpaulmathew", this); 97 | }); 98 | mBack.setOnClickListener(v -> { 99 | onBackPressed(); 100 | }); 101 | mCancel.setOnClickListener(v -> { 102 | onBackPressed(); 103 | }); 104 | } 105 | 106 | private static class RecycleViewAdapter extends RecyclerView.Adapter { 107 | 108 | private static ArrayList data; 109 | 110 | public RecycleViewAdapter(ArrayList data) { 111 | RecycleViewAdapter.data = data; 112 | } 113 | 114 | @NonNull 115 | @Override 116 | public RecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 117 | View rowItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_view_about, parent, false); 118 | return new RecycleViewAdapter.ViewHolder(rowItem); 119 | } 120 | 121 | @SuppressLint("UseCompatLoadingForDrawables") 122 | @Override 123 | public void onBindViewHolder(@NonNull RecycleViewAdapter.ViewHolder holder, int position) { 124 | holder.Title.setText(data.get(position).getTitle()); 125 | holder.Description.setText(data.get(position).getDescription()); 126 | holder.Description.setPaintFlags(holder.Description.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); 127 | holder.Description.setOnClickListener(v -> { 128 | if (data.get(position).getURL() != null) { 129 | Utils.launchUrl(data.get(position).getURL(), holder.Description.getContext()); 130 | } 131 | }); 132 | } 133 | 134 | @Override 135 | public int getItemCount() { 136 | return data.size(); 137 | } 138 | 139 | public static class ViewHolder extends RecyclerView.ViewHolder { 140 | private final MaterialTextView Title, Description; 141 | 142 | public ViewHolder(View view) { 143 | super(view); 144 | this.Title = view.findViewById(R.id.title); 145 | this.Description = view.findViewById(R.id.description); 146 | } 147 | } 148 | } 149 | 150 | private static class RecycleViewItem implements Serializable { 151 | private final String mTitle, mDescription, mURL; 152 | 153 | public RecycleViewItem(String title, String description, String url) { 154 | this.mTitle = title; 155 | this.mDescription = description; 156 | this.mURL = url; 157 | } 158 | 159 | public String getTitle() { 160 | return mTitle; 161 | } 162 | 163 | public String getDescription() { 164 | return mDescription; 165 | } 166 | 167 | public String getURL() { 168 | return mURL; 169 | } 170 | 171 | } 172 | 173 | } -------------------------------------------------------------------------------- /app/src/main/java/com/smartpack/busyboxinstaller/utils/AsyncTask.java: -------------------------------------------------------------------------------- 1 | package com.smartpack.busyboxinstaller.utils; 2 | 3 | import android.os.Handler; 4 | import android.os.Looper; 5 | 6 | import java.util.concurrent.ExecutorService; 7 | import java.util.concurrent.Executors; 8 | 9 | /* 10 | * Created by sunilpaulmathew on December 07, 2022 11 | * Ref: https://stackoverflow.com/questions/58767733/android-asynctask-api-deprecating-in-android-11-what-are-the-alternatives 12 | */ 13 | public abstract class AsyncTask { 14 | 15 | private final ExecutorService executors; 16 | 17 | public AsyncTask() { 18 | this.executors = Executors.newSingleThreadExecutor(); 19 | } 20 | 21 | private void startBackground() { 22 | onPreExecute(); 23 | executors.execute(() -> { 24 | doInBackground(); 25 | new Handler(Looper.getMainLooper()).post(() -> { 26 | onPostExecute(); 27 | if (!executors.isShutdown()) executors.shutdown(); 28 | }); 29 | }); 30 | } 31 | 32 | public void execute() { 33 | startBackground(); 34 | } 35 | 36 | public abstract void onPreExecute(); 37 | 38 | public abstract void doInBackground(); 39 | 40 | public abstract void onPostExecute(); 41 | } -------------------------------------------------------------------------------- /app/src/main/java/com/smartpack/busyboxinstaller/utils/RootFile.java: -------------------------------------------------------------------------------- 1 | package com.smartpack.busyboxinstaller.utils; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | /* 6 | * Created by sunilpaulmathew on April 11, 2020 7 | * Based on the original implementation on Kernel Adiutor by 8 | * Willi Ye 9 | */ 10 | 11 | public class RootFile { 12 | 13 | private final String mFile; 14 | 15 | RootFile(String file) { 16 | mFile = file; 17 | } 18 | 19 | boolean exists() { 20 | String output = RootUtils.runAndGetOutput("[ -e " + mFile + " ] && echo true"); 21 | return !output.isEmpty() && output.equals("true"); 22 | } 23 | 24 | String readFile() { 25 | return RootUtils.runAndGetOutput("cat '" + mFile + "'"); 26 | } 27 | 28 | @Override 29 | @NonNull 30 | public String toString() { 31 | return mFile; 32 | } 33 | 34 | } -------------------------------------------------------------------------------- /app/src/main/java/com/smartpack/busyboxinstaller/utils/RootUtils.java: -------------------------------------------------------------------------------- 1 | package com.smartpack.busyboxinstaller.utils; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.annotation.Nullable; 5 | 6 | import com.smartpack.busyboxinstaller.BuildConfig; 7 | import com.topjohnwu.superuser.Shell; 8 | import com.topjohnwu.superuser.ShellUtils; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | /* 14 | * Created by sunilpaulmathew on April 11, 2020 15 | * Based on the original implementation on Kernel Adiutor by 16 | * Willi Ye 17 | */ 18 | 19 | public class RootUtils { 20 | 21 | static { 22 | Shell.enableVerboseLogging = BuildConfig.DEBUG; 23 | } 24 | 25 | public static boolean rootAccess() { 26 | return Shell.rootAccess(); 27 | } 28 | 29 | private static String removeSuffix(@Nullable String s) { 30 | if (s != null && s.endsWith("\n")) { 31 | return s.substring(0, s.length() - "\n".length()); 32 | } 33 | return s; 34 | } 35 | 36 | public static void runCommand(String command) { 37 | Shell.su(command).exec(); 38 | } 39 | 40 | @NonNull 41 | static String runAndGetOutput(String command) { 42 | StringBuilder sb = new StringBuilder(); 43 | try { 44 | List outputs = Shell.su(command).exec().getOut(); 45 | if (ShellUtils.isValidOutput(outputs)) { 46 | for (String output : outputs) { 47 | sb.append(output).append("\n"); 48 | } 49 | } 50 | return removeSuffix(sb.toString()).trim(); 51 | } catch (Exception e) { 52 | return ""; 53 | } 54 | } 55 | 56 | @NonNull 57 | public static String runAndGetError(String command) { 58 | StringBuilder sb = new StringBuilder(); 59 | List outputs = new ArrayList<>(); 60 | List stderr = new ArrayList<>(); 61 | try { 62 | Shell.su(command).to(outputs, stderr).exec(); 63 | outputs.addAll(stderr); 64 | if (ShellUtils.isValidOutput(outputs)) { 65 | for (String output : outputs) { 66 | sb.append(output).append("\n"); 67 | } 68 | } 69 | return removeSuffix(sb.toString()).trim(); 70 | } catch (Exception e) { 71 | return ""; 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /app/src/main/java/com/smartpack/busyboxinstaller/utils/Utils.java: -------------------------------------------------------------------------------- 1 | package com.smartpack.busyboxinstaller.utils; 2 | 3 | import android.content.ActivityNotFoundException; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.content.pm.PackageManager; 7 | import android.content.res.AssetManager; 8 | import android.content.res.Configuration; 9 | import android.content.res.Resources; 10 | import android.net.Uri; 11 | import android.preference.PreferenceManager; 12 | import android.util.DisplayMetrics; 13 | import android.view.View; 14 | 15 | import androidx.appcompat.app.AppCompatDelegate; 16 | 17 | import com.google.android.material.snackbar.Snackbar; 18 | 19 | import java.io.BufferedReader; 20 | import java.io.File; 21 | import java.io.FileOutputStream; 22 | import java.io.IOException; 23 | import java.io.InputStream; 24 | import java.io.InputStreamReader; 25 | import java.io.OutputStream; 26 | import java.util.Locale; 27 | 28 | /* 29 | * Created by sunilpaulmathew on April 11, 2020 30 | * Based on the original implementation on Kernel Adiutor by 31 | * Willi Ye 32 | */ 33 | 34 | public class Utils { 35 | 36 | public static final String version = "1.32.1"; 37 | public static StringBuilder mOutput = null; 38 | public static boolean superUser = false; 39 | public static boolean SAR = false; 40 | public static boolean mountable = true; 41 | 42 | public static boolean isNotDonated(Context context) { 43 | try { 44 | context.getPackageManager().getApplicationInfo("com.smartpack.donate", 0); 45 | return false; 46 | } catch (PackageManager.NameNotFoundException ignored) { 47 | return true; 48 | } 49 | } 50 | 51 | public static boolean isSupporter(Context context) { 52 | return !isNotDonated(context) || getBoolean("support_received", false, context); 53 | } 54 | 55 | public static void initializeAppTheme() { 56 | AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM); 57 | } 58 | 59 | public static boolean isDarkTheme(Context context) { 60 | int currentNightMode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; 61 | return currentNightMode == Configuration.UI_MODE_NIGHT_YES; 62 | } 63 | 64 | public static void create(String text, String path) { 65 | RootUtils.runCommand("echo '" + text + "' > " + path); 66 | } 67 | 68 | public static void delete(String path) { 69 | if (existFile(path)) { 70 | RootUtils.runCommand("rm -r " + path); 71 | } 72 | } 73 | 74 | private static void mkdir(String dir) { 75 | RootUtils.runCommand("mkdir " + dir); 76 | } 77 | 78 | public static void move(String source, String dest) { 79 | RootUtils.runCommand("mv " + source + " " + dest); 80 | } 81 | 82 | public static String chmod(String permission, String path) { 83 | return RootUtils.runAndGetOutput("chmod " + permission + " " + path); 84 | } 85 | 86 | public static void snackbar(View view, String message) { 87 | Snackbar snackbar; 88 | snackbar = Snackbar.make(view, message, Snackbar.LENGTH_LONG); 89 | snackbar.show(); 90 | } 91 | 92 | public static void launchUrl(String url, Context context) { 93 | try { 94 | Intent i = new Intent(Intent.ACTION_VIEW); 95 | i.setData(Uri.parse(url)); 96 | context.startActivity(i); 97 | } catch (ActivityNotFoundException ignored) { 98 | } 99 | } 100 | 101 | public static String mountSystem(String command) { 102 | return RootUtils.runAndGetError("mount -o remount," + command + " /system"); 103 | } 104 | 105 | public static String mountRootFS(String command) { 106 | return RootUtils.runAndGetError("mount -o remount," + command + " /"); 107 | } 108 | 109 | public static void sleep(int s) { 110 | RootUtils.runCommand("sleep " + s); 111 | } 112 | 113 | public static String readFile(String file) { 114 | return new RootFile(file).readFile(); 115 | } 116 | 117 | public static boolean existFile(String file) { 118 | return new RootFile(file).exists(); 119 | } 120 | 121 | public static boolean getBoolean(String name, boolean defaults, Context context) { 122 | return PreferenceManager.getDefaultSharedPreferences(context).getBoolean(name, defaults); 123 | } 124 | 125 | public static void saveBoolean(String name, boolean value, Context context) { 126 | PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(name, value).apply(); 127 | } 128 | 129 | public static String getString(String name, String defaults, Context context) { 130 | return PreferenceManager.getDefaultSharedPreferences(context).getString(name, defaults); 131 | } 132 | 133 | public static void saveString(String name, String value, Context context) { 134 | PreferenceManager.getDefaultSharedPreferences(context).edit().putString(name, value).apply(); 135 | } 136 | 137 | public static String readAssetFile(Context context, String file) { 138 | InputStream input = null; 139 | BufferedReader buf = null; 140 | try { 141 | StringBuilder s = new StringBuilder(); 142 | input = context.getAssets().open(file); 143 | buf = new BufferedReader(new InputStreamReader(input)); 144 | 145 | String str; 146 | while ((str = buf.readLine()) != null) { 147 | s.append(str).append("\n"); 148 | } 149 | return s.toString().trim(); 150 | } catch (IOException ignored) { 151 | } finally { 152 | try { 153 | if (input != null) input.close(); 154 | if (buf != null) buf.close(); 155 | } catch (IOException e) { 156 | e.printStackTrace(); 157 | } 158 | } 159 | return null; 160 | } 161 | 162 | public static String getArch() { 163 | String arch = RootUtils.runAndGetOutput("uname -m"); 164 | if (arch.matches("aarch64|armv8l")) { 165 | return "aarch64"; 166 | } else if (arch.equals("armv7l")) { 167 | return "armv7l"; 168 | } else { 169 | return "i686"; 170 | } 171 | } 172 | 173 | public static boolean isMagiskSupported() { 174 | return existFile("/data/adb/magisk"); 175 | } 176 | 177 | public static boolean isWritableSystem() { 178 | return !mountSystem("rw").equals("mount: '/system' not in /proc/mounts"); 179 | } 180 | 181 | public static boolean isWritableRoot() { 182 | return !mountRootFS("rw").contains("' is read-only"); 183 | } 184 | 185 | public static void copyBinary(Context context) { 186 | AssetManager assetManager = context.getAssets(); 187 | InputStream in; 188 | OutputStream out; 189 | try { 190 | in = assetManager.open(getArch()); 191 | File outFile = new File(mountable ? context.getExternalFilesDir("") + "/busybox_" + version : 192 | context.getExternalFilesDir("/system/xbin/") + "/busybox_" + version); 193 | out = new FileOutputStream(outFile); 194 | byte[] buffer = new byte[1024]; 195 | int read; 196 | while((read = in.read(buffer)) != -1){ 197 | out.write(buffer, 0, read); 198 | } 199 | } catch (Exception ignored) { 200 | } 201 | } 202 | 203 | public static void initializeModule() { 204 | mkdir("/data/adb/modules/bbi"); 205 | chmod("755", "/data/adb/modules/bbi"); 206 | create("id=BBI\n" + 207 | "name=BusyBox Installer\n" + 208 | "version=v1.0\n" + 209 | "versionCode=1\n" + 210 | "author=sunilpaulmathew\n" + 211 | "description=Systemless BusyBox Installer", 212 | "/data/adb/modules/bbi/module.prop"); 213 | chmod("644", "/data/adb/modules/bbi/module.prop"); 214 | } 215 | 216 | public static String getBusyBoxVersion() { 217 | try { 218 | for (String line : RootUtils.runAndGetOutput(existFile("/data/adb/modules/bbi/system/xbin/busybox_" + Utils.version) ? 219 | "/data/adb/modules/bbi/system/xbin/busybox_" + Utils.version : "/system/xbin/busybox_" + version).split("\\r?\\n")) { 220 | if (line.startsWith("BusyBox v")) { 221 | return line.replace("BusyBox v", ""); 222 | } 223 | } 224 | } catch (Exception ignored) { 225 | } 226 | return null; 227 | } 228 | 229 | public static String getAppletsList() { 230 | return RootUtils.runAndGetOutput((existFile("/data/adb/modules/bbi/system/xbin/busybox_" + Utils.version) ? 231 | "/data/adb/modules/bbi/system/xbin/busybox_" : "/system/xbin/busybox_") + version + " --list").replace("su\n", ""); 232 | } 233 | 234 | public static String getLanguage(Context context) { 235 | return getString("appLanguage", java.util.Locale.getDefault().getLanguage(), context); 236 | } 237 | 238 | public static void setLanguage(Context context) { 239 | Locale myLocale = new Locale(getString("appLanguage", java.util.Locale.getDefault() 240 | .getLanguage(), context)); 241 | Resources res = context.getResources(); 242 | DisplayMetrics dm = res.getDisplayMetrics(); 243 | Configuration conf = res.getConfiguration(); 244 | conf.locale = myLocale; 245 | res.updateConfiguration(conf, dm); 246 | } 247 | 248 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_coffee.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_dinner.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_donation_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/drawable/ic_donation_app.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_heart.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_meal.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 21 | 22 | 30 | 31 | 41 | 42 | 43 | 49 | 50 | 55 | 56 | 64 | 65 | 73 | 74 | 81 | 82 | 83 | 84 | 92 | 93 | 96 | 97 | 102 | 103 | 112 | 113 | 119 | 120 | 125 | 126 | 127 | 136 | 137 | 143 | 144 | 152 | 153 | 154 | 155 | 156 | 157 | 169 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_billing.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 20 | 21 | 25 | 26 | 35 | 36 | 48 | 49 | 50 | 57 | 58 | 68 | 69 | 77 | 78 | 79 | 80 | 84 | 85 | 86 | 97 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | 25 | 26 | 34 | 35 | 36 | 45 | 46 | 50 | 51 | 60 | 61 | 62 | 71 | 72 | 76 | 77 | 87 | 88 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_checkbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/recycle_view_about.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 17 | 18 | 26 | 27 | 36 | -------------------------------------------------------------------------------- /app/src/main/res/layout/recycle_view_donate.xml: -------------------------------------------------------------------------------- 1 | 9 | 10 | 15 | 16 | 22 | 23 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values-am/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ስለ እኛ 5 | ይቅር 6 | ልገሳ 7 | ደብቅ 8 | ጫን 9 | ቢዚቦክስ ን ይጫኑ! 10 | እንኳን ደስ አለዎት! በዚህ መተግበሪያ ላይ ያለው አዲሱ የ ቢዚቦክስ (v%s) ስሪት ቀድሞውኑ በእርስዎ መሣሪያ ላይ ተጭኗል! 11 | እርግጠኛ ነዎት ቢዚቦክስ %s ን መጫን ይፈልጋሉ? 12 | እንደ አለመታደል ሆኖ ከዚህ መተግበሪያ ቢዚቦክስ ጭነት ለእርስዎ ሥነ ሕንፃ (%s) ገና አይገኝም! 13 | አዲስ ዝመና ይገኛል! ቢዚቦክስ ን ወደ v%s ማዘመን ይፈልጋሉ? 14 | እንደ አለመታደል ሆኖ የ ቢዚቦክስ ጫኝ በመሣሪያዎ ‹s \'/system/xbin\' አቃፊ ላይ የ ቢዚቦክስ አፕልትን ለመፃፍ አልተሳካም! 15 | ቢዚቦክስ ጭነት ተጠናቅቋል! መሣሪያዎን ድጋሚ ማስነሳት ይፈልጋሉ? 16 | ቢዚቦክስ v%s ን በመጫን ላይ 17 | ቋንቋ (%s) 18 | ነባር 19 | የአፕሌቶች ዝርዝር 20 | የሚከተሉት አፕልቶች በዚህ ጥቅል ውስጥ ተካተዋል!\n\n - %s 21 | ቢዚቦክስ ጭነት ያለ Root መዳረሻ አይሰራም! ውርጃ 22 | ለመውጣት መልሰህ ተጫን! 23 | ድጋሚ አስነሳ 24 | አስወግድ 25 | BusyBox v%s በተሳካ ሁኔታ ከመሣሪያዎ ተወግ isል። ዳግም ማስጀመር ይፈልጋሉ? 26 | እርግጠኛ ነዎት BusyBox (v%s) አፕልትን ከ \'/system/xbin\' ያስወግዳሉ?\n\nእባክዎ ልብ ይበሉ: - በዚህ መተግበሪያ መሣሪያዎ ላይ የተጫኑትን ፖምዎች ብቻ ያስወግዳል! 27 | BusyBox v%s ን በማስወገድ ላይ 28 | አጋራ 29 | ቢዚቦክስ ጫኝ%s ን ከ ያግኙ https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller 30 | ምንጭ ኮድ 31 | የድጋፍ ቡድን 32 | አዘምን 33 | ቢዚቦክስ ማዘመኛ አለ! 34 | እንኳን ደስ አለዎት! እርስዎ ወቅታዊ ናቸው! 35 | የማይደገፍ ስነ-ህንፃ! 36 | -------------------------------------------------------------------------------- /app/src/main/res/values-ar/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | "حول" 4 | "فشل الاتصال بـ Google Play Billing!" 5 | "إصدار BusyBox" 6 | "إلغاء" 7 | "تغيير السجلات" 8 | "الاعتمادات" 9 | "التبرعات" 10 | "شراء تطبيق التبرع" 11 | "إخفاء" 12 | "تثبيت" 13 | "تثبيت BusyBox!" 14 | "مبروك! أحدث إصدار من (BusyBox (v%s المتوفر على هذا التطبيق مثبت بالفعل على جهازك!" 15 | "هل أنت متأكد من تثبيت ?BusyBox %s" 16 | "للأسف ، تثبيت BuyBox من هذا التطبيق غير متاح بعد للهندسة المعمارية الخاصة بك (v٪s)!" 17 | "تحديث جديد متاح! هل تريد تحديث BusyBox إلى v%s؟" 18 | "لسوء الحظ ، فشل برنامج تثبيت BusyBox في كتابة تطبيقات BusyBox على مجلد '/ system / xbin' بجهازك!" 19 | "تم الانتهاء من تثبيت BusyBox! هل تريد إعادة تشغيل جهازك؟" 20 | "تثبيت BusyBox v٪s" 21 | "اللغات (%s)" 22 | "الأمهرية" 23 | "اليونانية" 24 | "الإنجليزية" 25 | "إفتراضي" 26 | "الأندونيسية" 27 | "الكورية" 28 | "البرتغالية" 29 | "الروسية" 30 | "قائمة التطبيقات الصغيرة" 31 | "يتم تضمين التطبيقات الصغيرة التالية في هذه الحزمة! 32 | 33 | - %s" 34 | "لن يعمل تثبيت BusyBox بدون الوصول إلى الروت! إجهاض" 35 | "اضغط مرة أخرى للخروج!" 36 | "اعادة التشغيل" 37 | "إزالة" 38 | "تمت إزالة BusyBox v٪s بنجاح من جهازك. هل تريد إعادة التشغيل؟" 39 | "هل أنت متأكد من إزالة تطبيقات BusyBox (v٪s) الصغيرة من \"/ system / xbin\"؟ 40 | 41 | يرجى ملاحظة: سيؤدي فقط إلى إزالة التطبيقات الصغيرة المثبتة بواسطة هذا التطبيق على جهازك!" 42 | "إزالة BusyBox v٪s" 43 | "احفظ الدخول" 44 | "تم تصدير ملف سجل التثبيت كـ 'v٪s'!" 45 | "مشاركة" 46 | "احصل على BusyBox Installer ٪s من 47 | https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller" 48 | "مصدر الرمز" 49 | "تم الإقرار بالتبرع \ u2665" 50 | "مطور الدعم!" 51 | "إذا كنت ترغب في تقدير جهود المطور لتوفير هذه الأداة مجانًا تمامًا ، فيرجى التفكير في إرسال تبرع صغير من خلال النقر فوق واحد من بين الخيارات المتوفرة أدناه!" 52 | "اشتري لي عشاء" 53 | "اشتري لي وجبة" 54 | "اشتري لي قهوة" 55 | "لقد قمت بالفعل بدعم التطوير باستخدام هذا العنصر من قبل!" 56 | "شكرًا جزيلاً على دعمك \ u2665 57 | سيحفزني ذلك كثيرًا لمواصلة مشاريعي بشكل أكثر نشاطًا!" 58 | "يرجى محاولة الشراء مرة أخرى!" 59 | "مجموعة الدعم" 60 | "تحديث" 61 | "تحديث BusyBox متاح!" 62 | "مبروك! أنت محدث!" 63 | "هندسة معمارية غير مدعومة!" 64 | "إصدار" 65 | -------------------------------------------------------------------------------- /app/src/main/res/values-cs/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | "Info" 4 | "Chyba spojení s Google Play Billing!" 5 | "Verze BusyBoxu" 6 | "Zrušit" 7 | "Seznam změn" 8 | "Autoři" 9 | "Příspěvky" 10 | "Koupit darovací aplikaci" 11 | "Skrýt" 12 | "Instalovat" 13 | "Instalovat BusyBox!" 14 | "Gratuluji! Poslední verzi BusyBoxu (v%s) dostupnou v této aplikaci už máte nainstalovanou!" 15 | "Opravdu chcete nainstalovat BusyBox %s?" 16 | "Bohužel, instalace BusyBoxu z tohoto zdroje zatím není dostupná pro vaše zařízení (%s)!" 17 | "Dostupná aktualizece! Chcete aktualizovat BusyBox na v%s?" 18 | "Bohužel, BusyBox Installer nemůže zapisovat komponenty do složky '/system/xbin'!" 19 | "Instalace BusyBoxu úspěšná! Chcete restartovat zařízení?" 20 | "Instalace BusyBoxu v%s" 21 | "Jazyk (%s)" 22 | "Výchozí" 23 | "Seznam Komponent" 24 | "V tomto balíčku jsou dostupné následující komponenty!\n\n- %s" 25 | "Instalace BusyBoxu nemůže pokračovat bez ROOT přístupu! Ruším" 26 | "Stiskněte znovu zpět pro ukončení" 27 | "Restart" 28 | "Odebrat" 29 | "BusyBox v%s byl úspěšně odebrán z vašeho zařízení. Chcete restartovat?" 30 | "Opravdu chcete odebrat komponenty BusyBoxu (v%s) z '/system/xbin'?\n\nUpozornění: Odebere pouze komponenty instalované touto aplikací!" 31 | "Odebírání BusyBoxu v%s" 32 | "Uložit Log" 33 | "Instalační Log byl exportován jako '%s'!" 34 | "Sdílet" 35 | "Získat BusyBox Installer %s z https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller" 36 | "Zdrojový kód" 37 | "Podpora Potvrzena \u2665 " 38 | "Podpořit Autora!" 39 | "Pokud chcete podpořit vývoj této bezplatné aplikace, zvažte nákup některé z uvedených položek" 40 | "Koupit večeři" 41 | "Koupit oběd" 42 | "Koupit kafe" 43 | "Tento předmět máte již zakoupený!" 44 | "Velice děkuji za Vaši podporu \u2665\nVelice mě to motivuje k práci na projektu!" 45 | "Prosím zkuste zakoupit znovu" 46 | "Podpora" 47 | "Aktualizace" 48 | "Dostupná aktualizace BusyBoxu!" 49 | "Gratuluji! Máte nejnovější verzi!" 50 | "Nepodporované zařízení" 51 | "Verze" 52 | -------------------------------------------------------------------------------- /app/src/main/res/values-el/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Σχετικά με 5 | Έκδοση BusyBox 6 | Ακύρωση 7 | Ευχαριστίες 8 | Δωρεές 9 | Απόκρυψη 10 | Εγκατάσταση 11 | Εγκατάσταση BusyBox! 12 | Συγχαρητήρια! Η πιο πρόσφατη έκδοση του BusyBox (v%s) διαθέσιμη σε αυτήν την εφαρμογή είναι ήδη εγκατεστημένη σε αυτήν τη συσκευή! 13 | Είστε σίγουρος ότι θέλετε να εγκαταστήσετε το BusyBox %s? 14 | Δυστυχώς, η εγκατάσταση BusyBox από αυτήν την εφαρμογή δεν είναι ακόμη διαθέσιμη για τη συσκευή σας (%s)! 15 | Νέα ενημέρωση διαθέσιμη! Θέλετε να ενημερώσετε το BusyBox σε v%s? 16 | Δυστυχώς, το BusyBox installer απέτυχε να εγγράψει τα BusyBox applets στη συσκευή σας\'s \'/system/xbin\' φάκελος! 17 | Η εγκατάσταση του BusyBox ολοκληρώθηκε! Επιθυμείτε να επανεκκίνησετε τη συσκευή σας; 18 | Εγκατάσταση BusyBox v%s 19 | Γλώσσα (%s) 20 | Προεπιλογή 21 | Λίστα Applets 22 | Τα ακόλουθα applets συμπεριλαμβάνονται σε αυτό το πακέτο!\n\n - %s 23 | Η εγκατάσταση BusyBox δε θα λειτουργήσει χωρίς Πρόσβαση Root! Διακοπή 24 | Πατήστε ξανά πίσω για έξοδο! 25 | Επανεκκίνηση 26 | Αφαίρεση 27 | Το BusyBox v%s απεγκαταστάθηκε επιτυχώς από τη συσκευή σας. Επιθυμείτε να επανεκκινήσετε; 28 | Είστε σίγουρος ότι θέλετε να αφαιρέσετε τα BusyBox (v%s) applets από \'/system/xbin\'?\n\nΠαρακαλώ να σημειωθεί: Θα αφαιρέσει μόνον τα εγκατεστημένα από αυτήν την εφαρμογή applets στη συσκευή! 29 | Αφαίρεση BusyBox v%s 30 | Κοινοποίηση 31 | Αποκτήστε το BusyBox Installer %s από https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller 32 | Πηγαίος Κώδικας 33 | Ομάδα Υποστήριξης 34 | Ενημέρωση 35 | Ενημέρωση για το BusyBox διαθέσιμη! 36 | Συγχαρητήρια! Είσαστε ενημερωμένος! 37 | Μη Υποστηριζόμενη Αρχιτεκτονική! 38 | -------------------------------------------------------------------------------- /app/src/main/res/values-es/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | "Acerca de" 4 | "La conexión con la facturación de Google ha fallado!" 5 | "Versión de BusyBox" 6 | "Cancelar" 7 | "Registro de cambios" 8 | "Créditos" 9 | "Donaciones" 10 | "Comprar App para donación" 11 | "Ocultar" 12 | "Instalar" 13 | "Instalar BusyBox!" 14 | "Felicidades! La última versión de BusyBox (v&s) disponible en esta aplicación está instalada en tu dispositivo!" 15 | "Estás seguro de instalar BusyBox %s?" 16 | "Desafortunadamente, la instalación de BusyBox mediante esta app no esta disponible para ti arquitectura (%s)!" 17 | "Nueva actualización disponible! Quieres actualizar BusyBox a v%s?" 18 | "Desafortunadamente, BusyBox Installer ha fallado en escribir los applets de BusyBox en la carpeta '/system/xbin' de tu dispositivo!" 19 | "Instalación de BusyBox terminada! Quieres reiniciar tu dispositivo?" 20 | "Instalando BusyBox v%s" 21 | "Idioma (%s)" 22 | "Amhárico" 23 | "Griego" 24 | "Inglés" 25 | "Por defecto" 26 | "Indonesio" 27 | "Coreano" 28 | "Portugués" 29 | "Ruso" 30 | "Lista de Applets" 31 | "Los siguientes applets están incluidos en este paquete!\n\n- %s" 32 | "La instalación de BusyBox no funcionará sin acceso root! Cancelando" 33 | "Presiona atrás de nuevo para salir!" 34 | "Reiniciar" 35 | "Remover" 36 | "BusyBox v%s ha sido removido exitosamente de tu dispositivo! Quieres reiniciar?" 37 | "Estás seguro de quitar los applets de BusyBox (v%s) de '/system/xbin'?\n\nNota: Esto solo removerá los applets instalados por esta app de tu dispositivo!" 38 | "Removiendo BusyBox v%s" 39 | "Guardar registro" 40 | "Archivo de registro ha sido exportado como '%s'!" 41 | "Compartir" 42 | "Obtener BusyBox Installer %s desde https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller" 43 | "Código fuente" 44 | "Donación reconocida /u2665" 45 | "Apoya al desarrollador!" 46 | "Si te gusta apreciar los esfuerzos del desarrollador por proveer esta herramienta completamente gratis, por favor considera hacer una pequeña donación haciendo click en una de las opciones proporcionadas!" 47 | "Cómprame la cena" 48 | "Cómprame un aperitivo" 49 | "Cómprame un café" 50 | "Ya has apoyado el desarrollo con esto anteriormente!" 51 | "Muchísimas gracias por tu soporte \u2665 \nEsto me motiva muchísimo para tener mis proyectos mas activos!" 52 | "Por favor trata de comprar de nuevo!" 53 | "Grupo de soporte" 54 | "Actualizar" 55 | "Actualización de BusyBox disponible!" 56 | "Felicidades! Estas usando la versión mas reciente!" 57 | "Arquitectura no soportada!" 58 | "Versión" 59 | -------------------------------------------------------------------------------- /app/src/main/res/values-fr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | "À propos" 4 | "Échec de connexion avec le client de facturation Google Play !" 5 | "Version de BusyBox" 6 | "Annuler" 7 | "Journal des modifications" 8 | "Crédits" 9 | "Dons" 10 | "Achetez l'application de don" 11 | "Masquer" 12 | "Installer" 13 | "Installer BusyBox !" 14 | "Félicitations ! La dernière version de BusyBox (v%s) disponible sur cette application est déjà installée sur ton appareil !" 15 | "Êtes-vous sûr d'installer BusyBox %s ?" 16 | "Malheureusement, l'installation de BusyBox à partir de cette application n'est pas encore disponible pour votre architecture (%s) !" 17 | "Une nouvelle mise à jour est disponible ! Voulez-vous mettre à jour BusyBox vers v%s ?" 18 | "Malheureusement, le programme d'installation de BusyBox n'a pas réussi à écrire les applets BusyBox dans le dossier '/system/xbin' de votre appareil !" 19 | "L'installation de BusyBox est terminée ! Voulez-vous redémarrer votre appareil ?" 20 | "Installation de BusyBox v%s" 21 | "Langue (%s)" 22 | "Amharique" 23 | "Grec" 24 | "Anglais" 25 | "Par défaut" 26 | "Indonésien" 27 | "Coréen" 28 | "Portugais" 29 | "Russe" 30 | "Liste des applets" 31 | "Les applets suivants sont inclus dans ce paquet ! 32 | 33 | - %s" 34 | "L'installation de BusyBox ne fonctionnera pas sans accès Root ! Annulation" 35 | "Appuyez encore sur retour pour quitter !" 36 | "Redémarrer" 37 | "Désinstaller" 38 | "BusyBox v%s a été supprimé de votre appareil avec succès. Voulez-vous redémarrer ?" 39 | "Êtes-vous sûr de vouloir supprimer les applets BusyBox (v%s) de '/system/xbin' ? 40 | 41 | Remarque : Seulement les applets installés par cette application seront désinstallés de votre appareil !" 42 | "Désinstallation de BusyBox v%s" 43 | "Enregistrer le journal" 44 | "Le journal de l'installation est exporté sous '%s' !" 45 | "Partager" 46 | "Obtenez BusyBox Installer %s sur : https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller" 47 | "Code source" 48 | "Donation enregistrée \u2665" 49 | "Supportez le développeur !" 50 | "Si vous désirez saluer les efforts du développeur à fournir cet outil entièrement gratuitement, considérez l'envoi d'un petit don en cliquant sur l'une des options ci-dessous !" 51 | "Achetez-moi un Dîner" 52 | "Achetez-moi un Repas" 53 | "Achetez-moi un Café" 54 | "Vous avez déjà soutenu le développement de cet article auparavant !" 55 | "Merci beaucoup pour votre soutien \u2665 56 | Cela me motive à poursuivre mes projets avec encore plus d'énergie !" 57 | "Veuillez recommencer l'achat !" 58 | "Groupe de Support" 59 | "Mettre à jour" 60 | "Une mise à jour de BusyBox est disponible !" 61 | "Bravo ! Vous êtes à jour !" 62 | "Architecture non supportée !" 63 | "Version" 64 | -------------------------------------------------------------------------------- /app/src/main/res/values-hr/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | "O programu" 4 | "Neuspjelo povezivanje s Google Play Billing klijentom!" 5 | "BusyBox verzija" 6 | "Poništi" 7 | "Promjene" 8 | "Donacije" 9 | "Kupi donacijsku applikaciju" 10 | "Sakrij" 11 | "Instaliraj" 12 | "Instaliraj BusyBox!" 13 | "Čestitke! Najnovija verzija BusyBox (v%s) dostupna u ovoj aplikaciji je već instalirana na vašem uređaju!" 14 | "Jeste li sigurni da želite instalirati BusyBox %s?" 15 | "Nažalost BusyBox instalacija još nije dostupna za vašu arhitekturu (%s)!" 16 | "Novo ažuriranje je dostupno! Želite li ažurirati BusyBox na verziju v%s?" 17 | "Nažalost BusyBox installer nije uspio instalirati BusyBox \"applete\" u folder '/system/xbin'!" 18 | "Instalacija BusyBox paket je dovršena! Želite li ponovno pokrenuti Vaš uređaj?" 19 | "Instalira se BusyBox v%s" 20 | "Jezik (%s)" 21 | "Amharic" 22 | "Greek" 23 | "English" 24 | "Indonesian" 25 | "Korean" 26 | "Portuguese" 27 | "Russian" 28 | "Popis appleta" 29 | "Sljedeći apleti uključeni su u paket! 30 | 31 | - %s" 32 | "Instalacija BusyBox paketa neće raditi bez root pristupa! Prekid" 33 | "Još jednom natrag za izlaz!" 34 | "Ponovno pokretanje" 35 | "Ukloni" 36 | "BusyBox v%s je uspješno uklonjen s Vašeg uređaja. Želite li ponovno pokrenuti uređaj?" 37 | "Želite li sigurno ukloniti BusyBox (v%s) applete iz '/system/xbin'? 38 | 39 | Pažnja: Samo appleti instalirani pomoću ove aplikacije bit će uklonjeni." 40 | -------------------------------------------------------------------------------- /app/src/main/res/values-in/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Tentang 5 | Gagal terhubung dengan klien Layanan Penagihan Google Play! 6 | Versi BusyBox 7 | Membatalkan 8 | Log-perubahan 9 | Kredit 10 | Donasi 11 | Beli Aplikasi Donasi 12 | Menyembunyikan 13 | Pasang 14 | Pasang BusyBox! 15 | Selamat! BusyBox versi terbaru (v%s) yang tersedia di aplikasi ini telah terinstal di perangkat Anda! 16 | Apakah Anda yakin untuk menginstal BusyBox %s? 17 | Sayangnya, penginstalan BuyBox dari aplikasi ini belum tersedia untuk arsitektur Anda (%s)! 18 | Pembaruan baru tersedia! Apakah Anda ingin memperbarui BusyBox ke v%s? 19 | Sayangnya, penginstal BusyBox gagal menulis applet BusyBox di perangkat Anda \'/system/xbin\' folder! 20 | Instalasi BusyBox Selesai! Apakah Anda ingin me-reboot perangkat Anda? 21 | Installing BusyBox v%s 22 | Bahasa (%s) 23 | Default 24 | Daftar Applet 25 | Applet berikut termasuk dalam paket ini!\n\n - %s 26 | Instalasi BusyBox tidak akan berfungsi tanpa Akses Root! Membatalkan 27 | Tekan kembali untuk keluar! 28 | Mulai ulang 29 | Menghapus 30 | BusyBox v%s berhasil dihapus dari perangkat Anda. Apakah Anda tidak ingin melakukan boot ulang? 31 | Apakah Anda yakin untuk menghapus applet BusyBox (v%s) dari \'/system/xbin\'?\n\nHarap Dicatat: Ini hanya akan menghapus applet yang dipasang oleh aplikasi ini di perangkat Anda! 32 | Menghapus BusyBox v%s 33 | Simpan Log 34 | File log instalasi diekspor sebagai \'%s\'! 35 | Bagikan 36 | Dapatkan BusyBox Installer %s dari https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller 37 | Kode sumber 38 | Donasi Diakui \u2665 39 | Dukung Pengembang! 40 | Jika Anda ingin menghargai upaya pengembang yang menyediakan alat ini sepenuhnya gratis, harap pertimbangkan untuk mengirimkan sedikit sumbangan dengan mengeklik salah satu opsi yang disediakan di bawah ini! 41 | Belikan aku makan malam 42 | Belikan aku Meal 43 | Belikan aku Kopi 44 | Anda sudah mendukung pengembangan dengan item ini sebelumnya! 45 | Terimakasih atas dukunganmu \u2665\nIni akan memotivasi saya untuk melanjutkan proyek saya dengan lebih aktif! 46 | Silakan coba membeli lagi! 47 | Grup dukungan 48 | Perbarui 49 | Pembaruan BusyBox Tersedia! 50 | Selamat! Anda sudah up-to-date! 51 | Arsitektur Tidak Didukung! 52 | Versi 53 | 54 | -------------------------------------------------------------------------------- /app/src/main/res/values-it/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Informazioni 4 | Errore di connessione con il client Google Play Billing! 5 | Versione BusyBox 6 | Annulla 7 | Change-logs 8 | Copyright: © %s 9 | Crediti 10 | Donations 11 | Compra App Donazione 12 | Nascondi 13 | Installa 14 | Installa BusyBox! 15 | Congratulazioni! L\'ultima versione di BusyBox (v%s) disponibile in questa app è già installata sul tuo dispositivo! 16 | Sei sicuro di installare BusyBox %s? 17 | Purtroppo, l\'installazione di BuyBox da questa app non è ancora disponibile per la tua architettura (%s)! 18 | Nuovo aggiornamento disponibile! Vuoi aggiornare BusyBox a v%s? 19 | Purtroppo, l\'installer di BusyBox ha fallito nel scrivere gli applets di BusyBox sulla tua cartella \'/system/xbin\' del dispositivo! 20 | Installazione di BusyBox Finita! Vuoi riavviare il tuo dispositivo? 21 | Provando installazione system-less 22 | Installando BusyBox v%s 23 | Lingua (%s) 24 | Predefinito 25 | Lista Applets 26 | I seguenti applets sono inclusi in questo pachetto!\n\n - %s 27 | L\'installazione di BusyBox non funzionerà se permessi di Amministratore! Annullamento 28 | Premi indietro ancora per uscire! 29 | Riavvio 30 | Rimuovi 31 | Rimuovi BusyBox! 32 | BusyBox v%s è stato rimosso con successo dal tuo dispositivo. Vuoi riavviare? 33 | Sei sicuro di rimuovere gli applets di BusyBox (v%s) da \'/system/xbin\'?\n\nAttenzione: Rimuoverà solo gli applets installati da quest\'app sul tuo dispositivo! 34 | Rimuovendo BusyBox v%s 35 | Salva Log 36 | File log di installazione esportato come \'%s\'! 37 | Condividi 38 | Ottieni BusyBox Installer %s da https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller 39 | Codice Sorgente 40 | Donazione Riconosciuta \u2665 41 | Supporta lo Sviluppatore! 42 | Se apprezzi gli sforzi dello sviluppatore per offrire questo strumento interamente gratis, prendi in considerazione di effettuare una piccola donazione cliccando una delle opzioni fornite qui sotto per favore! Comprando uno di questi prodotti sarai ricompensato qui con un badge da supporter. 43 | Comprami una Cena 44 | Comprami un Pranzo 45 | Grazie mille per il tuo supporto! 46 | Comprami un Caffè 47 | Hai già supportato lo sviluppo con questa opzione! 48 | Grazie per il tuo supporto \u2665\nMi spingerà molto a continuare i miei progetti più attivamente. Inoltre riceverai un badge da supporter in cima a questa pagina. 49 | Prova ad acquistare di nuovo per favore 50 | Gruppo di Supporto 51 | Traduzioni 52 | Aggiorna 53 | Aggiornamento di BusyBox Disponibile! 54 | Congratulazioni! Sei aggiornato all\'ultima versione! 55 | Architettura non SUpportata! 56 | Versione 57 | -------------------------------------------------------------------------------- /app/src/main/res/values-ko/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 정보 5 | BusyBox 버전 6 | 취소 7 | 변경사항 8 | 도움을 주신 분들 9 | 기부 10 | 기부 앱 구매 11 | 숨기기 12 | 설치 13 | BusyBox 설치 14 | 이 앱에서 설치 가능한 최신 버전의 BusyBox (v%s) 가 이미 기기에 설치되어 있어요. 15 | BusyBox %s을(를) 설치할까요? 16 | 이 앱은 이 기기의 아키텍처인 %s의 BusyBox 바이너리를 지원하지 않아요! 17 | BusyBox %s을(를) 설치할 수 있어요. 지금 설치할까요? 18 | \'/system/xbin\' 폴더에 BusyBox을(를) 설치하는데 실패했어요. 19 | BusyBox 설치를 완료했어요.. 기기를 다시 시작할까요? 20 | BusyBox %s을(를) 설치하는 중… 21 | 언어 (%s) 22 | 시스템 언어 23 | 애플릿 종류 24 | 아래 애플릿들이 이 패키지에 포함되어 있어요.\n\n - %s 25 | 이 기능은 루트 권한 없이 작동하지 않아요! 26 | 나가려면 한 번 더 뒤로 가기 하세요. 27 | 다시 시작 28 | 제거 29 | BusyBox %s 제거를 완료했어요. 기기를 다시 시작할까요? 30 | \'/system/xbin\'에서 BusyBox %s을(를) 제거할까요?\n\n알아두기: 오직 이 앱에서 설치한 BusyBox 애플릿들만 지워질 것에요! 31 | BusyBox %s을(를) 제거하는 중… 32 | 로그 저장 33 | 로그 파일이 \'%s\'에 저장되었어요. 34 | 공유 35 | Busybox Installer %s은(는) 아래 링크들에서 받을 수 있어요.\nPlay Store:https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller\nGitHub: https://github.com/SmartPack/BusyBox-Installer/releases 36 | 소스 코드 37 | 기부한 것이 확인되었어요 \u2665 38 | 개발자 기부 39 | 이 프로젝트를 지원하고 싶다면, 아래에 있는 3개의 기부 옵션을 확인하고 그 중 하나를 선택해 조그만 기부를 보내주세요! 40 | 저녁 보내기 41 | 고기 보내기 42 | 커피 보내기 43 | 이전에 이미 이 옵션으로 프로젝트를 지원했어요! 44 | 정말 감사드립니다 \u2665\n제 프로젝트들의 개발을 이어나가는데 큰 도움이 될 것입니다! 45 | 다시 결제해보세요! 46 | 텔레그램 그룹 47 | 업데이트 48 | BusyBox 업데이트 가능! 49 | 최신 버전의 BusyBox 사용 중! 50 | 지원되지 않는 아키택처! 51 | 버전 52 | -------------------------------------------------------------------------------- /app/src/main/res/values-my/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | "အကြောင်းအရာ" 4 | "ဂူဂယ်လ်ပလေးငွေချေမှုချိတ်ဆက်ခြင်းမအောင်မြင်ပါ!" 5 | "ဘီးစီးဘောက်စ် ဗားရှင်း" 6 | "ငြင်းပယ်သည်" 7 | "ပြောင်းလဲမှု - မှတ်တမ်းများ" 8 | "ခရက်ဒစ်" 9 | "လှူဒါန်းခြင်းများ" 10 | "လှူထားသောapp" 11 | "ဖွက်" 12 | "ထည့်သွင်း" 13 | "ဘီးစီးဘောက်စ် ထည့်သွင်း!" 14 | "ဂုဏ်ယူပါတယ်! ဒီappမှာရရှိနိုင်သော ဘီးစီးဘောက်(ဗားရှင်း%s)ကို သင့်စက်မှာ နဂိုကတည်းက ထည့်သွင်းပြီးပါပြီ။!" 15 | "ဘီးစီးဘောက်ထည့်သွင်းမှာသေချာပြီလား%s?" 16 | "ကံမကောင်းစွာပဲ သင့်ဖုန်းအမျိုးအစားမှာ ဒီappသုံး၍ဘီးစီးဘောက်စ်ထည့်သွင်းခြင်းမရရှိနိုင်သေးပါ(%s)!" 17 | "ဗားရှင်းအသစ်ရရှိနိုင်ပြီ! သင့်ဘီးစီးဘောက်စ်ကို မြှင့်တင်ချင်ပါသလား ဗားရှင်း%s?" 18 | "ကံမကောင်းစွာပဲ၊ သင့်ဖုန်းရဲ့ '/system/xbin' ဖိုင်တွဲမှာ ဘီးစီးဘောက်စ် စနစ်များ ရေးသားခြင်း မအောင်မြင်ပါ။!" 19 | "ဘီးစီးဘောက်စ်ထည့်သွင်းခြင်း ပြီးပါပြီ။!သင့်စက်ကိရိယာကို ပြန်လည်စတင်လိုပါသလား။?" 20 | "ဘီးစီးဘောက်စ်ထည့်သွင်းနေသည် ဗားရှင်း%s" 21 | "ဘာသာစကား (%s)" 22 | "အမ်ဟရစ်" 23 | "ဂရိ" 24 | "အင်္ဂလိပ်" 25 | "ပုံသေ" 26 | "အင်ဒိုနီးရှား" 27 | "ကိုရီးယား" 28 | "ပေါ်တူဂီ" 29 | "ရုရှား" 30 | "အက်ပလက်စ် ဇယား" 31 | "အောက်ပါ အက်ပလက်စ် များမှာ ဒီအထုပ်ထဲတွင်ပါပါသည်!\n\n- %s" 32 | "ဘီးစီးဘောက်စ်ထည့်သွင်းခြင်းက အမြစ်ခွင့်ပြုချက်မရှိပါက အလုပ်မလုပ်ပါ! ပယ်ဖျက်ခြင်း။" 33 | "နောက်သို့ထပ်နှိပ်ပြီးပိတ်!" 34 | "ပြန်စ" 35 | "ဖျက်" 36 | "ဘီးစီးဘောက်စ် v%s ကို သင့်ဖုန်းမှ‌အောင်မြင်စွာဖျက်ပြီးပါပြီ. စနစ်ကိုပြန်စချင်လား။?" 37 | "ဘီးစီးဘောက်စ်(ဗားရှင်း%s) အက်ပလက်စ် များကို '/system/xbin' မှဖျက်ဖို့သေချာလား?\n\nမှတ်ထားပါ: သင့်ဖုန်းမှဒီအက်ပ်ကထည့်သွင်းထားတဲ့ အက်ပလက်စ်တွေကိုပဲ ဖျက်မှာပါ!" 38 | "ဘီးစီးဘောက်စ်ဖျက်နေသည် ဗားရှင်း%s" 39 | "မှတ်တမ်းသိမ်းခြင်း" 40 | "ထည့်သွင်း မှတ်တမ်းဖိုင်က '%s' အဖြစ် ထုတ်ပြီး။!" 41 | "မျှဝေ" 42 | "ဘီးစီးဘောက်စ်အင်စတောလာ %s ကို https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller မှရယူပါ။" 43 | "ကုဒ်ရင်းမြစ်" 44 | "အက်နိုလက်ဂျက်\ယူ၂၆၆၅ ကိုလှူပါ။" 45 | "ဖန်တီးသူကိုကူညီပါ!" 46 | "ဒီတူးလ်ကိုအခမဲ့ဖြစ်အောင်ဖန်တီးထားသူရဲ့ ကြိုးစားအားထုတ်မှုကို သင်အသိအမှတ်ပြုချင်လျှင်၊ ‌အောက်ဖော်ပြပါ ရွေးချယ်မှုများထဲမှ တစ်ခုကိုနှိပ်ပြီး လှူဒါန်းမှူအသေးစားလေး‌ပြုလုပ်ပေးပါနော်။!" 47 | "ညစာလေးဝယ်ကျွေးပါ။" 48 | "တစ်နပ်စာဝယ်ကျွေးပါ။" 49 | "ကော်ဖီတိုက်ပါ။" 50 | "သင်ဒီလှူဒါန်းမှုနဲ့ဖွံ့ဖြိုးစေခြင်းကို အစထဲကပြုလုပ်ပြီးပါပြီ။!" 51 | "သင့်‌အထောက်အပံ့ကိုအထူးကျေးဇူးတင်ရှိပါတယ်\u2665 \nအဲ့ဒါကကျွန်ုပ်ရဲ့ လုပ်ငန်းများရှေ့ဆက်ဖို့ရာ အလွန်ခွန်အားဖြစ်စေပါတယ်။!" 52 | "ငွေပေးချေမှုပြန်ကြိုးစားပေးပါ။!" 53 | "ထောက်ပံ့အဖွဲ့" 54 | "မြှင့်တင်" 55 | "ဘီးစီးဘောက်စ်မြှင့်လို့ရပြီ။!" 56 | "ဂုဏ်ယူပါတယ်!သင်မြှင့်တင်ပြီးပါပြီ!" 57 | "ထောက့်ပံ့ခြင်းမရှိတဲ့ စနစ်ခွဲ!" 58 | "ဗားရှင်း" 59 | -------------------------------------------------------------------------------- /app/src/main/res/values-pl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | "O apliakcji" 4 | "Nie udało się połączyć z klientem Google Play Billing!" 5 | "Wersja BusyBox" 6 | "Anuluj" 7 | "Dzienniki zmian" 8 | "Autorzy" 9 | "Darowizny" 10 | "Kup aplikację Donation" 11 | "Ukryj" 12 | "Zainstaluj" 13 | "Zainstaluj BusyBox!" 14 | "Gratulacje! Najnowsza wersja BusyBox (v%s) dostępna w tej aplikacji jest już zainstalowana na Twoim urządzeniu!" 15 | "Czy na pewno chcesz zainstalować BusyBox %s?" 16 | "Niestety, instalacja BuyBox z tej aplikacji nie jest jeszcze dostępna dla Twojej architektury (%s)!" 17 | "Dostępna jest nowa aktualizacja! Czy chcesz zaktualizować BusyBox do v%s?" 18 | "Niestety instalator BusyBox nie może zapisać apletów BusyBox w katalogu '/system/xbin' Twojego urządzenia!" 19 | "Instalacja BusyBox zakończona! Czy chcesz zrestartować swoje urządzenie?" 20 | "Instalowanie BusyBox v%s" 21 | "Języki (%s)" 22 | "Domyślny" 23 | "Lista apletów" 24 | "W tym pakiecie znajdują się następujące aplety! 25 | 26 | - %s" 27 | "Instalacja BusyBox nie zadziała bez Root Access! Przerywanie" 28 | "Naciśnij ponownie, aby wyjść!" 29 | "Restart" 30 | "Usuń" 31 | "BusyBox v%s został pomyślnie usunięty z urządzenia. Czy chcesz je zrestartować?" 32 | "Czy na pewno chcesz usunąć aplety BusyBox (v%s) z '/system/xbin'? 33 | 34 | Uwaga: Spowoduje to usunięcie tylko apletów zainstalowanych przez tę aplikację na Twoim urządzeniu!" 35 | "Usuwanie BusyBox v%s" 36 | "Zapisz dziennik" 37 | "Plik dziennika instalacji jest eksportowany jako '%s'!" 38 | "Udostępnij" 39 | "Pobierz BusyBox Installer %s z https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller" 40 | "Kod źródłowy" 41 | "Darowizna uznana \u2665" 42 | "Wesprzyj programistę!" 43 | "Jeśli chcesz docenić wysiłek programisty, aby udostępnić to narzędzie całkowicie za darmo, rozważ przesłanie niewielkiej darowizny, klikając jedną z poniższych opcji!" 44 | "Kup mi obiad" 45 | "Kup mi posiłek" 46 | "Kup mi kawę" 47 | "Już wcześniej wspierałeś rozwój tego projektu!" 48 | "Bardzo dziękuję za wsparcie \u2665 49 | Bardzo mnie to zmotywuje do aktywnej kontynuacji moich projektów!" 50 | "Spróbuj kupić ponownie!" 51 | "Grupa wsparcia" 52 | "Aktualizacja" 53 | "Dostępna aktualizacja BusyBox!" 54 | "Gratulacje! Jesteś na bieżąco!" 55 | "Nieobsługiwana architektura!" 56 | "Wersja" 57 | -------------------------------------------------------------------------------- /app/src/main/res/values-pt-rBR/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Sobre 4 | Cancelar 5 | Créditos 6 | Doações 7 | Esconder 8 | Instalar 9 | Instalar BusyBox! 10 | Parabéns! A versão mais recente do BusyBox (v%s) disponível neste aplicativo já está instalada no seu dispositivo! 11 | Deseja realmente instalar o BusyBox %s? 12 | Infelizmente, a instalação do BuyBox deste aplicativo ainda não está disponível para sua arquitetura (%s)! 13 | Nova atualização disponível! Deseja atualizar o BusyBox para v%s? 14 | Infelizmente, o instalador do BusyBox não conseguiu gravar os applets BusyBox na pasta \'/system/xbin\' do seu dispositivo! 15 | Instalação do BusyBox foi concluída! Deseja reiniciar o seu dispositivo? 16 | Instalando o BusyBox v%s 17 | Idioma (%s) 18 | Padrão 19 | A instalação do BusyBox não funcionará sem o Acesso Root! Abortando 20 | Pressione voltar novamente para sair! 21 | Reiniciar 22 | Salvar o Registro 23 | Compartilhar 24 | Obtenha o Instalador do BusyBox %s no https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller 25 | Código-fonte 26 | Grupo de suporte 27 | Atualizar 28 | Atualização do BusyBox disponível! 29 | Parabéns! Você está atualizado! 30 | Arquitetura não suportada! 31 | Removendo BusyBox v%s 32 | Tem certeza de que remove os applets do BusyBox (v%s) de \'/system /xbin\'?\n\nNota: isso removerá apenas os applets instalados por este aplicativo no seu dispositivo! 33 | O BusyBox v%s foi removido com sucesso do seu dispositivo. Você quer reiniciar? 34 | Remover 35 | Os seguintes applets estão incluídos neste pacote! - %s 36 | Lista de Applets 37 | Apoie o Desenvolvedor! 38 | Comprar o App de Doação 39 | Versão do BusyBox 40 | O arquivo de log de instalação foi exportado como \'%s\'! 41 | -------------------------------------------------------------------------------- /app/src/main/res/values-ru/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | О программе 5 | Отмена 6 | Благодарности 7 | Спрятать 8 | устанавливать 9 | Установите BusyBox! 10 | Congrats! Последняя версия BusyBox (v%s), доступная в этом приложении, уже установлена на вашем устройстве! 11 | Вы уверены, что хотите установить BusyBox%s? 12 | К сожалению, установка BuyBox из этого приложения еще не доступна для вашей архитектуры (%s)! 13 | Доступно новое обновление! Хотите обновить BusyBox до v%s? 14 | К сожалению, установщику BusyBox не удалось записать апплеты BusyBox в папку вашего устройства\'s \'/system/xbin\'! 15 | Установка BusyBox завершена! Хотите перезагрузить устройство? 16 | Установка BusyBox v%s 17 | Язык (%s) 18 | По умолчанию 19 | Список апплетов 20 | BusyBox v%s успешно удален с вашего устройства. Вы хотите перезагрузить компьютер? 21 | Вы уверены, что удалили апплеты BusyBox (v%s) из \'/system/xbin\'?\n\nПожалуйста, обратите внимание: он удалит только те апплеты, которые установлены этим приложением на вашем устройстве! 22 | Удаление BusyBox v%s 23 | перезагружать 24 | удалять 25 | Поделиться 26 | Загрузите установщик BusyBox%s с https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller 27 | Исходный код 28 | Группа поддержки 29 | Обновить 30 | Доступно обновление BusyBox! 31 | Congrats! Вы в курсе! 32 | Неподдерживаемая архитектура! 33 | -------------------------------------------------------------------------------- /app/src/main/res/values-tr-rTR/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | "Hakkında" 4 | "Google Play Faturalandırma istemcisine bağlanılamadı!" 5 | "BusyBox Sürümü" 6 | "Vazgeç" 7 | "Değişiklik Günlüğü" 8 | "Katkıda Bulunanlar" 9 | "Bağışlar" 10 | "Bağış Uygulamasını Satın Al" 11 | "Gizle" 12 | "Yükle" 13 | "BusyBox Yükle!" 14 | "Tebrikler! Bu uygulamanın desteklediği en son sürüm BusyBox (v%s) zaten cihazınızda yüklü!" 15 | "BusyBox %s yüklemek istediğinize emin misiniz?" 16 | "Ne yazık ki bu uygulama cihazınızın mimarisi (%s) için BusyBox yükleyemiyor!" 17 | "Güncelleme mevcut! BusyBox'ı v%s sürümüne güncellemek ister misiniz?" 18 | "Ne yazık ki BusyBox yükleyicisi BusyBox uygulamacıklarını cihazınızın '/system/xbin' klasörüne yükleyemedi!" 19 | "BusyBox yüklendi! Cihazınızı yeniden başlatmak ister misiniz?" 20 | "BusyBox v%s yükleniyor" 21 | "Dil (%s)" 22 | "Habeşistanca" 23 | "Yunanca" 24 | "İngilizce" 25 | "Varsayılan" 26 | "Endonezyaca" 27 | "Korece" 28 | "Portegizce" 29 | "Rusça" 30 | "Uygulamacık Listesi" 31 | "Aşağıdaki uygulamacıklar bu pakete dahildir!\n\n- %s" 32 | "BusyBox kurulumu Depolamaya Root Erişimi olmadan çalışamaz! İptal Ediliyor" 33 | "Çıkmak için tekrar geri tuşuna basınız!" 34 | "Yeniden Başlat" 35 | "Kaldır" 36 | "BusyBox v%s başarılı bir şekilde cihazınızdan kaldırıldı. Yeniden başlatmak ister misiniz?" 37 | "'/system/xbin'den BusyBox (v%s) uygulamacıklarını kaldırmak istediğinizden emin misiniz?\n\nUnutmayın: Sadece bu uygulama tarafından cihazınıza yüklenen uygulamacıkları kaldırır!" 38 | "BusyBox v%s kaldırılıyor" 39 | "Günlüğü Kaydet" 40 | "Kurulum günlük dosyası '%s' olarak dışa aktarıldı!" 41 | "Paylaş" 42 | "BusyBox Installer %s buradan yükleyin: https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller" 43 | "Kaynak Kodu" 44 | "Bağış Onaylandı \u2665" 45 | "Geliştiriciye Destek Ol!" 46 | "Geliştiricinin bu aracı ücretsiz bir şekilde sunmak için gösterdiği bu çabasını takdir etmek isterseniz, aşağıdaki butonlardan birine tıklayarak küçük bir bağışta bulunabilirsiniz!" 47 | "Bana bir akşam yemeği ısmarla" 48 | "Bana bir yemek al" 49 | "Bana bir kahve al" 50 | "Zaten daha önce bununla geliştirmeye destek olmuştun!" 51 | "Desteğin için çok teşekkür ederim \u2665 \nBu beni projelerime devam etmek için oldukça motive edecek!" 52 | "Lütfen tekrar satın almayı deneyin!" 53 | "Destek Grubu" 54 | "Güncelle" 55 | "BusyBox Güncellemesi Mevcut!" 56 | "Tebrikler! Güncelsiniz!" 57 | "Desteklenmeyen Mimari!" 58 | "Sürüm" 59 | -------------------------------------------------------------------------------- /app/src/main/res/values-vi/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | "Về chúng tôi" 4 | "Không kết nối được với Google Play Billing !" 5 | "Phiên bản BusyBox" 6 | "Hủy" 7 | "Nhật ký các thay đổi" 8 | "Danh sách đóng góp" 9 | "Đóng góp" 10 | "Ủng hộ bằng cách mua ứng dụng" 11 | "Ẩn" 12 | "Cài đặt" 13 | "Cài đặt BusyBox" 14 | "Xin chúc mừng ! Phiên bản mới nhất của BusyBox (v%s) có sẵn trên ứng dụng này đã được cài đặt trên thiết bị của bạn !" 15 | "Bạn muốn cài đặt BusyBox %s chứ ?" 16 | "Rất tiếc,không thể cài đặt BusyBox trên nền tảng của bạn !" 17 | "Đã có bản cập nhật mới ! Bạn có muốn nâng cấp BusyBox đến v%s ?" 18 | "Rất tiếc,trình cài đặt BusyBox không thể cài đặt các Applets BusyBox vào thư mục '/system/xbin' trên thiết bị của bạn !" 19 | "Cài đặt BusyBox thành công ! Bạn có muốn khởi động lại điện thoại ?" 20 | "Cài đặt BusyBox v%s" 21 | "Ngôn ngữ" 22 | "Mặc định" 23 | "Danh sách Applets" 24 | "Các Applets sau đang có trong bản cài đặt này ! 25 | 26 | - %s" 27 | "Không thể cài đặt BusyBox trên điện thoại chưa root !" 28 | "Nhấn quay về lần nữa để thoát ứng dụng !" 29 | "Khởi động lại" 30 | "Xóa" 31 | "BusyBox v%s đã được xóa thành công khỏi điện thoại của bạn.Bạn có muốn khởi động lại điện thoại ?" 32 | "Bạn có chắc là muốn xóa Applets trên BusyBox (v%s) khỏi '/system/xbin' ? 33 | 34 | Lưu ý: Nó sẽ chỉ xóa các Applet được ứng dụng này cài đặt trên điện thoại của bạn !" 35 | "Đang xóa BusyBox v%s" 36 | "Lưu nhật ký" 37 | "Tệp nhật ký cài đặt được xuất dưới dạng '%s' !" 38 | "Chia sẻ" 39 | "Cài đặt BusyBox Installer %s từ https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller" 40 | "Mã nguồn" 41 | "Danh sách đóng góp \u2665" 42 | "Hỗ trợ nhà phát triển !" 43 | "Nếu bạn đánh giá cao nỗ lực của nhà phát triển trong việc cung cấp ứng dụng miễn phí này,vui lòng cân nhắc gửi một khoản đóng góp nhỏ bằng cách nhấp vào một trong số các tùy chọn được cung cấp bên dưới !" 44 | "Mua cho tôi một ly Bia " 45 | "Mua cho tôi một miếng Thịt" 46 | "Mua cho tôi một ly Cà phê" 47 | "Bạn đã đóng góp cho nhà phát triển với vật phẩm này !" 48 | "Cảm ơn sự đóng góp của bạn rất nhiều \u2665 49 | Nó sẽ giúp tôi rất nhiều để tiếp tục phát triển các dự án của mình !" 50 | "Vui lòng thanh toán lại !" 51 | "Nhóm hỗ trợ" 52 | "Nâng cấp" 53 | "Đã có bản cập nhật BusyBox mới !" 54 | "Chúc mừng ! Bạn đang dùng phiên bản mới nhất !" 55 | "Nền tảng kiến trúc này không được hỗ trợ !" 56 | "Phiên bản" 57 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rTW/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | "關於" 4 | "計費_客戶_端斷開連接" 5 | "BusyBox 版本" 6 | "取消" 7 | "變更日誌" 8 | "學分" 9 | "捐款" 10 | "購買捐贈應用程序" 11 | "隱藏" 12 | "安裝" 13 | "安裝 BusyBox!" 14 | "恭喜! 此應用程序上可用的最新版本的 BusyBox (v%s) 已安裝在您的設備上!" 15 | "您確定要安裝 BusyBox %s 嗎?" 16 | "不幸的是,您的架構 (%s) 尚無法從該應用程序安裝 BuyBox!" 17 | "有新的更新可用! 是否要將 BusyBox 更新為 v%s?" 18 | "不幸的是,BusyBox 安裝程序無法在您設備的“/system/xbin”文件夾中編寫 BusyBox 小程序!" 19 | "BusyBox 安裝完成! 您要重新啟動設備嗎?" 20 | "安裝 BusyBox v%s" 21 | "語言 (%s)" 22 | "語言上午" 23 | "語言" 24 | "語言英語" 25 | "默認語言" 26 | "語言輸入" 27 | "語言 ko" 28 | "語言點" 29 | "語言如" 30 | "列表_程序" 31 | "列出小程序摘要" 32 | "沒有根消息" 33 | "按_背部" 34 | "重啟" 35 | "消除" 36 | "刪除busybox完成" 37 | "刪除busybox消息" 38 | "刪除busybox" 39 | "保存日誌" 40 | "安裝日誌文件導出為“%s”!" 41 | "分享" 42 | "從 https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller 獲取 BusyBox 安裝程序 %s" 43 | "源代碼" 44 | "捐贈確認\u2665" 45 | "支持開發商!" 46 | "如果您想感謝開發人員為完全免費提供此工具所做的努力,請考慮通過單擊以下提供的選項中的一個來發送小額捐款!" 47 | "給我買晚飯" 48 | "給我買飯" 49 | "給我買杯咖啡" 50 | "您之前已經支持此項目的開發!" 51 | "非常感謝您的支持\u2665 52 | 這將極大地激勵我繼續我的項目更積極!" 53 | "請再次嘗試購買!" 54 | "支援團隊" 55 | "更新" 56 | "BusyBox 更新可用!" 57 | "恭喜! 你是最新的!" 58 | "不支持的架構!" 59 | "版本" 60 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #4285f4 4 | #000000 5 | #FFFFFF 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | BusyBox Installer 3 | 4 | About 5 | Failed to connect with Google Play Billing client! 6 | BusyBox Version 7 | Cancel 8 | Change-logs 9 | Copyright: © %s 10 | Credits 11 | Donations 12 | Buy Donation App 13 | Hide 14 | Install 15 | Install BusyBox! 16 | Congrats! The latest version of BusyBox (v%s) available on this app is already installed on your device! 17 | Are you sure to install BusyBox %s? 18 | Unfortunately, BuyBox installation from this app is not yet available for your architecture (%s)! 19 | New update available! Do you want to update BusyBox to v%s? 20 | Unfortunately, BusyBox installer is failed to write BusyBox applets on your device\'s \'/system/xbin\' folder! 21 | BusyBox installation Finished! Do you want to reboot your device? 22 | Trying system-less installation 23 | Installing BusyBox v%s 24 | Language (%s) 25 | አማርኛ 26 | العربية 27 | čeština 28 | Default 29 | Ελληνικά 30 | Español 31 | English 32 | français 33 | Hrvatski 34 | bahasa Indonesia 35 | 한국어 36 | ဗမာ 37 | Polski" 38 | Português 39 | русский 40 | Türkçe 41 | Tiếng Việt 42 | Applets List 43 | The following applets are included in this package!\n\n - %s 44 | BusyBox installation won\'t work without Root Access! Aborting 45 | Press back again to exit! 46 | Reboot 47 | Remove 48 | Remove BusyBox! 49 | BusyBox v%s is successfully removed from your device. Do you wan\'t to reboot? 50 | Are you sure to remove BusyBox (v%s) applets from \'/system/xbin\'?\n\nPlease Note: It will only remove the applets installed by this app on your device! 51 | Removing BusyBox v%s 52 | Save Log 53 | Installation log file is exported as \'%s\'! 54 | Share 55 | Get BusyBox Installer %s from https://play.google.com/store/apps/details?id=com.smartpack.busyboxinstaller 56 | Source Code 57 | Donation Acknowledged \u2665 58 | Support Developer! 59 | If you like to appreciate the efforts of the developer to provide this tool entirely free, please consider sending a small donation by clicking one among the below-provided options! Buying any of this product will award you a supporter badge here. 60 | Buy me a Dinner 61 | Buy me a Meal 62 | Thank you very much for your support! 63 | Buy me a Coffee 64 | You\'re already supported the development with this item before! 65 | Thank you very much for your support \u2665\nIt will motivate me a lot to continue my projects more active! Moreover, you\'ll receive a supporter badge on the top of this page. 66 | Please try purchasing again! 67 | Support Group 68 | Translations 69 | Update 70 | BusyBox Update Available! 71 | Congrats! You\'re Up-to-date! 72 | Unsupported Architecture! 73 | Version 74 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /app/src/play/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/play/java/com/smartpack/busyboxinstaller/utils/Billing.java: -------------------------------------------------------------------------------- 1 | package com.smartpack.busyboxinstaller.utils; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | 6 | import androidx.annotation.NonNull; 7 | 8 | /* 9 | * Created by sunilpaulmathew on March 29, 2021 10 | */ 11 | public class Billing { 12 | 13 | public static void launchDonationMenu(Context context) { 14 | Intent donations = new Intent(context, BillingActivity.class); 15 | context.startActivity(donations); 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /app/src/play/java/com/smartpack/busyboxinstaller/utils/BillingActivity.java: -------------------------------------------------------------------------------- 1 | package com.smartpack.busyboxinstaller.utils; 2 | 3 | import android.annotation.SuppressLint; 4 | import android.graphics.Color; 5 | import android.graphics.drawable.Drawable; 6 | import android.os.Bundle; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | 11 | import androidx.annotation.NonNull; 12 | import androidx.annotation.Nullable; 13 | import androidx.appcompat.app.AppCompatActivity; 14 | import androidx.appcompat.widget.AppCompatImageButton; 15 | import androidx.appcompat.widget.AppCompatImageView; 16 | import androidx.recyclerview.widget.LinearLayoutManager; 17 | import androidx.recyclerview.widget.RecyclerView; 18 | 19 | import com.android.billingclient.api.BillingClient; 20 | import com.android.billingclient.api.BillingClientStateListener; 21 | import com.android.billingclient.api.BillingFlowParams; 22 | import com.android.billingclient.api.BillingResult; 23 | import com.android.billingclient.api.ConsumeParams; 24 | import com.android.billingclient.api.ConsumeResponseListener; 25 | import com.android.billingclient.api.Purchase; 26 | import com.android.billingclient.api.SkuDetails; 27 | import com.android.billingclient.api.SkuDetailsParams; 28 | import com.google.android.material.card.MaterialCardView; 29 | import com.google.android.material.dialog.MaterialAlertDialogBuilder; 30 | import com.google.android.material.textview.MaterialTextView; 31 | import com.smartpack.busyboxinstaller.R; 32 | 33 | import java.io.Serializable; 34 | import java.util.ArrayList; 35 | import java.util.List; 36 | 37 | /* 38 | * Created by sunilpaulmathew on November 16, 2020 39 | */ 40 | 41 | public class BillingActivity extends AppCompatActivity { 42 | 43 | private final ArrayList mData = new ArrayList<>(); 44 | private BillingClient mBillingClient; 45 | private boolean mClientInitialized = false; 46 | private final List mSkuList = new ArrayList<>(); 47 | 48 | @SuppressLint("UseCompatLoadingForDrawables") 49 | @Override 50 | protected void onCreate(@Nullable Bundle savedInstanceState) { 51 | super.onCreate(savedInstanceState); 52 | setContentView(R.layout.activity_billing); 53 | 54 | AppCompatImageButton mBack = findViewById(R.id.back_button); 55 | AppCompatImageButton mSupporterIcon = findViewById(R.id.supporter_button); 56 | MaterialTextView mSupporterMessage = findViewById(R.id.supporter_message); 57 | MaterialTextView mCancel = findViewById(R.id.cancel_button); 58 | 59 | if (Utils.isSupporter(this)) { 60 | mSupporterIcon.setVisibility(View.VISIBLE); 61 | mSupporterMessage.setText(getString(R.string.support_status_message)); 62 | } 63 | 64 | mData.add(new RecycleViewItem(getString(R.string.donation_app), getResources().getDrawable(R.drawable.ic_donation_app))); 65 | mData.add(new RecycleViewItem(getString(R.string.support_coffee), getResources().getDrawable(R.drawable.ic_coffee))); 66 | mData.add(new RecycleViewItem(getString(R.string.support_meal), getResources().getDrawable(R.drawable.ic_meal))); 67 | mData.add(new RecycleViewItem(getString(R.string.support_dinner), getResources().getDrawable(R.drawable.ic_dinner))); 68 | 69 | RecyclerView mRecyclerView = findViewById(R.id.recycler_view); 70 | mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 71 | RecycleViewAdapter mRecycleViewAdapter = new RecycleViewAdapter(mData); 72 | mRecyclerView.setAdapter(mRecycleViewAdapter); 73 | mRecyclerView.setVisibility(View.VISIBLE); 74 | 75 | mRecycleViewAdapter.setOnItemClickListener((position, v) -> { 76 | if (position == 0) { 77 | buyDonationApp(); 78 | } else if (position == 1) { 79 | buyMeACoffee(); 80 | } else if (position == 2) { 81 | buyMeAMeal(); 82 | } else if (position == 3) { 83 | buyMeADinner(); 84 | } 85 | }); 86 | 87 | mBack.setOnClickListener(v -> super.onBackPressed()); 88 | mCancel.setOnClickListener(v -> super.onBackPressed()); 89 | 90 | mBillingClient = BillingClient.newBuilder(BillingActivity.this).enablePendingPurchases().setListener((billingResult, list) -> { 91 | if (list != null && billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { 92 | for (Purchase purchase : list) { 93 | handlePurchases(purchase); 94 | } 95 | } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.USER_CANCELED) { 96 | Utils.snackbar(findViewById(android.R.id.content), getString(R.string.support_retry_message)); 97 | } else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) { 98 | Utils.snackbar(findViewById(android.R.id.content), getString(R.string.support_already_received_message)); 99 | } 100 | }).build(); 101 | 102 | mBillingClient.startConnection(new BillingClientStateListener() { 103 | @Override 104 | public void onBillingSetupFinished(@NonNull BillingResult billingResult) { 105 | if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { 106 | mClientInitialized = true; 107 | } 108 | } 109 | 110 | @Override 111 | public void onBillingServiceDisconnected() { 112 | Utils.snackbar(findViewById(android.R.id.content), getString(R.string.billing_client_disconnected)); 113 | } 114 | }); 115 | } 116 | 117 | private void buyDonationApp() { 118 | if (!Utils.isNotDonated(this)) { 119 | Utils.snackbar(findViewById(android.R.id.content), getString(R.string.support_already_received_message)); 120 | return; 121 | } 122 | Utils.launchUrl("https://play.google.com/store/apps/details?id=com.smartpack.donate", this); 123 | } 124 | 125 | private void buyMeACoffee() { 126 | if (!mClientInitialized) { 127 | Utils.snackbar(findViewById(android.R.id.content), getString(R.string.billing_client_disconnected)); 128 | return; 129 | } 130 | mSkuList.clear(); 131 | mSkuList.add("donation_coffee"); 132 | final SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); 133 | params.setSkusList(mSkuList).setType(BillingClient.SkuType.INAPP); 134 | 135 | mBillingClient.querySkuDetailsAsync(params.build(), (billingResult, list) -> { 136 | if (list != null && billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { 137 | for (final SkuDetails skuDetails : list) { 138 | 139 | BillingFlowParams flowParams = BillingFlowParams.newBuilder() 140 | .setSkuDetails(skuDetails) 141 | .build(); 142 | 143 | mBillingClient.launchBillingFlow(BillingActivity.this, flowParams); 144 | 145 | } 146 | } 147 | }); 148 | } 149 | 150 | private void buyMeADinner() { 151 | if (!mClientInitialized) { 152 | Utils.snackbar(findViewById(android.R.id.content), getString(R.string.billing_client_disconnected)); 153 | return; 154 | } 155 | mSkuList.clear(); 156 | mSkuList.add("donation_dinner"); 157 | final SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); 158 | params.setSkusList(mSkuList).setType(BillingClient.SkuType.INAPP); 159 | 160 | mBillingClient.querySkuDetailsAsync(params.build(), (billingResult, list) -> { 161 | if (list != null && billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { 162 | for (final SkuDetails skuDetails : list) { 163 | 164 | BillingFlowParams flowParams = BillingFlowParams.newBuilder() 165 | .setSkuDetails(skuDetails) 166 | .build(); 167 | 168 | mBillingClient.launchBillingFlow(BillingActivity.this, flowParams); 169 | 170 | } 171 | } 172 | }); 173 | } 174 | 175 | private void buyMeAMeal() { 176 | if (!mClientInitialized) { 177 | Utils.snackbar(findViewById(android.R.id.content), getString(R.string.billing_client_disconnected)); 178 | return; 179 | } 180 | mSkuList.clear(); 181 | mSkuList.add("donation_meal"); 182 | final SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder(); 183 | params.setSkusList(mSkuList).setType(BillingClient.SkuType.INAPP); 184 | 185 | mBillingClient.querySkuDetailsAsync(params.build(), (billingResult, list) -> { 186 | if (list != null && billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) { 187 | for (final SkuDetails skuDetails : list) { 188 | 189 | BillingFlowParams flowParams = BillingFlowParams.newBuilder() 190 | .setSkuDetails(skuDetails) 191 | .build(); 192 | 193 | mBillingClient.launchBillingFlow(BillingActivity.this, flowParams); 194 | 195 | } 196 | } 197 | }); 198 | } 199 | 200 | private void handlePurchases(Purchase purchase) { 201 | try { 202 | if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) { 203 | if (purchase.getSkus().contains("donation_coffee") || purchase.getSkus().contains("donation_meal") || purchase.getSkus().contains("donation_dinner")) { 204 | ConsumeParams consumeParams = ConsumeParams.newBuilder() 205 | .setPurchaseToken(purchase.getPurchaseToken()) 206 | .build(); 207 | 208 | ConsumeResponseListener mConsumeResponseListener = (billingResult, s) -> Utils.snackbar(findViewById(android.R.id.content), getString(R.string.support_acknowledged)); 209 | 210 | mBillingClient.consumeAsync(consumeParams, mConsumeResponseListener); 211 | new MaterialAlertDialogBuilder(this) 212 | .setMessage(getString(R.string.support_received_message)) 213 | .setPositiveButton(getString(R.string.cancel), (dialogInterface, i) -> { 214 | }).show(); 215 | Utils.saveBoolean("support_received", true, this); 216 | } 217 | } 218 | } catch (Exception ignored) {} 219 | } 220 | 221 | private static class RecycleViewAdapter extends RecyclerView.Adapter { 222 | 223 | private ArrayList data; 224 | 225 | private static ClickListener clickListener; 226 | 227 | public RecycleViewAdapter(ArrayList data) { 228 | this.data = data; 229 | } 230 | 231 | @NonNull 232 | @Override 233 | public RecycleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 234 | View rowItem = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycle_view_donate, parent, false); 235 | return new ViewHolder(rowItem); 236 | } 237 | 238 | @Override 239 | public void onBindViewHolder(@NonNull RecycleViewAdapter.ViewHolder holder, int position) { 240 | try { 241 | if (!Utils.isDarkTheme(holder.mCard.getContext())) { 242 | holder.mCard.setBackgroundColor(Color.LTGRAY); 243 | } 244 | holder.mTitle.setText(this.data.get(position).getTitle()); 245 | holder.mIcon.setImageDrawable(this.data.get(position).getIcon()); 246 | } catch (NullPointerException ignored) {} 247 | } 248 | 249 | @Override 250 | public int getItemCount() { 251 | return this.data.size(); 252 | } 253 | 254 | public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 255 | private AppCompatImageView mIcon; 256 | private MaterialCardView mCard; 257 | private MaterialTextView mTitle; 258 | 259 | public ViewHolder(View view) { 260 | super(view); 261 | view.setOnClickListener(this); 262 | this.mCard = view.findViewById(R.id.card); 263 | this.mIcon = view.findViewById(R.id.icon); 264 | this.mTitle = view.findViewById(R.id.title); 265 | } 266 | 267 | @Override 268 | public void onClick(View view) { 269 | clickListener.onItemClick(getAdapterPosition(), view); 270 | } 271 | } 272 | 273 | public void setOnItemClickListener(ClickListener clickListener) { 274 | RecycleViewAdapter.clickListener = clickListener; 275 | } 276 | 277 | public interface ClickListener { 278 | void onItemClick(int position, View v); 279 | } 280 | 281 | } 282 | 283 | private static class RecycleViewItem implements Serializable { 284 | private String mTitle; 285 | private Drawable mIcon; 286 | 287 | public RecycleViewItem(String title, Drawable icon) { 288 | this.mTitle = title; 289 | this.mIcon = icon; 290 | } 291 | 292 | public String getTitle() { 293 | return mTitle; 294 | } 295 | 296 | public Drawable getIcon() { 297 | return mIcon; 298 | } 299 | } 300 | 301 | } -------------------------------------------------------------------------------- /banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/banner.png -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | google() 6 | mavenCentral() 7 | 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:7.1.1' 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | maven { 19 | url 'https://jitpack.io' 20 | } 21 | } 22 | } 23 | 24 | task clean(type: Delete) { 25 | delete rootProject.buildDir 26 | } -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/18.txt: -------------------------------------------------------------------------------- 1 | * Implemented system-less installation mode if normal mode is unavailable (experimental). 2 | * App now targets targets SDK 31. 3 | * Implemented crash reporting. 4 | * Added French, Polish, and Vietnamese translations. 5 | * Updated build tools and dependencies. 6 | * Miscellaneous changes. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | BusyBox Installer is a one-click BusyBox installation utility for various android architectures (ARM/ARM64 and x86). 2 | 3 | WARNING: I Am NOT Responsible for any Damages on Your Device! 4 | 5 | BusyBox Installer requires ROOT Access. 6 | 7 | Features 8 | 9 | * An easy BusyBox installation for ARM/ARM64 and x86. 10 | * Removal of BusyBox applets (only) installed by this app. 11 | * Show applets list (only) installed by this app. 12 | * Dark and Light themes (depends on system theme). 13 | 14 | Translations 15 | 16 | Please help me to translate this application via POEditor. You may also translate after downloading the original language string available GitHub. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/featureGraphic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/fastlane/metadata/android/en-US/images/featureGraphic.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/fastlane/metadata/android/en-US/images/phoneScreenshots/1.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/fastlane/metadata/android/en-US/images/phoneScreenshots/2.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/fastlane/metadata/android/en-US/images/phoneScreenshots/3.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/fastlane/metadata/android/en-US/images/phoneScreenshots/4.jpg -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | A one-click BusyBox installation utility for Android! -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | #AndroidX 4 | android.enableJetifier=true 5 | android.useAndroidX=true 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SmartPack/BusyBox-Installer/ba4204960966f910cb8a9eb806961137e278ccfa/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Attempt to set APP_HOME 10 | # Resolve links: $0 may be a link 11 | PRG="$0" 12 | # Need this for relative symlinks. 13 | while [ -h "$PRG" ] ; do 14 | ls=`ls -ld "$PRG"` 15 | link=`expr "$ls" : '.*-> \(.*\)$'` 16 | if expr "$link" : '/.*' > /dev/null; then 17 | PRG="$link" 18 | else 19 | PRG=`dirname "$PRG"`"/$link" 20 | fi 21 | done 22 | SAVED="`pwd`" 23 | cd "`dirname \"$PRG\"`/" >/dev/null 24 | APP_HOME="`pwd -P`" 25 | cd "$SAVED" >/dev/null 26 | 27 | APP_NAME="Gradle" 28 | APP_BASE_NAME=`basename "$0"` 29 | 30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 31 | DEFAULT_JVM_OPTS="" 32 | 33 | # Use the maximum available, or set MAX_FD != -1 to use that value. 34 | MAX_FD="maximum" 35 | 36 | warn () { 37 | echo "$*" 38 | } 39 | 40 | die () { 41 | echo 42 | echo "$*" 43 | echo 44 | exit 1 45 | } 46 | 47 | # OS specific support (must be 'true' or 'false'). 48 | cygwin=false 49 | msys=false 50 | darwin=false 51 | nonstop=false 52 | case "`uname`" in 53 | CYGWIN* ) 54 | cygwin=true 55 | ;; 56 | Darwin* ) 57 | darwin=true 58 | ;; 59 | MINGW* ) 60 | msys=true 61 | ;; 62 | NONSTOP* ) 63 | nonstop=true 64 | ;; 65 | esac 66 | 67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 68 | 69 | # Determine the Java command to use to start the JVM. 70 | if [ -n "$JAVA_HOME" ] ; then 71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 72 | # IBM's JDK on AIX uses strange locations for the executables 73 | JAVACMD="$JAVA_HOME/jre/sh/java" 74 | else 75 | JAVACMD="$JAVA_HOME/bin/java" 76 | fi 77 | if [ ! -x "$JAVACMD" ] ; then 78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 79 | 80 | Please set the JAVA_HOME variable in your environment to match the 81 | location of your Java installation." 82 | fi 83 | else 84 | JAVACMD="java" 85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 86 | 87 | Please set the JAVA_HOME variable in your environment to match the 88 | location of your Java installation." 89 | fi 90 | 91 | # Increase the maximum file descriptors if we can. 92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 93 | MAX_FD_LIMIT=`ulimit -H -n` 94 | if [ $? -eq 0 ] ; then 95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 96 | MAX_FD="$MAX_FD_LIMIT" 97 | fi 98 | ulimit -n $MAX_FD 99 | if [ $? -ne 0 ] ; then 100 | warn "Could not set maximum file descriptor limit: $MAX_FD" 101 | fi 102 | else 103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 104 | fi 105 | fi 106 | 107 | # For Darwin, add options to specify how the application appears in the dock 108 | if $darwin; then 109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 110 | fi 111 | 112 | # For Cygwin, switch paths to Windows format before running java 113 | if $cygwin ; then 114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 116 | JAVACMD=`cygpath --unix "$JAVACMD"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Escape application args 158 | save () { 159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 160 | echo " " 161 | } 162 | APP_ARGS=$(save "$@") 163 | 164 | # Collect all arguments for the java command, following the shell quoting and substitution rules 165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 166 | 167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 169 | cd "$(dirname "$0")" 170 | fi 171 | 172 | exec "$JAVACMD" "$@" 173 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name='BusyBox Installer' 3 | --------------------------------------------------------------------------------