diff --git a/MANIFEST.in b/MANIFEST.in index ec4b7992..62db4b98 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -746,6 +746,7 @@ include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/short_description.txt include tests/source-files/com.nextcloud.client/src/versionDev/fastlane/metadata/android/en-US/title.txt include tests/source-files/com.seafile.seadroid2/app/build.gradle +include tests/source-files/de.varengold.activeTAN/build.gradle include tests/source-files/dev.patrickgold.florisboard/app/build.gradle.kts include tests/source-files/eu.siacs.conversations/build.gradle include tests/source-files/eu.siacs.conversations/metadata/en-US/name.txt diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 15635923..55f02955 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -1691,11 +1691,11 @@ def parse_androidmanifests(paths, app): vercode = None package = None - flavour = None + flavours = None temp_app_id = None temp_version_name = None if len(app.get('Builds', [])) > 0 and 'gradle' in app['Builds'][-1] and app['Builds'][-1].gradle: - flavour = app['Builds'][-1].gradle[-1] + flavours = app['Builds'][-1].gradle if path.endswith('.gradle') or path.endswith('.gradle.kts'): with open(path, 'r', encoding='utf-8') as f: @@ -1753,12 +1753,14 @@ def parse_androidmanifests(paths, app): inside_required_flavour -= 1 if inside_required_flavour == 1: inside_required_flavour -= 1 - else: - if flavour: + elif flavours: + for flavour in flavours: if re.match(r'.*[\'"\s]{flavour}[\'"\s].*\{{.*'.format(flavour=flavour), line): inside_required_flavour = 2 + break elif re.match(r'.*[\'"\s]{flavour}[\'"\s].*'.format(flavour=flavour), line): inside_required_flavour = 1 + break if '{' in line: inside_flavour_group += 1 diff --git a/tests/common.TestCase b/tests/common.TestCase index 83f9e3af..88ba20cc 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -1264,6 +1264,19 @@ class CommonTest(unittest.TestCase): self.assertEqual(('1.6.34-fdroid', '105', 'com.jens.automation2'), fdroidserver.common.parse_androidmanifests(paths, app)) + app = fdroidserver.metadata.App() + build = fdroidserver.metadata.Build() + build.gradle = ['VAR', 'prod'] + app['Builds'] = [build] + app.id = 'de.varengold.activeTAN' + paths = [ + os.path.join('source-files', 'de.varengold.activeTAN', 'build.gradle'), + ] + for path in paths: + self.assertTrue(os.path.isfile(path)) + self.assertEqual(('2021-06-30', '34', 'de.varengold.activeTAN'), + fdroidserver.common.parse_androidmanifests(paths, app)) + def test_get_all_gradle_and_manifests(self): """Test whether the function works with relative and absolute paths""" a = fdroidserver.common.get_all_gradle_and_manifests(Path('source-files/cn.wildfirechat.chat')) diff --git a/tests/source-files/de.varengold.activeTAN/build.gradle b/tests/source-files/de.varengold.activeTAN/build.gradle new file mode 100644 index 00000000..e950be92 --- /dev/null +++ b/tests/source-files/de.varengold.activeTAN/build.gradle @@ -0,0 +1,115 @@ +apply plugin: 'com.android.application' + +android { + compileSdkVersion versions.compileSdk + defaultConfig { + versionCode 34 + versionName "2021-06-30" + + // Requires API level 23 (Android 6.0) to use Android keystore system for cryptography. + minSdkVersion 23 + targetSdkVersion versions.targetSdk + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + vectorDrawables.useSupportLibrary = true + + javaCompileOptions { + annotationProcessorOptions { + // Export database schema history as JSON files. + arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] + } + } + sourceSets { + // Include database schema history for migration testing. + androidTest.assets.srcDirs += files("$projectDir/schemas".toString()) + } + } + + buildFeatures { + viewBinding = true + } + + buildTypes { + debug { + // Don't mess with the release versions during debugging, so use a different appId. + applicationIdSuffix ".debug" + debuggable true + } + release { + minifyEnabled true + shrinkResources true + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + + flavorDimensions "client", "environment" + productFlavors { + prod { + dimension "environment" + } + + qs { + dimension "environment" + // To be able to install a second app variant, we must change the applicationId. + // Otherwise it would not be possible to use the same device for testing and production. + applicationIdSuffix ".QS" + } + + EFD { + // Demo portal efdis-online.de (extern) / dailybuild.efdis-online.de (intern) + dimension "client" + applicationId "de.efdis.activeTAN" + } + + VAR { + dimension "client" + applicationId "de.varengold.activeTAN" + } + + } + compileOptions { + // ZXing uses Java 8 language features from the core library + coreLibraryDesugaringEnabled true + + targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_1_8 + } + +} + +tasks.withType(JavaCompile) { + options.deprecation = true +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + + implementation project(':material-design-icons') + implementation project(":barcodescanner") + + implementation 'com.google.android.material:material:1.3.0' + + implementation 'androidx.appcompat:appcompat:1.3.0' + implementation 'androidx.biometric:biometric:1.1.0' + + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.recyclerview:recyclerview:1.2.1' + + coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' + implementation 'com.google.zxing:core:' + versions.zxing + + def room_version = '2.3.0' + implementation "androidx.room:room-runtime:$room_version" + annotationProcessor "androidx.room:room-compiler:$room_version" + androidTestImplementation "androidx.room:room-testing:$room_version" + + testImplementation 'junit:junit:4.13.1' + + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test:runner:1.3.0' + androidTestImplementation 'androidx.test:rules:1.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.3.0' + androidTestImplementation 'androidx.test.espresso:espresso-intents:3.3.0' +}