| buildscript { |
| repositories { |
| jcenter() |
| } |
| dependencies { |
| classpath libraries.android_tools |
| } |
| } |
| |
| description = 'Conscrypt: Android Benchmarks' |
| |
| ext { |
| androidHome = "$System.env.ANDROID_HOME" |
| androidSdkInstalled = file("$androidHome").exists() |
| androidVersionCode = 1 |
| androidVersionName = "$version" |
| androidMinSdkVersion = 24 |
| androidTargetSdkVersion = 25 |
| androidBuildToolsVersion = "25.0.0" |
| androidBuildToolsDir = "${androidHome}/build-tools/${androidBuildToolsVersion}" |
| } |
| |
| if (androidSdkInstalled) { |
| apply plugin: 'com.android.library' |
| |
| android { |
| compileSdkVersion androidTargetSdkVersion |
| buildToolsVersion androidBuildToolsVersion |
| |
| compileOptions { |
| sourceCompatibility androidMinJavaVersion; |
| targetCompatibility androidMinJavaVersion |
| } |
| |
| defaultConfig { |
| minSdkVersion androidMinSdkVersion |
| targetSdkVersion androidTargetSdkVersion |
| versionCode androidVersionCode |
| versionName androidVersionName |
| } |
| lintOptions { |
| // Some Caliper classes reference packages that don't exist on Android |
| disable 'InvalidPackage' |
| } |
| sourceSets.main { |
| java { |
| srcDirs = [ |
| "src/main/java" |
| ] |
| } |
| } |
| } |
| |
| dependencies { |
| compile project(':conscrypt-android'), |
| project(':conscrypt-benchmark-base'), |
| project(':conscrypt-testing') |
| |
| compile 'com.google.caliper:caliper:1.0-beta-2' |
| compile libraries.bouncycastle_provider |
| |
| } |
| |
| // This task bundles up everything we're going to send to the device into a single jar. |
| // We need to include all the Conscrypt code plus the Bouncy Castle jar because the platform |
| // version of Bouncy Castle is jarjared. |
| task depsJar(type: Jar, dependsOn: 'assembleRelease') { |
| archiveName = 'bundled-deps.jar' |
| from { |
| configurations.compile.filter { |
| // Find the jars from our project plus BC |
| it.name.endsWith(".jar") && (it.path.startsWith("${rootDir}") || it.path.contains('org.bouncycastle')) |
| }.collect { |
| zipTree(it) |
| } |
| } |
| from { |
| // Also include the classes.jar from our Android libraries |
| ['.', "${rootDir}/android"].collect { |
| zipTree(it + '/build/intermediates/bundles/default/classes.jar') |
| } |
| } |
| // Bouncy Castle signs their jar, which causes our combined jar to fail to verify. Just |
| // strip out the signature files. |
| exclude "META-INF/*.RSA", "META-INF/*.SF", "META-INF/*.DSA" |
| } |
| |
| task runBenchmarks(dependsOn: depsJar) { |
| doLast { |
| // First, determine which ABI the device uses so that we can send the right native lib |
| new ByteArrayOutputStream().withStream { stream -> |
| exec { |
| commandLine = ['adb', 'shell', 'getprop', 'ro.product.cpu.abi'] |
| standardOutput = stream |
| } |
| ext.androidDeviceAbi = stream.toString().trim() |
| ext.androidDevice64Bit = ext.androidDeviceAbi.contains('64') |
| } |
| def nativeLibPath = "/system/lib${androidDevice64Bit ? '64' : ''}/libconscrypt_jni.so" |
| // Send the native library to the device |
| exec { |
| executable "${androidHome}/platform-tools/adb" |
| args 'push' |
| args "${rootDir}/android/build/intermediates/bundles/default/jni/${androidDeviceAbi}/libconscrypt_jni.so" |
| args nativeLibPath |
| } |
| // Execute the benchmarks |
| exec { |
| workingDir "${rootDir}" |
| environment PATH: "${androidBuildToolsDir}:$System.env.PATH" |
| environment JACK_JAR: "${androidBuildToolsDir}/jack.jar" |
| |
| executable 'java' |
| args '-cp', 'benchmark-android/vogar.jar', 'vogar.Vogar' |
| args '--classpath', 'benchmark-android/build/libs/bundled-deps.jar' |
| args '--benchmark' |
| args '--language=JN' |
| args '--mode=app_process' |
| args 'org.conscrypt.CaliperAlpnBenchmark' |
| args 'org.conscrypt.CaliperClientSocketBenchmark' |
| args 'org.conscrypt.CaliperEngineHandshakeBenchmark' |
| args 'org.conscrypt.CaliperEngineWrapBenchmark' |
| } |
| // Clean up the native library |
| exec { |
| commandLine = ['adb', 'shell', 'rm', '-f', nativeLibPath] |
| } |
| } |
| } |
| } else { |
| logger.warn('Android SDK has not been detected. The Android Benchmark module will not be built.') |
| |
| // Disable all tasks |
| tasks.collect { |
| it.enabled = false |
| } |
| } |