From 89a64f6d6da7ecb427e8d942a002ab8bee535d28 Mon Sep 17 00:00:00 2001 From: Kevin Gorham Date: Thu, 11 Oct 2018 03:19:01 -0400 Subject: [PATCH] protobufs finally are functional --- zcash-android-wallet-app/app/build.gradle.kts | 2 +- .../zcash-android-welding/build.gradle.kts | 12 ++-- .../custom-tasks.gradle.kts | 64 +++++++++++++++++++ .../src/main/proto/WalletData.proto | 6 ++ .../src/main/rust/lib.rs | 1 - 5 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 zcash-android-wallet-app/zcash-android-welding/custom-tasks.gradle.kts create mode 100644 zcash-android-wallet-app/zcash-android-welding/src/main/proto/WalletData.proto diff --git a/zcash-android-wallet-app/app/build.gradle.kts b/zcash-android-wallet-app/app/build.gradle.kts index 2fdbe6a..f0f1d68 100644 --- a/zcash-android-wallet-app/app/build.gradle.kts +++ b/zcash-android-wallet-app/app/build.gradle.kts @@ -27,7 +27,7 @@ android { // Note: we use string primitives for dependencies rather than something fancy (like buildSrc // variables) so that we can leverage the built-in lint check that alerts us about new versions dependencies { - compile(kotlin("stdlib-jdk7", KotlinCompilerVersion.VERSION)) + implementation(kotlin("stdlib-jdk7", KotlinCompilerVersion.VERSION)) implementation(project(":zcash-android-welding")) implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) implementation("androidx.appcompat:appcompat:1.0.0") diff --git a/zcash-android-wallet-app/zcash-android-welding/build.gradle.kts b/zcash-android-wallet-app/zcash-android-welding/build.gradle.kts index e81dc47..19c95b8 100644 --- a/zcash-android-wallet-app/zcash-android-welding/build.gradle.kts +++ b/zcash-android-wallet-app/zcash-android-welding/build.gradle.kts @@ -1,5 +1,7 @@ import org.jetbrains.kotlin.config.KotlinCompilerVersion +apply(from = "custom-tasks.gradle.kts") + plugins { id("com.android.library") id("kotlin-android-extensions") @@ -24,17 +26,15 @@ android { } } + sourceSets["main"].java.srcDirs("build/generated/source/wire") } dependencies { - compile(kotlin("stdlib-jdk7", KotlinCompilerVersion.VERSION)) + implementation(kotlin("stdlib-jdk7", KotlinCompilerVersion.VERSION)) + implementation("com.squareup.wire:wire-runtime:2.3.0-RC1") implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) implementation("com.android.support:appcompat-v7:28.0.0") testImplementation("junit:junit:4.12") androidTestImplementation("com.android.support.test:runner:1.0.2") androidTestImplementation("com.android.support.test.espresso:espresso-core:3.0.2") -} - -repositories { - mavenCentral() -} +} \ No newline at end of file diff --git a/zcash-android-wallet-app/zcash-android-welding/custom-tasks.gradle.kts b/zcash-android-wallet-app/zcash-android-welding/custom-tasks.gradle.kts new file mode 100644 index 0000000..3188e2f --- /dev/null +++ b/zcash-android-wallet-app/zcash-android-welding/custom-tasks.gradle.kts @@ -0,0 +1,64 @@ +val protoSrcDir = "src/main/proto" +val protoDestDir = "build/generated/source/wire" +val jniSrcDir = "src/main/rust" +val jniDestDir = "build/rust/target" + + +fun fileTreeWith(dir: String, vararg include: String): ConfigurableFileTree { + return fileTree(mapOf("dir" to dir, "include" to include)) +} + +buildscript { + dependencies { + classpath("com.squareup.wire:wire-compiler:2.3.0-RC1") + } + + repositories { + mavenCentral() + } + +} + +val generateProtobufClasses: TaskProvider = tasks.register("generateProtobufClasses").apply { + configure { + doFirst { + println("**** CREATING PROTOS ****") + delete(protoDestDir) + mkdir(protoDestDir) + } + description = "Generate Java classes from protocol buffer (.proto) schema files for use with Square's Wire library" + + fileTreeWith(protoSrcDir, "**/*.proto").forEach { file -> + doLast { + javaexec { + main = "com.squareup.wire.WireCompiler" + classpath = buildscript.configurations.getByName("classpath") + args = listOf("--proto_path=$protoSrcDir", "--java_out=$protoDestDir", file.path) + } + } + } + inputs.files(fileTreeWith(protoSrcDir, "**/*.proto")) + outputs.files(fileTreeWith(protoDestDir, "**")) + } +} + +val generateJniLibs: TaskProvider = tasks.register("generateJniLibs").apply { + configure { + doFirst { + println("**** CREATING JNI LIBS ****") + delete(jniDestDir) + mkdir(jniDestDir) + } + description = "Generate *.so files for connecting to the Rust wallet logic through the JNI" + doLast { + exec { + commandLine("./build-rust.sh") + } + } + inputs.files(fileTreeWith(jniSrcDir, "**/*")) + outputs.files(fileTreeWith(jniDestDir, "**/*.so")) + } +} + +tasks["preBuild"]!!.dependsOn(generateProtobufClasses) +tasks["preBuild"]!!.dependsOn(generateJniLibs) diff --git a/zcash-android-wallet-app/zcash-android-welding/src/main/proto/WalletData.proto b/zcash-android-wallet-app/zcash-android-welding/src/main/proto/WalletData.proto new file mode 100644 index 0000000..e69384c --- /dev/null +++ b/zcash-android-wallet-app/zcash-android-welding/src/main/proto/WalletData.proto @@ -0,0 +1,6 @@ +package cash.z.wallet.sdk.proto; +message WalletData { + required string name = 1; + required int32 id = 2; + optional string emails = 3; +} \ No newline at end of file diff --git a/zcash-android-wallet-app/zcash-android-welding/src/main/rust/lib.rs b/zcash-android-wallet-app/zcash-android-welding/src/main/rust/lib.rs index 2995328..e834e9c 100644 --- a/zcash-android-wallet-app/zcash-android-welding/src/main/rust/lib.rs +++ b/zcash-android-wallet-app/zcash-android-welding/src/main/rust/lib.rs @@ -7,7 +7,6 @@ pub extern "C" fn test_response(input: *const c_char) -> c_int { magic_number } - /// JNI interface #[cfg(target_os="android")] #[allow(non_snake_case)]