diff --git a/android/WALT/app/src/main/jni/player.c b/android/WALT/app/src/main/jni/player.c
index 361d0a8..f532dbe 100644
--- a/android/WALT/app/src/main/jni/player.c
+++ b/android/WALT/app/src/main/jni/player.c
@@ -102,7 +102,7 @@
 }
 
 // this callback handler is called every time a buffer finishes playing
-void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
+void bqPlayerCallback(SLAndroidSimpleBufferQueueItf bq, __attribute__((unused)) void *context)
 {
     if (bq == NULL) {
         __android_log_print(ANDROID_LOG_ERROR, APPNAME, "buffer queue is null");
@@ -136,7 +136,8 @@
     }
 }
 
-jlong Java_org_chromium_latency_walt_AudioTest_playTone(JNIEnv* env, jclass clazz){
+jlong Java_org_chromium_latency_walt_AudioTest_playTone(__attribute__((unused)) JNIEnv* env,
+                                                        __attribute__((unused)) jclass clazz){
 
     int64_t t_start = uptimeMicros();
     te_play = 0;
@@ -172,7 +173,8 @@
 
 
 // create the engine and output mix objects
-void Java_org_chromium_latency_walt_AudioTest_createEngine(JNIEnv* env, jclass clazz)
+void Java_org_chromium_latency_walt_AudioTest_createEngine(__attribute__((unused)) JNIEnv* env,
+                                                           __attribute__((unused)) jclass clazz)
 {
     __android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "Creating audio engine");
 
@@ -204,7 +206,8 @@
     (void)result;
 }
 
-void Java_org_chromium_latency_walt_AudioTest_destroyEngine(JNIEnv *env, jclass clazz)
+void Java_org_chromium_latency_walt_AudioTest_destroyEngine(__attribute__((unused)) JNIEnv *env,
+                                                            __attribute__((unused)) jclass clazz)
 {
     if (bqPlayerObject != NULL) {
         (*bqPlayerObject)->Destroy(bqPlayerObject);
@@ -223,8 +226,11 @@
 }
 
 // create buffer queue audio player
-void Java_org_chromium_latency_walt_AudioTest_createBufferQueueAudioPlayer(JNIEnv* env,
-        jclass clazz, jint optimalFrameRate, jint optimalFramesPerBuffer)
+void Java_org_chromium_latency_walt_AudioTest_createBufferQueueAudioPlayer(
+        __attribute__((unused)) JNIEnv* env,
+        __attribute__((unused)) jclass clazz,
+        jint optimalFrameRate,
+        jint optimalFramesPerBuffer)
 {
     __android_log_print(ANDROID_LOG_VERBOSE, APPNAME, "Creating audio player with frame rate %d and frames per buffer %d",
                         optimalFrameRate, optimalFramesPerBuffer);
@@ -309,7 +315,8 @@
     (void)result;
 }
 
-void Java_org_chromium_latency_walt_AudioTest_startWarmTest(JNIEnv* env, jclass clazz) {
+void Java_org_chromium_latency_walt_AudioTest_startWarmTest(__attribute__((unused)) JNIEnv* env,
+                                                            __attribute__((unused)) jclass clazz) {
     SLresult result;
 
     result = (*bqPlayerBufferQueue)->Clear(bqPlayerBufferQueue);
@@ -329,7 +336,8 @@
     warmedUp = 1;
 }
 
-void Java_org_chromium_latency_walt_AudioTest_stopTests(JNIEnv *env, jclass clazz) {
+void Java_org_chromium_latency_walt_AudioTest_stopTests(__attribute__((unused)) JNIEnv *env,
+                                                        __attribute__((unused)) jclass clazz) {
     SLresult result;
 
     result = (*bqPlayerPlay)->SetPlayState(bqPlayerPlay, SL_PLAYSTATE_STOPPED);
@@ -340,7 +348,8 @@
 }
 
 // this callback handler is called every time a buffer finishes recording
-void bqRecorderCallback(SLAndroidSimpleBufferQueueItf bq, void *context)
+void bqRecorderCallback(__attribute__((unused)) SLAndroidSimpleBufferQueueItf bq,
+                        __attribute__((unused)) void *context)
 {
     tc_rec = uptimeMicros();
     assert(bq == recorderBufferQueue);
@@ -362,8 +371,11 @@
 }
 
 // create audio recorder
-jboolean Java_org_chromium_latency_walt_AudioTest_createAudioRecorder(JNIEnv* env,
-    jclass clazz, jint optimalFrameRate, jint framesToRecord)
+jboolean Java_org_chromium_latency_walt_AudioTest_createAudioRecorder(
+        __attribute__((unused)) JNIEnv* env,
+        __attribute__((unused)) jclass clazz,
+        jint optimalFrameRate,
+        jint framesToRecord)
 {
     SLresult result;
 
@@ -460,7 +472,8 @@
 
 
 // set the recording state for the audio recorder
-void Java_org_chromium_latency_walt_AudioTest_startRecording(JNIEnv* env, jclass clazz)
+void Java_org_chromium_latency_walt_AudioTest_startRecording(__attribute__((unused)) JNIEnv* env,
+                                                             __attribute__((unused)) jclass clazz)
 {
     SLresult result;
 
@@ -496,7 +509,9 @@
     bqPlayerRecorderBusy = 1;
 }
 
-jshortArray Java_org_chromium_latency_walt_AudioTest_getRecordedWave(JNIEnv *env, jclass cls)
+jshortArray Java_org_chromium_latency_walt_AudioTest_getRecordedWave(
+        JNIEnv *env,
+        __attribute__((unused)) jclass cls)
 {
     jshortArray result;
     result = (*env)->NewShortArray(env, recorder_frames);
@@ -507,14 +522,17 @@
     return result;
 }
 
-jlong Java_org_chromium_latency_walt_AudioTest_getTcRec(JNIEnv *env, jclass cls) {
+jlong Java_org_chromium_latency_walt_AudioTest_getTcRec(__attribute__((unused)) JNIEnv *env,
+                                                        __attribute__((unused)) jclass cls) {
     return (jlong) tc_rec;
 }
 
-jlong Java_org_chromium_latency_walt_AudioTest_getTeRec(JNIEnv *env, jclass cls) {
+jlong Java_org_chromium_latency_walt_AudioTest_getTeRec(__attribute__((unused)) JNIEnv *env,
+                                                        __attribute__((unused)) jclass cls) {
     return (jlong) te_rec;
 }
 
-jlong Java_org_chromium_latency_walt_AudioTest_getTePlay(JNIEnv *env, jclass cls) {
+jlong Java_org_chromium_latency_walt_AudioTest_getTePlay(__attribute__((unused)) JNIEnv *env,
+                                                         __attribute__((unused)) jclass cls) {
     return (jlong) te_play;
 }
diff --git a/android/WALT/app/src/main/jni/sync_clock.c b/android/WALT/app/src/main/jni/sync_clock.c
index 1591f88..e16b759 100644
--- a/android/WALT/app/src/main/jni/sync_clock.c
+++ b/android/WALT/app/src/main/jni/sync_clock.c
@@ -59,7 +59,7 @@
 https://android.googlesource.com/platform/system/core/+/master/libutils/Timers.cpp
 */
 int64_t uptimeMicros() {
-    struct timespec ts = {0};
+    struct timespec ts;
     clock_gettime(CLOCK_MONOTONIC, &ts);
     return ((int64_t)ts.tv_sec) * kMillion + ts.tv_nsec / 1000;
 }
@@ -67,11 +67,11 @@
 
 // Sleeps us microseconds
 int microsleep(int us) {
-    struct timespec ts = {0};
+    struct timespec ts;
     ts.tv_sec = us / kMillion;
     us %= kMillion;
     ts.tv_nsec = us*1000;
-    nanosleep(&ts, NULL);
+    return nanosleep(&ts, NULL);
 }
 
 
@@ -109,7 +109,7 @@
     // short enough to fail quickly if all transfers and retries fail with
     // timeout.
     const int kTimeoutMs = 20;
-    struct usbdevfs_bulktransfer ctrl = {0};
+    struct usbdevfs_bulktransfer ctrl;
     // TODO: need to limit request size to avoid EINVAL
 
     ctrl.ep = endpoint;
diff --git a/android/WALT/app/src/main/jni/sync_clock_jni.c b/android/WALT/app/src/main/jni/sync_clock_jni.c
index 15adfd5..22753fe 100644
--- a/android/WALT/app/src/main/jni/sync_clock_jni.c
+++ b/android/WALT/app/src/main/jni/sync_clock_jni.c
@@ -28,8 +28,8 @@
 
 jlong
 Java_org_chromium_latency_walt_WaltUsbConnection_syncClock__III(
-    JNIEnv* env,
-    jobject thiz,
+    __attribute__((unused)) JNIEnv* env,
+    __attribute__((unused)) jobject thiz,
     jint fd,
     jint endpoint_out,
     jint endpoint_in
