| apply plugin: 'com.android.library' | 
 | apply plugin: 'maven' | 
 |  | 
 | android { | 
 |     compileSdkVersion rootProject.compileSdkVersion | 
 |     buildToolsVersion rootProject.buildToolsVersion | 
 |  | 
 |     defaultConfig { | 
 |         minSdkVersion rootProject.minSdkVersion | 
 |         targetSdkVersion rootProject.targetSdkVersion | 
 |         versionCode 0 | 
 |         versionName "0.1" | 
 |  | 
 |         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | 
 |         ndk { | 
 |             abiFilters ABI_FILTERS.split(",") | 
 |         } | 
 |         externalNativeBuild { | 
 |             cmake { | 
 |               if(System.env.BUILD_LITE_INTERPRETER == '0') { | 
 |                 arguments "-DANDROID_STL=c++_shared", "-DBUILD_LITE_INTERPRETER=OFF", "-DUSE_LITE_INTERPRETER_PROFILER=OFF" | 
 |               } else { | 
 |                 arguments "-DANDROID_STL=c++_shared", "-DUSE_LITE_INTERPRETER_PROFILER=OFF" | 
 |               } | 
 |             } | 
 |         } | 
 |     } | 
 |     buildTypes { | 
 |         debug { | 
 |             minifyEnabled false | 
 |             debuggable true | 
 |         } | 
 |         release { | 
 |             minifyEnabled false | 
 |         } | 
 |     } | 
 |     sourceSets { | 
 |         main { | 
 |             java { | 
 |               if(System.env.BUILD_LITE_INTERPRETER == '0') { | 
 |                 println 'Build pytorch_jni' | 
 |                 exclude 'org/pytorch/LiteModuleLoader.java' | 
 |                 exclude 'org/pytorch/LiteNativePeer.java' | 
 |               } else { | 
 |                 println 'Build pytorch_jni_lite' | 
 |               } | 
 |             } | 
 |             jniLibs.srcDirs = ['src/main/jniLibs'] | 
 |             manifest.srcFile 'src/main/AndroidManifest.xml' | 
 |         } | 
 |         androidTest { | 
 |             java { | 
 |                 if(System.env.BUILD_LITE_INTERPRETER == '0') { | 
 |                     println 'Build test for full jit (pytorch_jni)' | 
 |                     exclude 'org/pytorch/PytorchHostTests.java' | 
 |                     exclude 'org/pytorch/PytorchLiteInstrumentedTests.java' | 
 |                     exclude 'org/pytorch/suite/PytorchLiteInstrumentedTestSuite.java' | 
 |                 } else { | 
 |                     println 'Build test for lite interpreter (pytorch_jni_lite)' | 
 |                     exclude 'org/pytorch/PytorchHostTests.java' | 
 |                     exclude 'org/pytorch/PytorchInstrumentedTests.java' | 
 |                     exclude 'org/pytorch/suite/PytorchInstrumentedTestSuite.java' | 
 |                 } | 
 |             } | 
 |         } | 
 |     } | 
 |     externalNativeBuild { | 
 |         cmake { | 
 |             path "CMakeLists.txt" | 
 |         } | 
 |     } | 
 |  | 
 |     packagingOptions { | 
 |         if (nativeLibsDoNotStrip.toBoolean()) { | 
 |             doNotStrip "**/*.so" | 
 |             logger.warn('WARNING: nativeLibsDoNotStrip==true; debug symbols included') | 
 |         } | 
 |     } | 
 |  | 
 |     useLibrary 'android.test.runner' | 
 |     useLibrary 'android.test.base' | 
 |     useLibrary 'android.test.mock' | 
 | } | 
 |  | 
 | dependencies { | 
 |     implementation 'com.facebook.fbjni:fbjni-java-only:' + rootProject.fbjniJavaOnlyVersion | 
 |     implementation 'com.facebook.soloader:nativeloader:' + rootProject.soLoaderNativeLoaderVersion | 
 |  | 
 |     testImplementation 'junit:junit:' + rootProject.junitVersion | 
 |     testImplementation 'androidx.test:core:' + rootProject.coreVersion | 
 |  | 
 |     androidTestImplementation 'junit:junit:' + rootProject.junitVersion | 
 |     androidTestImplementation 'androidx.test:core:' + rootProject.coreVersion | 
 |     androidTestImplementation 'androidx.test.ext:junit:' + rootProject.extJUnitVersion | 
 |     androidTestImplementation 'androidx.test:rules:' + rootProject.rulesVersion | 
 |     androidTestImplementation 'androidx.test:runner:' + rootProject.runnerVersion | 
 | } | 
 |  | 
 | apply from: rootProject.file('gradle/release.gradle') | 
 |  | 
 | task sourcesJar(type: Jar) { | 
 |     from android.sourceSets.main.java.srcDirs | 
 |     classifier = 'sources' | 
 | } | 
 |  | 
 | def getLibtorchHeadersDir() { | 
 |   def abi = ABI_FILTERS.split(",")[0] | 
 |   return "$rootDir/pytorch_android/src/main/cpp/libtorch_include/$abi" | 
 | } | 
 |  | 
 | afterEvaluate { | 
 |   if (POM_PACKAGING == 'aar') { | 
 |     android.libraryVariants.all { variant -> | 
 |       variant.outputs.each { output -> | 
 |         File f = output.outputFile | 
 |         if (f.name.endsWith(".aar")) { | 
 |           output.assemble.finalizedBy addFolderToAarTask( | 
 |               "addHeadersToAar" + variant.name, | 
 |               f.path, | 
 |               getLibtorchHeadersDir(), | 
 |               "headers") | 
 |         } | 
 |       } | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | tasks.whenTaskAdded { task -> | 
 |   if (task.name.startsWith("bundle") && task.name.endsWith("Aar")) { | 
 |     doLast { | 
 |       addFolderToAar("addHeadersTo" + task.name, task.archivePath, getLibtorchHeadersDir(), 'headers') | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | def addFolderToAarTask(taskName, aarPath, folderPath, folderPathInAar) { | 
 |   return tasks.register(taskName) { | 
 |     doLast { | 
 |       addFolderToAar(taskName, aarPath, folderPath, folderPathInAar) | 
 |     } | 
 |   } | 
 | } | 
 |  | 
 | def addFolderToAar(taskName, aarPath, folderPath, folderPathInAar) { | 
 |     def tmpDir = file("${buildDir}/${taskName}") | 
 |     tmpDir.mkdir() | 
 |     def tmpDirFolder = file("${tmpDir.path}/${folderPathInAar}") | 
 |     tmpDirFolder.mkdir() | 
 |     copy { | 
 |       from zipTree(aarPath) | 
 |       into tmpDir | 
 |     } | 
 |     copy { | 
 |       from fileTree(folderPath) | 
 |       into tmpDirFolder | 
 |     } | 
 |     ant.zip(destfile: aarPath) { | 
 |       fileset(dir: tmpDir.path) | 
 |     } | 
 |     delete tmpDir | 
 | } | 
 |  | 
 | artifacts.add('archives', sourcesJar) |