mirror of
https://github.com/revanced/revanced-manager
synced 2024-05-14 13:56:57 +02:00
feat: add Patcher API.
This commit is contained in:
parent
57b932fd23
commit
fc06f8d571
103
.vscode/tasks.json
vendored
Normal file
103
.vscode/tasks.json
vendored
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
{
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"label": "Build (Serializer)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "flutter packages pub run build_runner build --delete-conflicting-outputs",
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Build (Android)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "flutter build apk",
|
||||||
|
"problemMatcher": [],
|
||||||
|
"group": {
|
||||||
|
"kind": "build",
|
||||||
|
"isDefault": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Install (Android)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "adb install build\\app\\outputs\\flutter-apk\\app-release.apk",
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Clean (Flutter)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "flutter clean && flutter pub get",
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Clean (Serializer)",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "flutter packages pub run build_runner clean",
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Build all (Android)",
|
||||||
|
"dependsOrder": "sequence",
|
||||||
|
"dependsOn": [
|
||||||
|
"Build (Serializer)",
|
||||||
|
"Build (Android)"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Clean all",
|
||||||
|
"dependsOrder": "sequence",
|
||||||
|
"dependsOn": [
|
||||||
|
"Clean (Flutter)",
|
||||||
|
"Clean (Serializer)"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Clean all & Build all (Android)",
|
||||||
|
"dependsOrder": "sequence",
|
||||||
|
"dependsOn": [
|
||||||
|
"Clean all",
|
||||||
|
"Build all (Android)"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Clean all & Install (Android)",
|
||||||
|
"dependsOrder": "sequence",
|
||||||
|
"dependsOn": [
|
||||||
|
"Clean all",
|
||||||
|
"Build all (Android)",
|
||||||
|
"Install (Android)",
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Build & Install (Android)",
|
||||||
|
"dependsOrder": "sequence",
|
||||||
|
"dependsOn": [
|
||||||
|
"Build (Android)",
|
||||||
|
"Install (Android)"
|
||||||
|
],
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Validate dependencies",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "flutter pub pub run dependency_validator",
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Show upgradable dependencies",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "flutter pub outdated",
|
||||||
|
"problemMatcher": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Validate translations",
|
||||||
|
"type": "shell",
|
||||||
|
"command": "flutter pub run flutter_i18n diff en.json pt.json",
|
||||||
|
"problemMatcher": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -43,10 +43,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
|
||||||
applicationId "app.revanced.revanced_manager_flutter"
|
applicationId "app.revanced.revanced_manager_flutter"
|
||||||
// You can update the following values to match your application needs.
|
|
||||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration.
|
|
||||||
minSdkVersion flutter.minSdkVersion
|
minSdkVersion flutter.minSdkVersion
|
||||||
targetSdkVersion flutter.targetSdkVersion
|
targetSdkVersion flutter.targetSdkVersion
|
||||||
versionCode flutterVersionCode.toInteger()
|
versionCode flutterVersionCode.toInteger()
|
||||||
@ -55,8 +52,6 @@ android {
|
|||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
release {
|
release {
|
||||||
// TODO: Add your own signing config for the release build.
|
|
||||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
|
||||||
signingConfig signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -68,4 +63,7 @@ flutter {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||||
|
|
||||||
|
// ReVanced
|
||||||
|
implementation "app.revanced:revanced-patcher:3.3.1"
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="app.revanced.revanced_manager_flutter">
|
package="app.revanced.revanced_manager_flutter">
|
||||||
<!-- The INTERNET permission is required for development. Specifically,
|
|
||||||
the Flutter tool needs it to communicate with the running application
|
|
||||||
to allow setting breakpoints, to provide hot reload, etc.
|
|
||||||
-->
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
||||||
<application
|
<application
|
||||||
android:label="revanced_manager_flutter"
|
android:label="ReVanced Manager"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher"
|
android:icon="@mipmap/ic_launcher"
|
||||||
android:requestLegacyExternalStorage="true">
|
android:requestLegacyExternalStorage="true">
|
||||||
@ -17,10 +17,6 @@
|
|||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
android:hardwareAccelerated="true"
|
android:hardwareAccelerated="true"
|
||||||
android:windowSoftInputMode="adjustResize">
|
android:windowSoftInputMode="adjustResize">
|
||||||
<!-- Specifies an Android theme to apply to this Activity as soon as
|
|
||||||
the Android process has started. This theme is visible to the user
|
|
||||||
while the Flutter UI initializes. After that, this theme continues
|
|
||||||
to determine the Window background behind the Flutter UI. -->
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="io.flutter.embedding.android.NormalTheme"
|
android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
android:resource="@style/NormalTheme"
|
android:resource="@style/NormalTheme"
|
||||||
@ -30,8 +26,6 @@
|
|||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
<!-- Don't delete the meta-data below.
|
|
||||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2" />
|
android:value="2" />
|
||||||
|
@ -1,6 +1,87 @@
|
|||||||
package app.revanced.revanced_manager_flutter
|
package app.revanced.revanced_manager_flutter
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull
|
||||||
|
import app.revanced.patcher.data.Data
|
||||||
|
import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages
|
||||||
|
import app.revanced.patcher.extensions.PatchExtensions.description
|
||||||
|
import app.revanced.patcher.extensions.PatchExtensions.patchName
|
||||||
|
import app.revanced.patcher.extensions.PatchExtensions.version
|
||||||
|
import app.revanced.patcher.patch.Patch
|
||||||
|
import app.revanced.patcher.util.patch.implementation.DexPatchBundle
|
||||||
|
import dalvik.system.DexClassLoader
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
|
import io.flutter.embedding.engine.FlutterEngine
|
||||||
|
import io.flutter.plugin.common.MethodChannel
|
||||||
|
|
||||||
class MainActivity : FlutterActivity() {
|
class MainActivity : FlutterActivity() {
|
||||||
|
private val CHANNEL = "app.revanced/patcher"
|
||||||
|
private var patches = mutableListOf<Class<out Patch<Data>>>()
|
||||||
|
|
||||||
|
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
|
||||||
|
super.configureFlutterEngine(flutterEngine)
|
||||||
|
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
|
||||||
|
when (call.method) {
|
||||||
|
"loadPatches" -> {
|
||||||
|
val pathBundlesPaths = call.argument<List<String>>("pathBundlesPaths")
|
||||||
|
if (pathBundlesPaths != null) {
|
||||||
|
loadPatches(pathBundlesPaths)
|
||||||
|
result.success("OK")
|
||||||
|
} else {
|
||||||
|
result.notImplemented()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"getCompatiblePackages" -> result.success(getCompatiblePackages())
|
||||||
|
"getFilteredPatches" -> {
|
||||||
|
val targetPackage = call.argument<String>("targetPackage")
|
||||||
|
val targetVersion = call.argument<String>("targetVersion")
|
||||||
|
val ignoreVersion = call.argument<Boolean>("ignoreVersion")
|
||||||
|
if (targetPackage != null && targetVersion != null && ignoreVersion != null) {
|
||||||
|
result.success(getFilteredPatches(targetPackage, targetVersion, ignoreVersion))
|
||||||
|
} else {
|
||||||
|
result.notImplemented()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else -> result.notImplemented()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun loadPatches(pathBundlesPaths: List<String>) {
|
||||||
|
pathBundlesPaths.forEach { path ->
|
||||||
|
patches.addAll(DexPatchBundle(
|
||||||
|
path, DexClassLoader(
|
||||||
|
path,
|
||||||
|
context.cacheDir.path,
|
||||||
|
null,
|
||||||
|
javaClass.classLoader
|
||||||
|
)
|
||||||
|
).loadPatches())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getCompatiblePackages(): List<String> {
|
||||||
|
val filteredPackages = mutableListOf<String>()
|
||||||
|
patches.forEach patch@{ patch ->
|
||||||
|
patch.compatiblePackages?.forEach { pkg ->
|
||||||
|
filteredPackages.add(pkg.name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return filteredPackages.distinct()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun getFilteredPatches(targetPackage: String, targetVersion: String, ignoreVersion: Boolean): List<Map<String, String?>> {
|
||||||
|
val filteredPatches = mutableListOf<Map<String, String?>>()
|
||||||
|
patches.forEach patch@{ patch ->
|
||||||
|
patch.compatiblePackages?.forEach { pkg ->
|
||||||
|
if (pkg.name == targetPackage && (ignoreVersion || pkg.versions.isNotEmpty() || pkg.versions.contains(targetVersion))) {
|
||||||
|
var p = mutableMapOf<String, String?>();
|
||||||
|
p.put("name", patch.patchName);
|
||||||
|
p.put("version", patch.version);
|
||||||
|
p.put("description", patch.description);
|
||||||
|
filteredPatches.add(p)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return filteredPatches
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="app.revanced.revanced_manager_flutter">
|
package="app.revanced.revanced_manager_flutter">
|
||||||
<!-- The INTERNET permission is required for development. Specifically,
|
|
||||||
the Flutter tool needs it to communicate with the running application
|
|
||||||
to allow setting breakpoints, to provide hot reload, etc.
|
|
||||||
-->
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
</manifest>
|
</manifest>
|
||||||
|
@ -15,14 +15,19 @@ allprojects {
|
|||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
maven {
|
||||||
|
url = uri("https://maven.pkg.github.com/revanced/revanced-patcher")
|
||||||
|
credentials {
|
||||||
|
username = (project.findProperty("gpr.user") ?: System.getenv("GITHUB_ACTOR")) as String
|
||||||
|
password = (project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN")) as String
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rootProject.buildDir = '../build'
|
rootProject.buildDir = '../build'
|
||||||
subprojects {
|
subprojects {
|
||||||
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
||||||
}
|
|
||||||
subprojects {
|
|
||||||
project.evaluationDependsOn(':app')
|
project.evaluationDependsOn(':app')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
13
lib/models/patch.dart
Normal file
13
lib/models/patch.dart
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
class Patch {
|
||||||
|
final String name;
|
||||||
|
final String simpleName;
|
||||||
|
final String version;
|
||||||
|
final String description;
|
||||||
|
|
||||||
|
Patch({
|
||||||
|
required this.name,
|
||||||
|
required this.simpleName,
|
||||||
|
required this.version,
|
||||||
|
required this.description,
|
||||||
|
});
|
||||||
|
}
|
@ -8,7 +8,13 @@ class GithubAPI {
|
|||||||
Future<String?> latestRelease(String org, repoName) async {
|
Future<String?> latestRelease(String org, repoName) async {
|
||||||
var latestRelease = await github.repositories
|
var latestRelease = await github.repositories
|
||||||
.getLatestRelease(RepositorySlug(org, repoName));
|
.getLatestRelease(RepositorySlug(org, repoName));
|
||||||
var dlurl = latestRelease.assets?.first.browserDownloadUrl;
|
var dlurl = latestRelease.assets
|
||||||
|
?.firstWhere((asset) =>
|
||||||
|
asset.name != null &&
|
||||||
|
asset.name!.endsWith('.dex') &&
|
||||||
|
!asset.name!.contains('-sources') &&
|
||||||
|
!asset.name!.contains('-javadoc'))
|
||||||
|
.browserDownloadUrl;
|
||||||
return dlurl;
|
return dlurl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
100
lib/services/patcher_api.dart
Normal file
100
lib/services/patcher_api.dart
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
|
||||||
|
import 'package:installed_apps/app_info.dart';
|
||||||
|
import 'package:installed_apps/installed_apps.dart';
|
||||||
|
import 'package:revanced_manager_flutter/models/patch.dart';
|
||||||
|
import 'package:revanced_manager_flutter/services/github_api.dart';
|
||||||
|
import 'package:revanced_manager_flutter/utils/string.dart';
|
||||||
|
|
||||||
|
class PatcherService {
|
||||||
|
File? _patchBundleFile;
|
||||||
|
final List<AppInfo> _filteredPackages = [];
|
||||||
|
final Map<String, List<Patch>> _filteredPatches = <String, List<Patch>>{};
|
||||||
|
final GithubAPI githubAPI = GithubAPI();
|
||||||
|
static const platform = MethodChannel('app.revanced/patcher');
|
||||||
|
static final PatcherService _instance = PatcherService.internal();
|
||||||
|
factory PatcherService() => _instance;
|
||||||
|
PatcherService.internal();
|
||||||
|
|
||||||
|
Future<void> loadPatches() async {
|
||||||
|
if (_patchBundleFile == null) {
|
||||||
|
String? dexFileUrl =
|
||||||
|
await githubAPI.latestRelease('revanced', 'revanced-patches');
|
||||||
|
if (dexFileUrl != null) {
|
||||||
|
_patchBundleFile =
|
||||||
|
await DefaultCacheManager().getSingleFile(dexFileUrl);
|
||||||
|
try {
|
||||||
|
await platform.invokeMethod(
|
||||||
|
'loadPatches',
|
||||||
|
{
|
||||||
|
'pathBundlesPaths': <String>[_patchBundleFile!.absolute.path],
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} on PlatformException {
|
||||||
|
_patchBundleFile = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<AppInfo>> getFilteredInstalledApps() async {
|
||||||
|
if (_patchBundleFile != null && _filteredPackages.isEmpty) {
|
||||||
|
List<AppInfo> all = await InstalledApps.getInstalledApps(false, true);
|
||||||
|
try {
|
||||||
|
List<String>? patchesPackages =
|
||||||
|
await platform.invokeListMethod<String>('getCompatiblePackages');
|
||||||
|
if (patchesPackages != null) {
|
||||||
|
for (AppInfo app in all) {
|
||||||
|
if (patchesPackages.contains(app.packageName)) {
|
||||||
|
_filteredPackages.add(app);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} on Exception {
|
||||||
|
return List.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _filteredPackages;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<Patch>?> getFilteredPatches(AppInfo? targetApp) async {
|
||||||
|
if (_patchBundleFile != null && targetApp != null) {
|
||||||
|
if (_filteredPatches[targetApp.packageName] == null ||
|
||||||
|
_filteredPatches[targetApp.packageName]!.isEmpty) {
|
||||||
|
_filteredPatches[targetApp.packageName!] = [];
|
||||||
|
try {
|
||||||
|
var patches = await platform.invokeListMethod<Map<dynamic, dynamic>>(
|
||||||
|
'getFilteredPatches',
|
||||||
|
{
|
||||||
|
'targetPackage': targetApp.packageName,
|
||||||
|
'targetVersion': targetApp.versionName,
|
||||||
|
'ignoreVersion': true,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
if (patches != null) {
|
||||||
|
for (var patch in patches) {
|
||||||
|
_filteredPatches[targetApp.packageName]!.add(
|
||||||
|
Patch(
|
||||||
|
name: patch['name'],
|
||||||
|
simpleName: (patch['name'] as String)
|
||||||
|
.replaceAll('-', ' ')
|
||||||
|
.split('-')
|
||||||
|
.join(' ')
|
||||||
|
.toTitleCase(),
|
||||||
|
version: patch['version'] ?? 'unknown',
|
||||||
|
description: patch['description'] ?? 'unknown',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} on Exception {
|
||||||
|
return List.empty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return List.empty();
|
||||||
|
}
|
||||||
|
return _filteredPatches[targetApp.packageName];
|
||||||
|
}
|
||||||
|
}
|
8
lib/utils/string.dart
Normal file
8
lib/utils/string.dart
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
extension StringCasingExtension on String {
|
||||||
|
String toCapitalized() =>
|
||||||
|
length > 0 ? '${this[0].toUpperCase()}${substring(1).toLowerCase()}' : '';
|
||||||
|
String toTitleCase() => replaceAll(RegExp(' +'), ' ')
|
||||||
|
.split(' ')
|
||||||
|
.map((str) => str.toCapitalized())
|
||||||
|
.join(' ');
|
||||||
|
}
|
72
pubspec.lock
72
pubspec.lock
@ -209,6 +209,13 @@ packages:
|
|||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_cache_manager:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_cache_manager
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.3.0"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@ -312,6 +319,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.5.4"
|
version: "1.5.4"
|
||||||
|
installed_apps:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: installed_apps
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.3.1"
|
||||||
io:
|
io:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -327,12 +341,19 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.4"
|
version: "0.6.4"
|
||||||
json_annotation:
|
json_annotation:
|
||||||
dependency: transitive
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: json_annotation
|
name: json_annotation
|
||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.6.0"
|
version: "4.6.0"
|
||||||
|
json_serializable:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: json_serializable
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "6.3.1"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -466,6 +487,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.0"
|
version: "2.1.0"
|
||||||
|
pedantic:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: pedantic
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.11.1"
|
||||||
petitparser:
|
petitparser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -529,6 +557,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "4.0.0"
|
version: "4.0.0"
|
||||||
|
rxdart:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: rxdart
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.27.5"
|
||||||
shelf:
|
shelf:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -555,6 +590,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.2"
|
version: "1.2.2"
|
||||||
|
source_helper:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: source_helper
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.3.2"
|
||||||
source_span:
|
source_span:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -562,6 +604,20 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.8.2"
|
version: "1.8.2"
|
||||||
|
sqflite:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sqflite
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.3+1"
|
||||||
|
sqflite_common:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sqflite_common
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.1+1"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -618,6 +674,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.0"
|
version: "1.1.0"
|
||||||
|
synchronized:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: synchronized
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0+2"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -653,6 +716,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.4"
|
version: "2.0.4"
|
||||||
|
uuid:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: uuid
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.6"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
76
pubspec.yaml
76
pubspec.yaml
@ -1,41 +1,23 @@
|
|||||||
name: revanced_manager_flutter
|
name: revanced_manager_flutter
|
||||||
description: A new Flutter project.
|
description: The unofficial ReVanced Manager based on Flutter.
|
||||||
|
homepage: https://github.com/Aunali321/revanced-manager
|
||||||
|
|
||||||
# The following line prevents the package from being accidentally published to
|
publish_to: 'none'
|
||||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
|
||||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|
||||||
|
|
||||||
# The following defines the version and build number for your application.
|
|
||||||
# A version number is three numbers separated by dots, like 1.2.43
|
|
||||||
# followed by an optional build number separated by a +.
|
|
||||||
# Both the version and the builder number may be overridden in flutter
|
|
||||||
# build by specifying --build-name and --build-number, respectively.
|
|
||||||
# In Android, build-name is used as versionName while build-number used as versionCode.
|
|
||||||
# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
|
|
||||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
|
||||||
# Read more about iOS versioning at
|
|
||||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
|
||||||
version: 1.0.0+1
|
version: 1.0.0+1
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=2.17.5 <3.0.0"
|
sdk: ">=2.17.5 <3.0.0"
|
||||||
|
|
||||||
# Dependencies specify other packages that your package needs in order to work.
|
|
||||||
# To automatically upgrade your package dependencies to the latest versions
|
|
||||||
# consider running `flutter pub upgrade --major-versions`. Alternatively,
|
|
||||||
# dependencies can be manually updated by changing the version numbers below to
|
|
||||||
# the latest version available on pub.dev. To see which dependencies have newer
|
|
||||||
# versions available, run `flutter pub outdated`.
|
|
||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|
||||||
|
|
||||||
# The following adds the Cupertino Icons font to your application.
|
|
||||||
# Use with the CupertinoIcons class for iOS style icons.
|
|
||||||
cupertino_icons: ^1.0.2
|
cupertino_icons: ^1.0.2
|
||||||
|
flutter_cache_manager: ^3.3.0
|
||||||
flutter_svg: ^1.1.1+1
|
flutter_svg: ^1.1.1+1
|
||||||
google_fonts: ^3.0.1
|
google_fonts: ^3.0.1
|
||||||
|
installed_apps: ^1.3.1
|
||||||
|
json_annotation: ^4.6.0
|
||||||
|
|
||||||
#networking
|
#networking
|
||||||
http: ^0.13.4
|
http: ^0.13.4
|
||||||
@ -59,54 +41,12 @@ dependencies:
|
|||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
flutter_lints: ^2.0.1
|
||||||
# The "flutter_lints" package below contains a set of recommended lints to
|
|
||||||
# encourage good coding practices. The lint set provided by the package is
|
|
||||||
# activated in the `analysis_options.yaml` file located at the root of your
|
|
||||||
# package. See that file for information about deactivating specific lint
|
|
||||||
# rules and activating additional ones.
|
|
||||||
flutter_lints: ^2.0.0
|
|
||||||
build_runner: ^2.2.0
|
build_runner: ^2.2.0
|
||||||
injectable_generator: ^1.5.4
|
injectable_generator: ^1.5.4
|
||||||
|
json_serializable: ^6.3.1
|
||||||
|
|
||||||
# For information on the generic Dart part of this file, see the
|
|
||||||
# following page: https://dart.dev/tools/pub/pubspec
|
|
||||||
|
|
||||||
# The following section is specific to Flutter packages.
|
|
||||||
flutter:
|
flutter:
|
||||||
|
|
||||||
# The following line ensures that the Material Icons font is
|
|
||||||
# included with your application, so that you can use the icons in
|
|
||||||
# the material Icons class.
|
|
||||||
uses-material-design: true
|
uses-material-design: true
|
||||||
|
|
||||||
# To add assets to your application, add an assets section, like this:
|
|
||||||
assets:
|
assets:
|
||||||
- lib/assets/images/
|
- lib/assets/images/
|
||||||
# - images/a_dot_ham.jpeg
|
|
||||||
|
|
||||||
# An image asset can refer to one or more resolution-specific "variants", see
|
|
||||||
# https://flutter.dev/assets-and-images/#resolution-aware
|
|
||||||
|
|
||||||
# For details regarding adding assets from package dependencies, see
|
|
||||||
# https://flutter.dev/assets-and-images/#from-packages
|
|
||||||
|
|
||||||
# To add custom fonts to your application, add a fonts section here,
|
|
||||||
# in this "flutter" section. Each entry in this list should have a
|
|
||||||
# "family" key with the font family name, and a "fonts" key with a
|
|
||||||
# list giving the asset and other descriptors for the font. For
|
|
||||||
# example:
|
|
||||||
# fonts:
|
|
||||||
# - family: Manrope
|
|
||||||
# fonts:
|
|
||||||
# - asset: lib/assets/fonts/Manrope.ttf
|
|
||||||
# - asset: fonts/Schyler-Italic.ttf
|
|
||||||
# style: italic
|
|
||||||
# - family: Trajan Pro
|
|
||||||
# fonts:
|
|
||||||
# - asset: fonts/TrajanPro.ttf
|
|
||||||
# - asset: fonts/TrajanPro_Bold.ttf
|
|
||||||
# weight: 700
|
|
||||||
#
|
|
||||||
# For details regarding fonts from package dependencies,
|
|
||||||
# see https://flutter.dev/custom-fonts/#from-packages
|
|
||||||
|
Loading…
Reference in New Issue
Block a user