| apply plugin: 'com.android.application' | 
 |  | 
 | repositories { | 
 |     jcenter() | 
 |     maven { | 
 |         url "https://oss.sonatype.org/content/repositories/snapshots" | 
 |     } | 
 |     flatDir { | 
 |         dirs 'aars' | 
 |     } | 
 | } | 
 |  | 
 | android { | 
 |     configurations { | 
 |         extractForNativeBuild | 
 |     } | 
 |     compileOptions { | 
 |         sourceCompatibility 1.8 | 
 |         targetCompatibility 1.8 | 
 |     } | 
 |     compileSdkVersion rootProject.compileSdkVersion | 
 |     buildToolsVersion rootProject.buildToolsVersion | 
 |     defaultConfig { | 
 |         applicationId "org.pytorch.testapp" | 
 |         minSdkVersion rootProject.minSdkVersion | 
 |         targetSdkVersion rootProject.targetSdkVersion | 
 |         versionCode 1 | 
 |         versionName "1.0" | 
 |         ndk { | 
 |             abiFilters ABI_FILTERS.split(",") | 
 |         } | 
 |         // Commented due to dependency on local copy of pytorch_android aar to aars folder | 
 |         //externalNativeBuild { | 
 |         //    cmake { | 
 |         //        abiFilters ABI_FILTERS.split(",") | 
 |         //        arguments "-DANDROID_STL=c++_shared" | 
 |         //    } | 
 |         //} | 
 |         buildConfigField("String", "MODULE_ASSET_NAME", "\"mobilenet2q.pt\"") | 
 |         buildConfigField("String", "LOGCAT_TAG", "@string/app_name") | 
 |         buildConfigField("long[]", "INPUT_TENSOR_SHAPE", "new long[]{1, 3, 224, 224}") | 
 |         buildConfigField("boolean", "NATIVE_BUILD", 'false') | 
 |         buildConfigField("boolean", "USE_VULKAN_DEVICE", 'false') | 
 |         buildConfigField( | 
 |                 "int", | 
 |                 "BUILD_LITE_INTERPRETER", | 
 |                 System.env.BUILD_LITE_INTERPRETER != null ? System.env.BUILD_LITE_INTERPRETER : "1" | 
 |         ) | 
 |         addManifestPlaceholders([APP_NAME: "@string/app_name", MAIN_ACTIVITY: "org.pytorch.testapp.MainActivity"]) | 
 |     } | 
 |     buildTypes { | 
 |         debug { | 
 |             minifyEnabled false | 
 |             debuggable true | 
 |         } | 
 |         release { | 
 |             minifyEnabled false | 
 |         } | 
 |     } | 
 |     // Commented due to dependency on local copy of pytorch_android aar to aars folder | 
 |     //externalNativeBuild { | 
 |     //    cmake { | 
 |     //        path "CMakeLists.txt" | 
 |     //    } | 
 |     //} | 
 |     flavorDimensions "model", "build", "activity" | 
 |     productFlavors { | 
 |         mnet { | 
 |             dimension "model" | 
 |             applicationIdSuffix ".mnet" | 
 |             buildConfigField("String", "MODULE_ASSET_NAME", "\"mobilenet_v2.ptl\"") | 
 |             addManifestPlaceholders([APP_NAME: "MNET"]) | 
 |             buildConfigField("String", "LOGCAT_TAG", "\"pytorch-mnet\"") | 
 |         } | 
 |         // NB: This is not working atm https://github.com/pytorch/pytorch/issues/102966 | 
 |         mnetVulkan { | 
 |             dimension "model" | 
 |             applicationIdSuffix ".mnet_vulkan" | 
 |             buildConfigField("String", "MODULE_ASSET_NAME", "\"mobilenet_v2_vulkan.ptl\"") | 
 |             buildConfigField("boolean", "USE_VULKAN_DEVICE", 'true') | 
 |             addManifestPlaceholders([APP_NAME: "MNET_VULKAN"]) | 
 |             buildConfigField("String", "LOGCAT_TAG", "\"pytorch-mnet-vulkan\"") | 
 |         } | 
 |         resnet18 { | 
 |             dimension "model" | 
 |             applicationIdSuffix ".resnet18" | 
 |             buildConfigField("String", "MODULE_ASSET_NAME", "\"resnet18.ptl\"") | 
 |             addManifestPlaceholders([APP_NAME: "RN18"]) | 
 |             buildConfigField("String", "LOGCAT_TAG", "\"pytorch-resnet18\"") | 
 |         } | 
 |         local { | 
 |             dimension "build" | 
 |         } | 
 |         nightly { | 
 |             dimension "build" | 
 |         } | 
 |         aar { | 
 |             dimension "build" | 
 |         } | 
 |         // Commented due to dependency on local copy of pytorch_android aar to aars folder | 
 |         //nativeBuild { | 
 |         //    dimension "build" | 
 |         //    buildConfigField("boolean", "NATIVE_BUILD", "true") | 
 |         //} | 
 |         camera { | 
 |             dimension "activity" | 
 |             addManifestPlaceholders([MAIN_ACTIVITY: "org.pytorch.testapp.CameraActivity"]) | 
 |         } | 
 |         base { | 
 |             dimension "activity" | 
 |             sourceSets { | 
 |                 main { | 
 |                     java { | 
 |                         exclude 'org/pytorch/testapp/CameraActivity.java' | 
 |                     } | 
 |                 } | 
 |             } | 
 |         } | 
 |     } | 
 |     packagingOptions { | 
 |         doNotStrip '**.so' | 
 |     } | 
 |  | 
 |     // Filtering for CI | 
 |     if (!testAppAllVariantsEnabled.toBoolean()) { | 
 |         variantFilter { variant -> | 
 |             def names = variant.flavors*.name | 
 |             if (names.contains("nightly") | 
 |                 || names.contains("camera") | 
 |                 || names.contains("aar") | 
 |                 || names.contains("nativeBuild")) { | 
 |                 setIgnore(true) | 
 |             } | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | tasks.all { task -> | 
 |     // Disable externalNativeBuild for all but nativeBuild variant | 
 |     if (task.name.startsWith('externalNativeBuild') | 
 |           && !task.name.contains('NativeBuild')) { | 
 |         task.enabled = false | 
 |     } | 
 | } | 
 |  | 
 | dependencies { | 
 |     implementation 'com.android.support:appcompat-v7:28.0.0' | 
 |     implementation 'com.facebook.soloader:nativeloader:0.10.5' | 
 |  | 
 |     localImplementation project(':pytorch_android') | 
 |     localImplementation project(':pytorch_android_torchvision') | 
 |  | 
 |     // Commented due to dependency on local copy of pytorch_android aar to aars folder | 
 |     //nativeBuildImplementation(name: 'pytorch_android-release', ext: 'aar') | 
 |     //nativeBuildImplementation(name: 'pytorch_android_torchvision-release', ext: 'aar') | 
 |     //extractForNativeBuild(name: 'pytorch_android-release', ext: 'aar') | 
 |  | 
 |     nightlyImplementation 'org.pytorch:pytorch_android:2.2.0-SNAPSHOT' | 
 |     nightlyImplementation 'org.pytorch:pytorch_android_torchvision:2.2.0-SNAPSHOT' | 
 |  | 
 |     aarImplementation(name:'pytorch_android', ext:'aar') | 
 |     aarImplementation(name:'pytorch_android_torchvision', ext:'aar') | 
 |     aarImplementation 'com.facebook.soloader:nativeloader:0.10.5' | 
 |     aarImplementation 'com.facebook.fbjni:fbjni-java-only:0.2.2' | 
 |  | 
 |     def camerax_version = "1.0.0-alpha05" | 
 |     cameraImplementation "androidx.camera:camera-core:$camerax_version" | 
 |     cameraImplementation "androidx.camera:camera-camera2:$camerax_version" | 
 |     cameraImplementation 'com.google.android.material:material:1.0.0-beta01' | 
 | } | 
 |  | 
 | task extractAARForNativeBuild { | 
 |     doLast { | 
 |         configurations.extractForNativeBuild.files.each { | 
 |             def file = it.absoluteFile | 
 |             copy { | 
 |                 from zipTree(file) | 
 |                 into "$buildDir/$file.name" | 
 |                 include "headers/**" | 
 |                 include "jni/**" | 
 |             } | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | tasks.whenTaskAdded { task -> | 
 |   if (task.name.contains('externalNativeBuild')) { | 
 |     task.dependsOn(extractAARForNativeBuild) | 
 |   } | 
 | } |