FORUMS
Remove All Ads from XDA

[armv6][APP][4.0+]Voice Search Wrapper for Google Now (Google Search)

2,197 posts
Thanks Meter: 1,672
 
Post Reply Email Thread
Google Now voice input FC's (force-closes) on armv6 devices. Boo. Hiss. Part of the lib works, 'listen to tv' works.

Hotword detection is completely borked on armv6. Luckily you can turn it off in Google Settings after Now is installed or it'll FC like crazy too.

If you're into this kind of thing you may remember how cool it was when people got Google Now with Voice Search working for armv6 devices.
It doesn't work anymore on newer releases of Now.
The ics voice search assistant only works on Google Now (Velvet.apk) up to version 2.0 and Now is currently over v3.

So, I wanted to make something like the old search assistant for the current version of Google Now, since my lovely Optimus V obsolete phone is still kicking with Android 4.2.2 CM-11 unofficial.
I enjoy the voice controls. It's geeky. It's fun. It's somethiIng those uppity newer phone users lord over us cheapskates and diehards.

Even though Google Voice Search is froyo-era software, and online-only, it can still be used by Intent.
So...
I made an app. Widget actually. Press it, wait for the Voice Search box, and talk. It reroutes the transcript to Google Search (Now.) That includes OK Google commands, like 'call 555 555 1212' 'weather' etc. list of commands here and here
I couldn't get all the easter eggs to work, they may be in the hotword detector or libvcdecoder. Some do work though.
The talkback from Google Search still doesn't work with this gimmick. But you can talk into it at least.

This does not fix the mic icon on the Google search bar. Only allows a workaround for voice input via widget or long-press search key,
See this post to get around that.
Thanks again to Dovidhalevi for that tip.

Installation:
Get Voice Search on Play
get the apk from post 2, and install it.

If youve already got Google Now version 3.10 or higher sideloaded you can skip this next bit, go straight to fixing the Google Now settings.
I haven't been able to get either the launcher or Search to work installing from Play.
The Easy Way
Sideload the official apks from somewhere like androidpolice, and then you don't have to push anything to /data.
Here's the androidpolice 3.3 article with a download link.

The Harder Way
Get Now (and the launcher if you see fit) from the gapps here.
G Now is four files. /system/priv-app/Velvet.apk (chmod 644)
and three libs from /system/lib
libvcdecoder_jni.so, libgoogle_recognizer_jni_l.so, and libgoogle_hotword_jni.so (chmod 644)
(thanks to Dovidhalevi for pointing out the libvcdecoder.jni.so, I had missed that one.)
the launcher is /system/app/GoogleHome.apk (chmod 644) but it's not required.
you can 'adb install' Velvet, then adb push the three libs to /data/data/com.google.android.googlequicksearchbox/lib if you don't have space on /system.

Fix Google Search Settings!
once those files are installed,
1) immediately go into Google settings > Search & Now > Voice > "Ok Google" hotword detection, and turn it off.
2) Then back up one menu to Google settings > Search & Now > Voice, open Language and set it to something obscure like Hungarian (this avoids nasty FCs that happen to some users, thanks again Dovidhalevi for the tip!)
Important: If Search keeps closing on you, you need to make sure you changed the language in Google settings as listed in #2 from the previous paragraph.
If there's no setting to turn off hotword detection, the version is too old. try v3.10 or newer.
still get Search force closes? @rarshit posted a fix.

Usage:
The first time you run it there will (well, should) be a dialog asking what you want to use. Select Voice Search, Always.

(If there's not a dialog asking what to run for this action, go to Settings >Apps > Google Search and clear defaults. If that doesn't do it, clear defaults for Voice Search and VoiceSearchWrapper too.)

The widget can be activated by long-press search button. Another dialog should pop up. Select VoiceSearchWrapper, always.

Just tell it what to do, like after the hotword on a newer device. Instead of "Ok Google, weather" just say "weather."

This thread is to debug the apk. I've already gotten some great help from Dovidhalevi for the language settings, and Rarshit for the more comprehensive language workaround.

here is source, ADT project.


I know this doesn't match the template. I wanted to get source and binary UP though. I'll prettify this later.

known glitches:
Voice responses don't work (Search doesn't talk back to you, and the nonfunctional Easter eggs are talkbacks.)

