Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ jobs:
with:
distribution: 'temurin'
java-version: '17'
cache: gradle

# Flutter Pub Get
- name: Flutter Pub Get
Expand All @@ -113,7 +114,7 @@ jobs:
- name: Build Android
if: matrix.target == 'Android'
run: |
flutter build apk --release
flutter build apk --release --verbose
flutter build apk --release --split-per-abi
cd build/app/outputs/flutter-apk
mv app-release.apk CloudOTP-${{ steps.get_version.outputs.version }}-android-universal.apk
Expand Down
13 changes: 11 additions & 2 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,13 @@ android {
}

kotlinOptions {
jvmTarget = '1.8'
jvmTarget = '17'
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions {
jvmTarget = "17"
}
}

defaultConfig {
Expand All @@ -62,7 +68,6 @@ android {
buildTypes {
release {
signingConfig signingConfigs.release
// useProguard true
minifyEnabled true
shrinkResources true
zipAlignEnabled true
Expand All @@ -74,6 +79,10 @@ android {
}
}

kotlin {
jvmToolchain(17)
}

flutter {
source '../..'
}
Expand Down
12 changes: 11 additions & 1 deletion android/app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,14 @@

-keepattributes *Annotation*

-keepattributes SourceFile,LineNumberTable
-dontwarn com.google.android.play.core.splitcompat.SplitCompatApplication
-dontwarn com.google.android.play.core.splitinstall.SplitInstallException
-dontwarn com.google.android.play.core.splitinstall.SplitInstallManager
-dontwarn com.google.android.play.core.splitinstall.SplitInstallManagerFactory
-dontwarn com.google.android.play.core.splitinstall.SplitInstallRequest$Builder
-dontwarn com.google.android.play.core.splitinstall.SplitInstallRequest
-dontwarn com.google.android.play.core.splitinstall.SplitInstallSessionState
-dontwarn com.google.android.play.core.splitinstall.SplitInstallStateUpdatedListener
-dontwarn com.google.android.play.core.tasks.OnFailureListener
-dontwarn com.google.android.play.core.tasks.OnSuccessListener
-dontwarn com.google.android.play.core.tasks.Task
46 changes: 26 additions & 20 deletions android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,28 +1,20 @@
//buildscript {
// ext.kotlin_version = '1.8.10'
// repositories {
// google()
// mavenCentral()
// }
// dependencies {
// classpath 'com.android.tools.build:gradle:7.3.1'
// classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// }
//}
buildscript {
ext.kotlin_version = '2.1.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:8.0.2'
// classpath 'com.android.tools:r8:1.6.82'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}

allprojects {
repositories {
// maven { url 'https://maven.aliyun.com/repository/google' }
// maven { url 'https://maven.aliyun.com/repository/jcenter' }
google()
mavenCentral()
// maven { url 'https://jitpack.io' }
// maven { url "https://maven.google.com" }
// maven { url 'https://maven.aliyun.com/repository/public' }
// maven { url 'https://maven.aliyun.com/repository/central' }
// maven { url 'https://maven.aliyun.com/nexus/content/groups/public' }
// maven { url 'https://maven.aliyun.com/repository/flutter-plugin' }
// maven { url "https://download.flutter.io" }
}
}

Expand All @@ -32,6 +24,20 @@ subprojects {
android {
compileSdkVersion 34
}
if (it.plugins.hasPlugin('com.android.library') || it.plugins.hasPlugin('com.android.application')) {
it.android {
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
}

it.tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions {
jvmTarget = "17"
}
}
}
}
}
subprojects {
Expand Down
2 changes: 2 additions & 0 deletions android/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@ org.gradle.jvmargs=-Xmx4096m
org.gradle.parallel=true
android.useAndroidX=true
android.enableJetifier=true
kotlin.version=2.1.10
org.gradle.jvm.toolchain=17
2 changes: 1 addition & 1 deletion android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip
9 changes: 7 additions & 2 deletions android/settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,17 @@ pluginManagement {
mavenCentral()
gradlePluginPortal()
}

plugins {
id("org.jetbrains.kotlin.jvm") version "2.1.10"
id("org.jetbrains.kotlin.android") version "2.1.10"
}
}

plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "7.3.1" apply false
id "org.jetbrains.kotlin.android" version "2.1.0" apply false
id "com.android.application" version "8.0.2" apply false
id "org.jetbrains.kotlin.android" version "2.1.10" apply false
}

include ":app"
17 changes: 10 additions & 7 deletions lib/Database/database_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,8 @@ class DatabaseManager {
await _database!.rawQuery("SELECT sqlcipher_export('tmp')");
await _database!.rawQuery("DETACH DATABASE tmp");
return true;
} catch (e) {
ILogger.error("Failed to change database password", e);
} catch (e, t) {
ILogger.error("Failed to change database password", e, t);
return false;
}
}
Expand All @@ -143,9 +143,7 @@ class DatabaseManager {
"Configure database with cipher successfully. Result is $res");
} else {
ILogger.error(
"Failed to configure database with cipher, perhaps the sqlcipher dynamic library was not loaded.",
res,
);
"Failed to configure database with cipher, perhaps the sqlcipher dynamic library was not loaded. Result is $res");
}
}
}
Expand Down Expand Up @@ -265,7 +263,11 @@ class DatabaseManager {
if (Platform.isLinux || Platform.isAndroid) {
try {
lib = DynamicLibrary.open('libsqlcipher.so');
} catch (e) {
} catch (e, t) {
ILogger.error(
"Failed to load libsqlcipher.so, perhaps the library is not installed or not in the correct path.",
e,
t);
if (Platform.isAndroid) {
final appIdAsBytes = File('/proc/self/cmdline').readAsBytesSync();
final endOfAppId = max(appIdAsBytes.indexOf(0), 0);
Expand All @@ -284,7 +286,8 @@ class DatabaseManager {
lib = DynamicLibrary.open('sqlite_sqlcipher.dll');
}
return lib;
} catch (e) {
} catch (e, t) {
ILogger.error("Failed to load sqlcipher dynamic library", e, t);
return null;
}
}
Expand Down
1 change: 0 additions & 1 deletion lib/Database/token_category_binding_dao.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import 'package:cloudotp/Models/opt_token.dart';
import 'package:cloudotp/Models/token_category_binding.dart';
import 'package:sqflite_sqlcipher/sqflite.dart';

import '../Utils/utils.dart';
import 'database_manager.dart';

class BindingDao {
Expand Down
1 change: 0 additions & 1 deletion lib/Models/token_category.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import 'dart:convert';
import 'package:awesome_chewie/awesome_chewie.dart';

import '../Database/token_category_binding_dao.dart';
import '../Utils/utils.dart';
import 'Proto/TokenCategory/token_category_payload.pb.dart';
import 'opt_token.dart';

Expand Down
5 changes: 4 additions & 1 deletion lib/Screens/Backup/aliyundrive_service_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,12 @@
import 'dart:typed_data';

import 'package:awesome_chewie/awesome_chewie.dart';
import 'package:awesome_cloud/awesome_cloud.dart';
import 'package:cloudotp/Models/cloud_service_config.dart';
import 'package:cloudotp/TokenUtils/Cloud/cloud_service.dart';
import 'package:cloudotp/Utils/app_provider.dart';
import 'package:flutter/material.dart';
import 'package:awesome_cloud/awesome_cloud.dart';
import 'package:window_manager/window_manager.dart';

import '../../Database/cloud_service_config_dao.dart';
import '../../TokenUtils/Cloud/aliyundrive_cloud_service.dart';
Expand Down Expand Up @@ -242,12 +243,14 @@ class _AliyunDriveServiceScreenState
onPressed: () async {
try {
appProvider.preventLock = true;
windowManager.minimize();
await ping();
} catch (e, t) {
ILogger.error("Failed to connect to aliyunDrive", e, t);
IToast.show(appLocalizations.cloudConnectionError);
} finally {
appProvider.preventLock = false;
windowManager.restore();
}
},
),
Expand Down
3 changes: 3 additions & 0 deletions lib/Screens/Backup/box_service_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import 'package:awesome_cloud/models/box_response.dart';
import 'package:cloudotp/Models/cloud_service_config.dart';
import 'package:cloudotp/TokenUtils/Cloud/cloud_service.dart';
import 'package:flutter/material.dart';
import 'package:window_manager/window_manager.dart';

import '../../Database/cloud_service_config_dao.dart';
import '../../TokenUtils/Cloud/box_cloud_service.dart';
Expand Down Expand Up @@ -254,12 +255,14 @@ class _BoxServiceScreenState extends BaseDynamicState<BoxServiceScreen>
onPressed: () async {
try {
appProvider.preventLock = true;
windowManager.minimize();
await ping();
} catch (e, t) {
ILogger.error("Failed to connect to box", e, t);
IToast.show(appLocalizations.cloudConnectionError);
} finally {
appProvider.preventLock = false;
windowManager.restore();
}
},
),
Expand Down
5 changes: 4 additions & 1 deletion lib/Screens/Backup/dropbox_service_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@
import 'dart:typed_data';

import 'package:awesome_chewie/awesome_chewie.dart';
import 'package:awesome_cloud/awesome_cloud.dart';
import 'package:cloudotp/Models/cloud_service_config.dart';
import 'package:cloudotp/TokenUtils/Cloud/cloud_service.dart';
import 'package:flutter/material.dart';
import 'package:awesome_cloud/awesome_cloud.dart';
import 'package:window_manager/window_manager.dart';

import '../../Database/cloud_service_config_dao.dart';
import '../../TokenUtils/Cloud/dropbox_cloud_service.dart';
Expand Down Expand Up @@ -243,12 +244,14 @@ class _DropboxServiceScreenState extends BaseDynamicState<DropboxServiceScreen>
onPressed: () async {
try {
appProvider.preventLock = true;
windowManager.minimize();
await ping();
} catch (e, t) {
ILogger.error("Failed to connect to dropbox", e, t);
IToast.show(appLocalizations.cloudConnectionError);
} finally {
appProvider.preventLock = false;
windowManager.restore();
}
},
),
Expand Down
3 changes: 3 additions & 0 deletions lib/Screens/Backup/googledrive_service_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import 'package:awesome_cloud/awesome_cloud.dart';
import 'package:cloudotp/Models/cloud_service_config.dart';
import 'package:cloudotp/TokenUtils/Cloud/cloud_service.dart';
import 'package:flutter/material.dart';
import 'package:window_manager/window_manager.dart';

