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)