'navigate to <location>' opens a web search for the text. Pressing enter in the search box corrects it to offer the Navigation app correctly targeted. ???
//edit: sideloading the apk from androidpolice instead of using the one from pa_gapps fixes this specific issue.

tested to function on:
Quote:

lg optimus one,s,v cm11
galaxy mini cm10.1 (thanks damopi95 for testing)


XDA:DevDB Information
Voice Search Wrapper for Google Now voice commands on armv6, App for the LG Optimus One P500

Contributors
bigsupersquid, google, stackoverflow.com

Version Information
Status: Testing
Current Beta Version: 1.0
Beta Release Date: 2014-04-07

Created 2014-04-07
Last Updated 2014-05-28
The Following 7 Users Say Thank You to bigsupersquid For This Useful Post: [ View ] Gift bigsupersquid Ad-Free
 
 
7th April 2014, 05:14 PM |#2  
bigsupersquid's Avatar
OP Senior Member
Flag BFE, MO
Thanks Meter: 1,672
 
Donate to Me
More
Download
APK here.
md5sum 1b3977dbfed9290edae950862d911d94
Current version 1.0
leaving feedback in the thread whether or not it works for you encourages development, expands the compatible device list, and keeps this alive in the search engines so other legacy device users can find it.
Attached Files
File Type: apk VoiceSearchWrapper.apk - [Click for QR Code] (641.6 KB, 1200 views)
The Following 4 Users Say Thank You to bigsupersquid For This Useful Post: [ View ] Gift bigsupersquid Ad-Free
7th April 2014, 05:14 PM |#3  
bigsupersquid's Avatar
OP Senior Member
Flag BFE, MO
Thanks Meter: 1,672
 
Donate to Me
More
Reserved
The Following User Says Thank You to bigsupersquid For This Useful Post: [ View ] Gift bigsupersquid Ad-Free
9th April 2014, 06:55 PM |#4  
Senior Member
Thanks Meter: 1,186
 
More
Installed the wrapper app. Previously had the "on-line" voice search. BTW, this, along with Jeannie, etc., did work.

I did not get a dialog but got the voicesearch speak box immediately. Google search FC.
Running voicesearch itself similarly voice search FC. Did work before.
Jeannie still works.

This is off a Play store version of Google Search. Even if I simply place that velvet.apk in priv-app and symlink the libraries, there is still no room. I have 14meg free on system. Most of us trim less from the ROM so have even less available. The velvet.apk it itself 17meg. The libs, another 17meg but I have symlinked those off in the past. Were those libs compiled for armv6 (They are not opensource, usually come precompiled for armv7)?

The Velvet.apk is actually quite good in that it has the language models on it. Versions for our device will not let us download them. But this, along with the launcher being included, makes it too big. Play versions install as user app, include the recognizer lib inside (for armv7). Must be sideloaded.

I sideloaded the Velvet.apk
Pushed the libs to sd-ext, symlinked to /system/lib
Still does not work but will check after reboot.

P500 users will be very unlikely to get this stuff installed on /system/priv-app. BTW, no interest in "Ok Google," which would simply deplete the battery were it to work at all. BTW, Google will probably bump the app off Play unless the title gets changed--did that to the original ICS widget.
The Following User Says Thank You to Dovidhalevi For This Useful Post: [ View ] Gift Dovidhalevi Ad-Free
10th April 2014, 05:14 AM |#5  
bigsupersquid's Avatar
OP Senior Member
Flag BFE, MO
Thanks Meter: 1,672
 
Donate to Me
More
Quote:
Originally Posted by Dovidhalevi

Installed the wrapper app. Previously had the "on-line" voice search. BTW, this, along with Jeannie, etc., did work.

I did not get a dialog but got the voicesearch speak box immediately. Google search FC.
Running voicesearch itself similarly voice search FC. Did work before.
Jeannie still works.

This is off a Play store version of Google Search. Even if I simply place that velvet.apk in priv-app and symlink the libraries, there is still no room. I have 14meg free on system. Most of us trim less from the ROM so have even less available. The velvet.apk it itself 17meg. The libs, another 17meg but I have symlinked those off in the past. Were those libs compiled for armv6 (They are not opensource, usually come precompiled for armv7)?