import '../../Database/cloud_service_config_dao.dart';
import '../../TokenUtils/Cloud/googledrive_cloud_service.dart';
Expand Down Expand Up @@ -241,12 +242,14 @@ class _GoogleDriveServiceScreenState
onPressed: () async {
try {
appProvider.preventLock = true;
windowManager.minimize();
await ping();
} catch (e, t) {
ILogger.error("Failed to connect to google drive", e, t);
IToast.show(appLocalizations.cloudConnectionError);
} finally {
appProvider.preventLock = false;
windowManager.restore();
}
},
),
Expand Down
3 changes: 3 additions & 0 deletions lib/Screens/Backup/huawei_service_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import 'package:awesome_cloud/awesome_cloud.dart';
import 'package:cloudotp/Models/cloud_service_config.dart';
import 'package:cloudotp/TokenUtils/Cloud/cloud_service.dart';
import 'package:flutter/material.dart';
import 'package:window_manager/window_manager.dart';

import '../../Database/cloud_service_config_dao.dart';
import '../../TokenUtils/Cloud/huawei_cloud_service.dart';
Expand Down Expand Up @@ -235,12 +236,14 @@ class _HuaweiCloudServiceScreenState
onPressed: () async {
try {
appProvider.preventLock = true;
windowManager.minimize();
await ping();
} catch (e, t) {
ILogger.error("Failed to connect to huawei cloud", e, t);
IToast.show(appLocalizations.cloudConnectionError);
} finally {
appProvider.preventLock = false;
windowManager.restore();
}
},
),
Expand Down
10 changes: 7 additions & 3 deletions lib/Screens/Backup/onedrive_service_screen.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,18 @@

