 +    log.warn('Unknown central \'%s\', ignoring write request', address);
 +    assert(!this._centralMap.has(connectionId),
 +           'Have another entry for connectionId ' + connectionId);
++    callback(RESULT_UNLIKELY_ERROR);
 +    return;
 +  }
 +
 +  const attribute = this._attributeMap.get(handle);
 +  if (!attribute) {
 +    log.warn('Unknown attribute handle %d, ignoring write request', handle);
++    callback(RESULT_UNLIKELY_ERROR);
 +    return;
 +  }
 +
 +  if (isPreparedWrite) {
 +    log.warn('Prepared writes not yet supported');
-+    return;
-+  }
-+
-+  const callback = function(result) {
-+    log.debug('_onWriteAttribute.callback', result, address);
-+    if (needResponse) {
-+      this._bledroid.command('attributeResponse ' +
-+                            connectionId + ' ' +
-+                            transactionId + ' ' +
-+                            handle + ' ' +
-+                            result);
-+    }
-+  }.bind(this);
++    callback(RESULT_UNLIKELY_ERROR);
++    return;
++  }
 +
 +  attribute.emit('writeRequest',
 +                 data,

+
+const makeBledroidConnection = require('silk-bledroid');
+
+const CCCDescriptor = require('./ccc-descriptor');
+const DescriptorEventEmitter = require('./descriptor-event-emitter');
+
+const RESULT_SUCCESS = require('../characteristic').RESULT_SUCCESS;
+
+const log = (function() {
+  const debug = require('debug');

+include $(BUILD_NODE_MODULE)
diff --git a/lib/android/bindings.js b/lib/android/bindings.js
new file mode 100644
index 0000000..e3e24f5
--- /dev/null
+++ b/lib/android/bindings.js
@@ -0,0 +1,864 @@
+'use strict';
+
+const assert = require('assert');