The Velvet.apk is actually quite good in that it has the language models on it. Versions for our device will not let us download them. But this, along with the launcher being included, makes it too big. Play versions install as user app, include the recognizer lib inside (for armv7). Must be sideloaded.

I sideloaded the Velvet.apk
Pushed the libs to sd-ext, symlinked to /system/lib
Still does not work but will check after reboot.

P500 users will be very unlikely to get this stuff installed on /system/priv-app. BTW, no interest in "Ok Google," which would simply deplete the battery were it to work at all. BTW, Google will probably bump the app off Play unless the title gets changed--did that to the original ICS widget.

Thanks for the feedback.
Didn't plan to Play store this one, it's too hacky anyway. Hopefully they won't bump the beta but if they do I'll fix it.

The libs are armv7 but only parts of them are NEON or thumb2. So on my Optimus V (msm7627) the voice-recognition parts of those libs FC. The listen/broadcast to google server part of the recognizer lib seems to work though. (listen to TV finds the wrong shows but similar.)
without the hotword lib Now FC's even more than usual. With it installed but turned off there are no complaints in logcat about hotword.
After enough reboots my install of Now seems to have stabilized and doesn't FC very often unless I hit the mic icon by accident.
However, I am using the 'stock' pa gapps package except for the total unrunnables like chrome and the keyboard. ridiculous amount of system storage eaten up. Since I am running my whole phone except for the boot.img off my sd card storage space doesn't matter. So I hadn't tried the sideloaded .apk since moving past Velvet 2.0 and didn't realize it'd FC instead of running.
Though, your post in the ROM thread indicated you've had issues with Now being a FC-ing beast anyway even on text searches? I rarely ever have had it crash on text searches.
I will have to test sideloading the apk now.
//edit: yes, sideloading the apk from the gapps then pushing the two libgoogle_* libs to /data/data/com.google.android.googlequicksearchbox/lib works for me. Didn't even have to reboot.
My widget doesn't show anything before popping up voice search, unless search initializes slowly, then you see the 'voicesearchwrapper' dialog box for a sec.
All it's meant to do is pipe the text output from Voice Search into Now.

Also, to get the Android system selection box for what handles voice input for what function, I had to uninstall and reinstall Voice Search. Since you've already got different defaults selected I can imagine why it wouldn't hook right.
The Following User Says Thank You to bigsupersquid For This Useful Post: [ View ] Gift bigsupersquid Ad-Free
10th April 2014, 10:35 AM |#6  
Senior Member
Thanks Meter: 1,186
 
More
Quote:
Originally Posted by bigsupersquid

Thanks for the feedback.
....
Though, your post in the ROM thread indicated you've had issues with Now being a FC-ing beast anyway even on text searches? I rarely ever have had it crash on text searches.
I will have to test sideloading the apk now.

How do you run everything of sdcard? Using that OSD Rom? I might think that an sdcard is a bit slow for system but never noticed any lags from link2sd's placements on the sdcard.

See how you make out with a sideload, maybe there is a workaround? No way for most of us to shove this onto /system/priv-app.

BTW, there MAY be a way, sort of. The paid version of link2sd can symlink system dexes. But everything else still must fit on system. Symlinking dexes free a bit more /data space. Wondering about manually symlinking apps to /system/app and /system/priv-app. Unfortunately, kitkat ROMs do not necessarily respect such symlinks, possibly because built-in selinux policies (evidenced in file_context) do not include references to the target placements. This may be why I cannot upgrade omni sanely.
The Following User Says Thank You to Dovidhalevi For This Useful Post: [ View ] Gift Dovidhalevi Ad-Free
10th April 2014, 11:23 AM |#7  
bigsupersquid's Avatar
OP Senior Member
Flag BFE, MO
Thanks Meter: 1,672
 
Donate to Me
More
Quote:
Originally Posted by Dovidhalevi

How do you run everything of sdcard? Using that OSD Rom? I might think that an sdcard is a bit slow for system but never noticed any lags from link2sd's placements on the sdcard.

See how you make out with a sideload, maybe there is a workaround? No way for most of us to shove this onto /system/priv-app.