import 'dart:typed_data';

import 'package:awesome_chewie/awesome_chewie.dart';
import 'package:awesome_cloud/awesome_cloud.dart';
import 'package:cloudotp/Models/cloud_service_config.dart';
import 'package:cloudotp/TokenUtils/Cloud/cloud_service.dart';
import 'package:cloudotp/Widgets/BottomSheet/Backups/onedrive_backups_bottom_sheet.dart';
import 'package:flutter/material.dart';
import 'package:window_manager/window_manager.dart';

import 'package:awesome_cloud/awesome_cloud.dart';
import '../../Database/cloud_service_config_dao.dart';
import '../../TokenUtils/Cloud/onedrive_cloud_service.dart';
import '../../TokenUtils/export_token_util.dart';
import '../../TokenUtils/import_token_util.dart';
import 'package:awesome_chewie/awesome_chewie.dart';
import '../../Utils/app_provider.dart';
import '../../l10n/l10n.dart';

Expand Down Expand Up @@ -65,8 +66,9 @@ class _OneDriveServiceScreenState
super.initState();
try {
loadConfig();
} catch (e) {
} catch (e, t) {
inited = true;
ILogger.error("Failed to load OneDrive config", e, t);
IToast.show(appLocalizations.cloudConnectionError);
}
}
Expand Down Expand Up @@ -251,12 +253,14 @@ class _OneDriveServiceScreenState
onPressed: () async {
try {
appProvider.preventLock = true;
windowManager.minimize();
await ping();
} catch (e, t) {
ILogger.error("Failed to connect to onedrive", e, t);
IToast.show(appLocalizations.cloudConnectionError);
} finally {
appProvider.preventLock = false;
windowManager.restore();
}
},
),
Expand Down
Loading