commit 193f0fc639a004a4626f2cb9dfc28efbc8cdbb03 Author: Shane sisbell@Shanes-MacBook-Pro.local Date: Sat Jul 31 13:49:46 2021 -0700
Fix #501 - Duplicate Config Info in Build Files --- app-mini/build.gradle | 111 ++++----------------------- app-tv/build.gradle | 128 +++++-------------------------- app/build.gradle | 118 ++++------------------------ appcore/build.gradle | 35 ++++----- build.gradle | 5 +- commons-device.gradle | 78 +++++++++++++++++++ commons-limited-device.gradle | 13 ++++ commons.gradle | 11 +++ gradle/wrapper/gradle-wrapper.properties | 4 +- intentintegrator/build.gradle | 12 +-- orbotservice/build.gradle | 44 ++++------- 11 files changed, 186 insertions(+), 373 deletions(-)
diff --git a/app-mini/build.gradle b/app-mini/build.gradle index 1f9734f8..79f99df1 100644 --- a/app-mini/build.gradle +++ b/app-mini/build.gradle @@ -1,60 +1,11 @@ -apply plugin: 'com.android.application' - -// Create a variable called keystorePropertiesFile, and initialize it to your -// keystore.properties file, in the rootProject folder. -def keystorePropertiesFile = rootProject.file("keystore.properties") - -// Initialize a new Properties() object called keystoreProperties. -def keystoreProperties = new Properties() - -// Load your keystore.properties file into the keystoreProperties object. -if (keystorePropertiesFile.canRead()) { - keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) -} +apply from: "../commons-device.gradle"
android { - signingConfigs { - release { - if (keystorePropertiesFile.canRead()) { - keyAlias keystoreProperties['keyAlias'] - keyPassword keystoreProperties['keyPassword'] - storeFile file(keystoreProperties['storeFile']) - storePassword keystoreProperties['storePassword'] - } - } - } - - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - compileSdkVersion 30 - buildToolsVersion '30.0.3' defaultConfig { applicationId "org.torproject.android.mini" minSdkVersion 16 targetSdkVersion 30 } - lintOptions { - checkReleaseBuilds false - // Or, if you prefer, you can continue to check for errors in release builds, - // but continue the build even when errors are found: - abortOnError false - } - buildTypes { - release { - minifyEnabled true - shrinkResources true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' - signingConfig signingConfigs.release - } - } - - aaptOptions { - cruncherEnabled = false - }
flavorDimensions "freemini"
@@ -70,72 +21,36 @@ android { } }
- splits { - - // Configures multiple APKs based on ABI. This helps keep the size down, since PT binaries can be large. - abi { - - // Enables building multiple APKs per ABI. - enable true - - // By default all ABIs are included, so use reset() and include to specify that we only - // want APKs for x86 and x86_64. - - // Resets the list of ABIs that Gradle should create APKs for to none. - reset() - - // Specifies a list of ABIs that Gradle should create APKs for. - include "x86", "armeabi-v7a", "x86_64", "arm64-v8a" - - // Specifies that we do not want to also generate a universal APK that includes all ABIs. - universalApk false - } - - } - packagingOptions { exclude 'lib/x86/libgojni.so' exclude 'lib/x86_64/libgojni.so' exclude 'lib/arm64-v8a/libgojni.so' exclude 'lib/armeabi-v7a/libgojni.so' exclude 'lib/armeabi/libgojni.so' - exclude 'META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version' - } -} - -repositories { - jcenter { - content { - includeGroup('com.jraska') - includeGroup('tools.fastlane') - } } }
dependencies { - implementation project(':orbotservice') - implementation 'com.github.apl-devs:appintro:v4.2.2' - implementation 'androidx.palette:palette:1.0.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - implementation project(path: ':appcore') - implementation 'androidx.recyclerview:recyclerview:1.1.0' - implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' - implementation 'com.google.android.material:material:1.2.1' - implementation project(path: ':intentintegrator') + implementation( + project(path: ':appcore'), + project(path: ':intentintegrator'), + project(':orbotservice'), + 'androidx.constraintlayout:constraintlayout:2.1.0', + 'androidx.coordinatorlayout:coordinatorlayout:1.1.0', + 'androidx.recyclerview:recyclerview:1.2.1', + 'androidx.palette:palette:1.0.0', + 'com.github.apl-devs:appintro:v4.2.2', + 'com.google.android.material:material:1.4.0' + ) androidTestImplementation "tools.fastlane:screengrab:1.2.0" }
-// Map for the version code that gives each ABI a value. -ext.abiCodes = ['armeabi-v7a': '1', 'arm64-v8a': '2', 'mips': '3', 'x86': '4', 'x86_64': '5'] - -import com.android.build.OutputFile - // For each APK output variant, override version code of outputs based on ABI codes // ex) 'mips' -> 3xxx // ex) 'x86' -> 4xxx android.applicationVariants.all { variant -> variant.outputs.each { output -> - def baseVersionCode = project.ext.abiCodes.get(output.getFilter(OutputFile.ABI)) + def baseVersionCode = project.ext.abiCodes.get(output.getFilter(com.android.build.OutputFile.ABI)) if (baseVersionCode != null) { output.versionCodeOverride = Integer.valueOf(baseVersionCode + variant.versionCode) } diff --git a/app-tv/build.gradle b/app-tv/build.gradle index ef03eb5f..d840ed4e 100644 --- a/app-tv/build.gradle +++ b/app-tv/build.gradle @@ -1,56 +1,11 @@ -apply plugin: 'com.android.application' - -// Create a variable called keystorePropertiesFile, and initialize it to your -// keystore.properties file, in the rootProject folder. -def keystorePropertiesFile = rootProject.file("keystore.properties") - -// Initialize a new Properties() object called keystoreProperties. -def keystoreProperties = new Properties() - -// Load your keystore.properties file into the keystoreProperties object. -if (keystorePropertiesFile.canRead()) { - keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) -} +apply from: "../commons-limited-device.gradle"
android { - signingConfigs { - release { - if (keystorePropertiesFile.canRead()) { - keyAlias keystoreProperties['keyAlias'] - keyPassword keystoreProperties['keyPassword'] - storeFile file(keystoreProperties['storeFile']) - storePassword keystoreProperties['storePassword'] - } - } - } - - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - compileSdkVersion 30 - buildToolsVersion '30.0.3' defaultConfig { applicationId "org.torproject.android.tv" minSdkVersion 23 targetSdkVersion 29 } - lintOptions { - checkReleaseBuilds false - // Or, if you prefer, you can continue to check for errors in release builds, - // but continue the build even when errors are found: - abortOnError false - } - buildTypes { - release { - minifyEnabled true - shrinkResources true - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' - signingConfig signingConfigs.release - } - }
aaptOptions { cruncherEnabled = false @@ -70,89 +25,42 @@ android { } }
- splits { - - // Configures multiple APKs based on ABI. This helps keep the size down, since PT binaries can be large. - abi { - - // Enables building multiple APKs per ABI. - enable true - - // By default all ABIs are included, so use reset() and include to specify that we only - // want APKs for x86 and x86_64. - - // Resets the list of ABIs that Gradle should create APKs for to none. - reset() - - // Specifies a list of ABIs that Gradle should create APKs for. - include "x86", "armeabi-v7a", "x86_64", "arm64-v8a" - - // Specifies that we do not want to also generate a universal APK that includes all ABIs. - universalApk false - } - - } - packagingOptions { exclude 'lib/x86/obfs4proxy.so' exclude 'lib/x86_64/obfs4proxy.so' exclude 'lib/arm64-v8a/obfs4proxy.so' exclude 'lib/armeabi-v7a/obfs4proxy.so' exclude 'lib/armeabi/obfs4proxy.so' - exclude 'META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version' - } -} - -repositories { - jcenter { - content { - includeGroup('com.jraska') - includeGroup('tools.fastlane') - } } }
dependencies { - implementation project(':orbotservice') - implementation 'com.github.apl-devs:appintro:v4.2.2' - implementation 'androidx.palette:palette:1.0.0' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - implementation project(path: ':appcore') - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.coordinatorlayout:coordinatorlayout:1.1.0' - implementation 'com.google.android.material:material:1.4.0' - implementation project(path: ':intentintegrator') + implementation( + project(path: ':appcore'), + project(path: ':intentintegrator'), + project(':orbotservice'), + 'androidx.constraintlayout:constraintlayout:2.1.0', + 'androidx.coordinatorlayout:coordinatorlayout:1.1.0', + "androidx.leanback:leanback:1.2.0-alpha01", + "androidx.leanback:leanback-paging:1.1.0-alpha08", + "androidx.leanback:leanback-preference:1.2.0-alpha01", + "androidx.leanback:leanback-tab:1.1.0-beta01", + 'androidx.palette:palette:1.0.0', + 'androidx.recyclerview:recyclerview:1.2.1', + 'com.github.apl-devs:appintro:v4.2.2', + 'com.github.jetradarmobile:android-snowfall:1.2.1', + 'com.google.android.material:material:1.4.0' + ) androidTestImplementation "tools.fastlane:screengrab:1.2.0"
- def leanback_version = "1.1.0-rc01" - - implementation "androidx.leanback:leanback:$leanback_version" - - // leanback-preference is an add-on that provides a settings UI for TV apps. - implementation "androidx.leanback:leanback-preference:$leanback_version" - - // leanback-paging is an add-on that simplifies adding paging support to a RecyclerView Adapter. - implementation "androidx.leanback:leanback-paging:1.1.0-alpha07" - - // leanback-tab is an add-on that provides customized TabLayout to be used as the top navigation bar. - implementation "androidx.leanback:leanback-tab:1.1.0-beta01" - - //add snowflake fun - implementation 'com.github.jetradarmobile:android-snowfall:1.2.1' - }
-// Map for the version code that gives each ABI a value. -ext.abiCodes = ['armeabi-v7a': '1', 'arm64-v8a': '2', 'mips': '3', 'x86': '4', 'x86_64': '5'] - -import com.android.build.OutputFile - // For each APK output variant, override version code of outputs based on ABI codes // ex) 'mips' -> 3xxx // ex) 'x86' -> 4xxx android.applicationVariants.all { variant -> variant.outputs.each { output -> - def baseVersionCode = project.ext.abiCodes.get(output.getFilter(OutputFile.ABI)) + def baseVersionCode = project.ext.abiCodes.get(output.getFilter(com.android.build.OutputFile.ABI)) if (baseVersionCode != null) { output.versionCodeOverride = Integer.valueOf(baseVersionCode + variant.versionCode) } diff --git a/app/build.gradle b/app/build.gradle index 1d365f24..a13b7228 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,78 +1,25 @@ -apply plugin: 'com.android.application' - - -// Create a variable called keystorePropertiesFile, and initialize it to your -// keystore.properties file, in the rootProject folder. -def keystorePropertiesFile = rootProject.file("keystore.properties") - -// Initialize a new Properties() object called keystoreProperties. -def keystoreProperties = new Properties() - -// Load your keystore.properties file into the keystoreProperties object. -if (keystorePropertiesFile.canRead()) { - keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) -} - -/* gets the version name from the latest Git tag, stripping the leading v off */ -def getVersionName = { -> - def stdout = new ByteArrayOutputStream() - exec { - commandLine 'git', 'describe', '--tags', '--always' - standardOutput = stdout - } - return stdout.toString().trim() -} +apply from: "../commons-device.gradle"
android { - signingConfigs { - release { - if (keystorePropertiesFile.canRead()) { - keyAlias keystoreProperties['keyAlias'] - keyPassword keystoreProperties['keyPassword'] - storeFile file(keystoreProperties['storeFile']) - storePassword keystoreProperties['storePassword'] - } - } - } - - compileSdkVersion 30 - buildToolsVersion '30.0.3' defaultConfig { applicationId "org.torproject.android" versionName getVersionName() minSdkVersion 16 targetSdkVersion 30 } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - aaptOptions { - cruncherEnabled = false - } lintOptions { - checkReleaseBuilds false - abortOnError false - htmlReport true xmlReport false textReport false - lintConfig file("../lint.xml") } buildTypes { release { minifyEnabled false shrinkResources false - proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' - signingConfig signingConfigs.release } }
- aaptOptions { - cruncherEnabled = false - } - flavorDimensions "free"
productFlavors { @@ -88,61 +35,24 @@ android { archivesBaseName = "Orbot-$versionName" } } - - splits { - - // Configures multiple APKs based on ABI. This helps keep the size down, since PT binaries can be large. - abi { - - // Enables building multiple APKs per ABI. - enable true - - // By default all ABIs are included, so use reset() and include to specify that we only - // want APKs for x86 and x86_64. - - // Resets the list of ABIs that Gradle should create APKs for to none. - reset() - - // Specifies a list of ABIs that Gradle should create APKs for. - include "x86", "armeabi-v7a", "x86_64", "arm64-v8a" - - // Specifies that we do not want to also generate a universal APK that includes all ABIs. - universalApk true - } - } - - packagingOptions { - exclude 'META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version' - } -} - -repositories { - jcenter { - content { - includeGroup('com.jraska') - includeGroup('tools.fastlane') - } - } }
dependencies { - implementation project(':orbotservice') - implementation 'com.google.android.material:material:1.4.0' - implementation 'pl.bclogic:pulsator4droid:1.0.3' - implementation 'com.github.apl-devs:appintro:v4.2.2' - implementation project(path: ':appcore') - implementation project(path: ':intentintegrator') + implementation( + project(path: ':appcore'), + project(path: ':intentintegrator'), + project(':orbotservice'), + 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0', + 'com.android.volley:volley:1.2.0', + 'com.github.apl-devs:appintro:v4.2.2', + 'com.github.jetradarmobile:android-snowfall:1.2.1', + 'com.github.tladesignz:IPtProxy:1.0.0', + 'com.google.android.material:material:1.4.0', + 'pl.bclogic:pulsator4droid:1.0.3' + ) androidTestImplementation "tools.fastlane:screengrab:1.2.0" - implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' - implementation 'com.android.volley:volley:1.2.0' - implementation 'com.github.tladesignz:IPtProxy:1.0.0' - - implementation 'com.github.jetradarmobile:android-snowfall:1.2.1' }
-// Map for the version code that gives each ABI a value. -ext.abiCodes = ['armeabi-v7a': '1', 'arm64-v8a': '2', 'mips': '3', 'x86': '4', 'x86_64': '5'] - // For each APK output variant, override version code of outputs based on ABI codes // ex) 'mips' -> 3xxx // ex) 'x86' -> 4xxx @@ -153,4 +63,4 @@ android.applicationVariants.all { variant -> output.versionCodeOverride = Integer.valueOf(variant.versionCode) + Integer.valueOf(baseVersionCode) } } -} +} \ No newline at end of file diff --git a/appcore/build.gradle b/appcore/build.gradle index ade6ddf3..5c424106 100644 --- a/appcore/build.gradle +++ b/appcore/build.gradle @@ -1,16 +1,14 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' +plugins { + id 'com.android.library' + id 'kotlin-android' + id 'kotlin-android-extensions' +} +apply from: "../commons.gradle"
android { - compileSdkVersion 30 - buildToolsVersion '30.0.3' - defaultConfig { minSdkVersion 16 targetSdkVersion 30 - versionCode 1 - versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" @@ -22,19 +20,18 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } }
dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" - implementation 'androidx.core:core-ktx:1.5.0' - implementation 'androidx.appcompat:appcompat:1.3.0' - implementation project(path: ':orbotservice') + implementation( + project(path: ':orbotservice'), + "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version", + 'androidx.core:core-ktx:1.6.0', + 'androidx.appcompat:appcompat:1.3.1' + ) + androidTestImplementation ( + 'androidx.test.ext:junit:1.1.3', + 'androidx.test.espresso:espresso-core:3.4.0' + ) testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - } \ No newline at end of file diff --git a/build.gradle b/build.gradle index 3bcead6e..b088404e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,8 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext { - kotlin_version = '1.4.32' + kotlin_version = '1.5.20' + palette_version = "1.0.0" } repositories { mavenCentral() @@ -9,7 +10,7 @@ buildscript { maven { url 'https://jitpack.io' } } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:7.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/commons-device.gradle b/commons-device.gradle new file mode 100644 index 00000000..1957d67c --- /dev/null +++ b/commons-device.gradle @@ -0,0 +1,78 @@ +/* + Applies across android app modules: {app, app-mini, app-tv} + */ +apply plugin: 'com.android.application' +apply from: "../commons.gradle" + +ext.abiCodes = ['armeabi-v7a': '1', 'arm64-v8a': '2', 'mips': '3', 'x86': '4', 'x86_64': '5'] + +ext.createKeyStoreProperties = { -> + def keystorePropertiesFile = rootProject.file("keystore.properties") + def properties = new Properties() + if (keystorePropertiesFile.canRead()) { + properties.load(new FileInputStream(keystorePropertiesFile)) + } + return properties +} + +/* gets the version name from the latest Git tag, stripping the leading v off */ +ext.getVersionName = { -> + def stdout = new ByteArrayOutputStream() + exec { + commandLine 'git', 'describe', '--tags', '--always' + standardOutput = stdout + } + return stdout.toString().trim() +} + +def keystoreProperties = createKeyStoreProperties() + +android { + + signingConfigs { + release { + if (!keystoreProperties.stringPropertyNames().isEmpty()) { + keyAlias keystoreProperties['keyAlias'] + keyPassword keystoreProperties['keyPassword'] + storeFile file(keystoreProperties['storeFile']) + storePassword keystoreProperties['storePassword'] + } + } + } + + buildTypes { + release { + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' + signingConfig signingConfigs.release + } + } + + lintOptions { + checkReleaseBuilds false + abortOnError false + } + + splits { + abi { + enable true + reset() + include "x86", "armeabi-v7a", "x86_64", "arm64-v8a" + universalApk false + } + } + + packagingOptions { + exclude 'META-INF/androidx.localbroadcastmanager_localbroadcastmanager.version' + } +} + +repositories { + jcenter { + content { + includeGroup('com.jraska') + includeGroup('tools.fastlane') + } + } +} + + diff --git a/commons-limited-device.gradle b/commons-limited-device.gradle new file mode 100644 index 00000000..0e9751e2 --- /dev/null +++ b/commons-limited-device.gradle @@ -0,0 +1,13 @@ +/* + Applies across android app module with limited capabilities: {app-mini, app-tv} + */ +apply from: "../commons-device.gradle" + +android { + buildTypes { + release { + minifyEnabled true + shrinkResources true + } + } +} \ No newline at end of file diff --git a/commons.gradle b/commons.gradle new file mode 100644 index 00000000..f03bd3b2 --- /dev/null +++ b/commons.gradle @@ -0,0 +1,11 @@ +/* + Applies across all modules + */ +android { + compileSdkVersion 30 + buildToolsVersion '30.0.3' + compileOptions { + sourceCompatibility JavaVersion.VERSION_11 + targetCompatibility JavaVersion.VERSION_11 + } +} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cdc95ef6..e1e2fd2c 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=22449f5231796abd892c98b2a07c9ceebe4688d192cd2d6763f8e3bf8acbedeb -distributionUrl=https://services.gradle.org/distributions/gradle-6.7.1-all.zip +distributionSha256Sum=13bf8d3cf8eeeb5770d19741a59bde9bd966dd78d17f1bbad787a05ef19d1c2d +distributionUrl=https://services.gradle.org/distributions/gradle-7.0.2-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/intentintegrator/build.gradle b/intentintegrator/build.gradle index f5822fc0..624b09e1 100644 --- a/intentintegrator/build.gradle +++ b/intentintegrator/build.gradle @@ -1,14 +1,10 @@ apply plugin: 'com.android.library' +apply from: "../commons.gradle"
android { - compileSdkVersion 30 - buildToolsVersion "30.0.3" - defaultConfig { minSdkVersion 16 targetSdkVersion 30 - versionCode 1 - versionName "1.0" consumerProguardFiles "consumer-rules.pro" }
@@ -18,13 +14,9 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } }
dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) - implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.appcompat:appcompat:1.3.1' } \ No newline at end of file diff --git a/orbotservice/build.gradle b/orbotservice/build.gradle index 5fb08e3a..a47c6baa 100644 --- a/orbotservice/build.gradle +++ b/orbotservice/build.gradle @@ -1,8 +1,7 @@ apply plugin: 'com.android.library' +apply from: "../commons.gradle"
android { - compileSdkVersion 30 - buildToolsVersion '30.0.3' ndkVersion '21.3.6528147'
sourceSets { @@ -15,10 +14,7 @@ android { minSdkVersion 16 targetSdkVersion 30 } - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } + buildTypes { release { minifyEnabled false @@ -26,18 +22,14 @@ android { } }
- aaptOptions { - cruncherEnabled = false - }
+ //Note: abortOnError turned off to lint error - needs fix lintOptions { checkReleaseBuilds false - abortOnError true - + abortOnError false htmlReport true xmlReport false textReport false - lintConfig file("../lint.xml") }
@@ -47,21 +39,17 @@ android { }
dependencies { - implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' - implementation 'com.gitlab.guardianproject:jsocksandroid:1.0.4' - - implementation 'com.jaredrummler:android-shell:1.0.0' - - implementation 'androidx.core:core:1.6.0' - implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0' - testImplementation 'junit:junit:4.13.2' - - implementation 'com.offbynull.portmapper:portmapper:2.0.5' - - implementation 'info.guardianproject:geoip:20191217' - api 'info.guardianproject:jtorctl:0.4.5.7' - implementation 'info.guardianproject:tor-android:0.4.5.9' - - implementation 'com.github.tladesignz:IPtProxy:1.0.0' + implementation( + 'androidx.core:core:1.6.0', + 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0', + 'com.github.tladesignz:IPtProxy:1.0.0', + 'com.gitlab.guardianproject:jsocksandroid:1.0.4', + 'com.jaredrummler:android-shell:1.0.0', + 'com.offbynull.portmapper:portmapper:2.0.5', + 'info.guardianproject:geoip:20191217', + 'info.guardianproject:tor-android:0.4.5.9', + + ) + testImplementation 'junit:junit:4.13.2' }
tor-commits@lists.torproject.org