diff --git a/app/build.gradle b/app/build.gradle index 9873896161..4d7051be33 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,6 +2,7 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' +apply plugin: 'io.fabric' static def generateVersionName() { def gitCommitsCount = "git rev-list HEAD --count".execute().text.trim() @@ -9,6 +10,9 @@ static def generateVersionName() { return gitCommitsCount.toInteger() + 831// + "\\n" + gitCurrentBranch } +Properties properties = new Properties() +properties.load(project.rootProject.file('local.properties').newDataInputStream()) + android { compileSdkVersion 28 defaultConfig { @@ -25,18 +29,29 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.debug + buildConfigField 'boolean', 'CRASHLYTICS', 'Boolean.parseBoolean("false")' + ext.enableCrashlytics = false } debug { debuggable true minifyEnabled false applicationIdSuffix ".debug" signingConfig signingConfigs.debug + buildConfigField 'boolean', 'CRASHLYTICS', 'Boolean.parseBoolean("false")' + ext.enableCrashlytics = false + } + debug_beta { + initWith debug + versionNameSuffix "-beta" + applicationIdSuffix ".debug_beta" + buildConfigField 'boolean', 'CRASHLYTICS', 'Boolean.parseBoolean("true")' + manifestPlaceholders = [fabric_api_key: properties.getProperty('fabric_api_key')] } } flavorDimensions "" productFlavors { tangemAccess { - versionCode 114 + versionCode 115 versionName "0.908.1." + generateVersionName() applicationId "com.tangem.wallet" signingConfig signingConfigs.debug @@ -65,6 +80,7 @@ android { repositories { maven { url "https://jitpack.io" } + maven { url 'https://maven.fabric.io/public' } } configurations { all*.exclude group: 'com.google.guava', module: 'listenablefuture' @@ -119,6 +135,9 @@ dependencies { // implementation 'com.github.stellar:java-stellar-sdk:0.4.1' implementation 'net.i2p.crypto:eddsa:0.3.0' + implementation('com.crashlytics.sdk.android:crashlytics:2.9.9') { transitive = true } + implementation('io.fabric.sdk.android:fabric:1.4.0@aar') { transitive = true } + implementation files('libs/ripple-core-0.0.1.jar') //4 dependencies for ripple-core TODO: move to module? implementation 'net.i2p.crypto:eddsa:0.3.0' diff --git a/app/src/debug/res/values/strings.xml b/app/src/debug/res/values/strings.xml index 9ef8838437..1c13a1dbc0 100644 --- a/app/src/debug/res/values/strings.xml +++ b/app/src/debug/res/values/strings.xml @@ -2,5 +2,6 @@ DEBUG + com.tangem.debug.data.LogFileProvider \ No newline at end of file diff --git a/app/src/debug_beta/AndroidManifest.xml b/app/src/debug_beta/AndroidManifest.xml new file mode 100644 index 0000000000..9f07ca1097 --- /dev/null +++ b/app/src/debug_beta/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/debug_beta/res/values/strings.xml b/app/src/debug_beta/res/values/strings.xml new file mode 100644 index 0000000000..dd8d1b1737 --- /dev/null +++ b/app/src/debug_beta/res/values/strings.xml @@ -0,0 +1,6 @@ + + + + TangemBeta + + \ No newline at end of file diff --git a/app/src/main/java/com/tangem/App.kt b/app/src/main/java/com/tangem/App.kt index 64d16a74e3..84e791d4ae 100644 --- a/app/src/main/java/com/tangem/App.kt +++ b/app/src/main/java/com/tangem/App.kt @@ -2,16 +2,18 @@ package com.tangem import android.app.Application import androidx.appcompat.app.AppCompatDelegate +import com.crashlytics.android.Crashlytics import com.google.gson.Gson import com.google.gson.reflect.TypeToken -import com.tangem.data.local.PendingTransactionsStorage import com.tangem.card_android.android.data.Firmwares import com.tangem.card_android.android.data.PINStorage import com.tangem.card_common.data.Issuer import com.tangem.data.dp.PrefsManager +import com.tangem.data.local.PendingTransactionsStorage import com.tangem.di.* import com.tangem.server_android.data.LocalStorage import com.tangem.wallet.BuildConfig +import io.fabric.sdk.android.Fabric import java.io.InputStreamReader import java.nio.charset.StandardCharsets @@ -73,6 +75,7 @@ class App : Application() { } } ) + if (BuildConfig.CRASHLYTICS) Fabric.with(this, Crashlytics()) } } diff --git a/build.gradle b/build.gradle index 58b21916a3..868717e1b8 100644 --- a/build.gradle +++ b/build.gradle @@ -3,11 +3,13 @@ buildscript { repositories { google() jcenter() + maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'com.android.tools.build:gradle:3.4.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' + classpath 'io.fabric.tools:gradle:1.27.1' } } diff --git a/card-android/build.gradle b/card-android/build.gradle index 956d0c88fe..1dc0028332 100644 --- a/card-android/build.gradle +++ b/card-android/build.gradle @@ -20,6 +20,10 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + debug_beta { + initWith debug + versionNameSuffix "-beta" + } } buildToolsVersion '28.0.3' diff --git a/fastlane/Fastfile b/fastlane/Fastfile index bf598fdf5b..56dd357aba 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -16,46 +16,53 @@ default_platform(:android) platform :android do + desc "Runs all the tests" lane :test do gradle( - task: "test", - flavor: "tangemAccess", - build_type: "Debug") + task: "test", + flavor: "tangemAccess", + build_type: "DebugUnitTest") end - desc "Build a release APK" - lane :release do - gradle( - task: "clean assemble", - flavor: "tangemAccess", - build_type: "Release") + desc "Build a signed release APK" + lane :release do |options| + gradle( + task: "clean assemble", + flavor: "tangemAccess", + build_type: "Release", + properties: { + "android.injected.signing.store.file" => options[:keystore], + "android.injected.signing.store.password" => options[:store_password], + "android.injected.signing.key.alias" => options[:key_alias], + "android.injected.signing.key.password" => options[:key_password], + }) end - desc "Build a debug APK" - lane :debug do - gradle(task: "clean assemble", - flavor: "tangemAccess", - build_type: "Debug") - end + desc "Build debug and release APKs" + lane :build do |options| + gradle( + task: "clean assemble", + flavor: "tangemAccess", + build_type: "Debug_beta") + gradle( + task: "assemble", + flavor: "tangemAccess", + build_type: "Release", + properties: { + "android.injected.signing.store.file" => options[:keystore], + "android.injected.signing.store.password" => options[:store_password], + "android.injected.signing.key.alias" => options[:key_alias], + "android.injected.signing.key.password" => options[:key_password], + }) + end desc "Submit a new Beta Build to Crashlytics Beta" - lane :beta do - gradle(task: "clean assemble", - flavor: "tangemAccess", - build_type: "Debug") - crashlytics - - # sh "your_script.sh" - # You can also use other beta testing services here + lane :beta do |options| + crashlytics( + api_token: options[:api_token], + build_secret: options[:build_secret], + apk_path: options[:apk_path]) end - desc "Deploy a new version to the Google Play" - lane :deploy do - gradle( - task: "clean assemble", - flavor: "tangemAccess", - build_type: "Release") - upload_to_play_store - end end diff --git a/fastlane/README.md b/fastlane/README.md index 61b4a5d99a..7c3f972135 100644 --- a/fastlane/README.md +++ b/fastlane/README.md @@ -25,22 +25,17 @@ Runs all the tests ``` fastlane android release ``` -Build a release APK -### android debug +Build a signed release APK +### android build ``` -fastlane android debug +fastlane android build ``` -Build a debug APK +Build debug and release APKs ### android beta ``` fastlane android beta ``` Submit a new Beta Build to Crashlytics Beta -### android deploy -``` -fastlane android deploy -``` -Deploy a new version to the Google Play ---- diff --git a/server-android/build.gradle b/server-android/build.gradle index 7aaa4af308..c6e7c5bfed 100644 --- a/server-android/build.gradle +++ b/server-android/build.gradle @@ -20,6 +20,10 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } + debug_beta { + initWith debug + versionNameSuffix "-beta" + } } productFlavors { }