BTW, there MAY be a way, sort of. The paid version of link2sd can symlink system dexes. But everything else still must fit on system. Symlinking dexes free a bit more /data space. Wondering about manually symlinking apps to /system/app and /system/priv-app. Unfortunately, kitkat ROMs do not necessarily respect such symlinks, possibly because built-in selinux policies (evidenced in file_context) do not include references to the target placements. This may be why I cannot upgrade omni sanely.

I run everything off the card with a modified boot process. But unlike Multirom or linking, it's stock Android code that does it for me now.
fstab.thunderc calls out /system and /data with "EMMC" mmcblk partitions and init.thunderc.rc does a 'mount_all /fstab.thunderc'... which requires replacing the qcom.init.rc direct MTD mount commands with comments. My system partition is currently 1GB and it's using well over 400MB of that. Antutu, quadrant, and linpack show no major speed differences from running off card. Class 4 16GB, class 10 8GB, class 2 4GB, all have worked for me. Biggest problem, one user had their only sd card fail while installed and recovery wouldn't sideload flash another zip without a card. Required adb and flash_image with internal system.img and boot.img pushed to /data to fix.
The internal MTD /system partition is only 165MB (157 on the Optimus S!) and it just barely holds kitkat with any features. I made a ROM version for it because people are more comfortable with that than my experimental version, but I don't use it myself. It works, but I hate dealing with linking and other methods of faking out Android because my phone has puny internal storage capacity. Multirom was cool, it was similar in that it mounted the external filesystems before booting, so Android didn't see anything funny going on. That stopped working for me with ICS.

Our devices are very similar. I've ported software over, and, um, borrowed, the p500 androidarmv6 3.0.8 kernel code for the VM670. The same trick should work if you'd like to try it.
To avoid too much off-topic, I'd be happy to discuss an easy (zip flash and adb shell cp -a) way to test the method on your device off in another thread somewhere.

I will check on the sideloading since not many armv6 users have enough system space. Most likely the one in the gapps will still sideload and the libs can be manually copied into /data/data/com.google.android.googlequicksearchbox/lib afterwards.

edit: yes, sideloading and pushing the libs there worked for me. Once. Then a FC every time it's opened. Same with android police version 3.3 apk.
I will examine my logs. Thanks for the pointer.
10th April 2014, 05:00 PM |#8  
bigsupersquid's Avatar
OP Senior Member
Flag BFE, MO
Thanks Meter: 1,672
 
Donate to Me
More
@Dovidhalevi
the force closes appear to be from the hotword not being disabled in google settings>voice>hotword
I had the same issues you reported from sideloading until I went into those settings and disabled the hotword.
It's actually mentioned in the OP but now I'll stress it's important there
10th April 2014, 06:47 PM |#9  
Senior Member
Thanks Meter: 1,186
 
More
Quote:
Originally Posted by bigsupersquid

@Dovidhalevi
the force closes appear to be from the hotword not being disabled in google settings>voice>hotword
I had the same issues you reported from sideloading until I went into those settings and disabled the hotword.
It's actually mentioned in the OP but now I'll stress it's important there

Hotword will cause numerous FCs. I turn it off as fast as I can. Once off, Google Search will remain stably, show cards, etc. FCs with inputs as described. Hotword not the issue.
10th April 2014, 07:59 PM |#10  
bigsupersquid's Avatar
OP Senior Member
Flag BFE, MO
Thanks Meter: 1,672
 
Donate to Me
More
Quote:
Originally Posted by Dovidhalevi

Hotword will cause numerous FCs. I turn it off as fast as I can. Once off, Google Search will remain stably, show cards, etc. FCs with inputs as described. Hotword not the issue.

it seems like your system is using the wrong default app for voice. maybe if you went into apps under settings and clear defaults for a Google search voice search and voice search wrapper then you should get the default dialogs.
//edit: Thanks for the PM about how you got it working! I have added the info about the extra lib and the langauge settings to the OP and credit.
13th April 2014, 12:19 PM |#11  
rharshit's Avatar
Senior Member
Flag Mumbai
Thanks Meter: 1,125
 
More
Thanks a lot for the source. Just asking for permissions. Can I use it in my ROM?
I know but still asking for conformation :P
Post Reply Subscribe to Thread

Guest Quick Reply (no urls or BBcode)
Message:
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes