Skip to content

Instantly share code, notes, and snippets.

@timothyclemans
Last active January 1, 2016 09:59
Show Gist options
  • Save timothyclemans/8128399 to your computer and use it in GitHub Desktop.
Save timothyclemans/8128399 to your computer and use it in GitHub Desktop.
import argparse
#import envoy
import shutil, errno
import os
import sys
def copyanything(src, dst):
try:
shutil.copytree(src, dst)
except OSError as exc: # python >2.5
if exc.errno == errno.ENOTDIR:
shutil.copy(src, dst)
else: pass
def main(scriptlocation, scriptname, voice_trigger):
if not os.environ.get('ANDROID_HOME'):
raise Exception("Set ANDROID_HOME")
if scriptlocation.startswith('http'):
import urllib2
response = urllib2.urlopen(scriptlocation)
script = response.read()
else:
f = open(scriptlocation, 'r')
script = f.read()
copyanything('wearscript/glass', 'glass_%s' % (scriptname.lower()))
os.rename('glass_%s/WearScript' % (scriptname.lower()), 'glass_%s/%s' % (scriptname.lower(), scriptname))
print 'replace '
os.system("cd glass_%s; find ./ -type f -exec sed -i 's/dappervision.wearscript/weariverse.%s/g' {} \;" % (scriptname.lower(), scriptname.lower()))
os.system("cd glass_%s; find ./ -type f -exec sed -i 's/dappervision/weariverse/g' {} \;" % (scriptname.lower()))
os.rename('glass_%s/%s/src/main/java/com/dappervision' % (scriptname.lower(), scriptname), 'glass_%s/%s/src/main/java/com/weariverse' % (scriptname.lower(), scriptname))
os.rename('glass_%s/%s/src/main/java/com/weariverse/wearscript' % (scriptname.lower(), scriptname), 'glass_%s/%s/src/main/java/com/weariverse/%s' % (scriptname.lower(), scriptname, scriptname.lower()))
f = open('glass_%s/settings.gradle' % (scriptname.lower()), 'r')
old = f.read()
f = open('glass_%s/settings.gradle' % (scriptname.lower()), 'w')
f.write(old.replace('WearScript', scriptname))
f.close()
# set the voice trigger
f = open('glass_%s/%s/src/main/res/xml/voice_trigger_start.xml' % (scriptname.lower(), scriptname), 'r')
old = f.read()
f = open('glass_%s/%s/src/main/res/xml/voice_trigger_start.xml' % (scriptname.lower(), scriptname), 'w')
f.write(old.replace('start wear script', voice_trigger))
f.close()
f = open('glass_%s/%s/src/main/res/xml/voice_trigger_start.xml' % (scriptname.lower(), scriptname), 'r')
print f.read()
os.system('rm glass_%s/%s/build/apk/WearScript-debug-unaligned.apk' % (scriptname.lower(), scriptname))
# set the script
default = "<script>function s() {WS.say('Connected')};window.onload=function () {WS.serverConnect('{{WSUrl}}', 's')}</script>"
f = open('glass_%s/%s/src/main/java/com/weariverse/%s/BackgroundService.java' % (scriptname.lower(), scriptname, scriptname.lower()), 'r')
old = f.read()
f = open('glass_%s/%s/src/main/java/com/weariverse/%s/BackgroundService.java' % (scriptname.lower(), scriptname, scriptname.lower()), 'w')
f.write(old.replace(default, script.replace('\n', '').replace('"', '\\"')))
f.close()
os.system('mv glass_%s/%s/src/main/aidl/com/dappervision glass_%s/%s/src/main/aidl/com/weariverse' % (scriptname.lower(), scriptname, scriptname.lower(), scriptname))
manifest = """<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.weariverse.%s"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<activity android:name=".activities.MainActivity"
android:label="%s (Start)"
android:screenOrientation="landscape"
android:theme="@style/AppTheme"
android:configChanges="keyboardHidden|orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="com.google.android.glass.action.VOICE_TRIGGER" />
</intent-filter>
<meta-data
android:name="com.google.android.glass.VoiceTrigger"
android:resource="@xml/voice_trigger_start" />
</activity>
<service android:name="com.weariverse.datagrid.BackgroundService"/>
<activity
android:name=".activities.MenuActivity"
android:label="@string/app_name"
android:theme="@style/MenuTheme"
android:enabled="true" >
</activity>
</application>
<supports-screens android:resizeable="true"
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:anyDensity="true" />
</manifest>""" % (scriptname, scriptname)
f = open('glass_%s/%s/src/main/AndroidManifest.xml' % (scriptname.lower(), scriptname), 'w')
f.write(manifest)
# build script
os.system('cd glass_%s; ./gradlew build --debug' % (scriptname.lower()))
print 'APK is at glass_%s/%s/build/apk/DataGrid-debug-unaligned.apk' % (scriptname.lower(), scriptname)
if __name__ == '__main__':
main(sys.argv[1], sys.argv[2], sys.argv[3])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment