TechTalk Compiles All the Android News You Need in One App

If you’re as obsessed with mobile devices as the vast majority of our forum … more

Android App Review: Google Inbox to Improve Your Life – XDA TV

Recently, Google+ exploded with the announcement of Google Inbox, as … more

Damp the LG G3 Thermal Throttling

As our mobile devices grow thinner and more powerfulwith each passing generation, it’s inevitable … more

Google Play Developer Distribution Agreement Due Tomorrow

Every once in a while, Google updates theGoogle PlayDeveloper Distribution … more
Post Reply

[Think Tank #2 - SOLVED] Modifying Maps to enable Navigation outside USA

OP canadiancow

11th November 2009, 09:36 PM   |  #1  
OP Senior Member
Thanks Meter: 0
 
469 posts
Join Date:Joined: Feb 2008
More
Edit 4: New Thread
Since the main issue in this thread has been solved (Navigation works outside the USA), I'm going to stop updating it. For the latest updates on Brut.all's mod, please use http://forum.xda-developers.com/showthread.php?t=630887

Edit 3: Solution

Brut.all has done it again with 4.0.0. The modified version works anywhere Google has the "Directions" feature, but it has reduced functionality (including in the USA).

The reduced functionality is as follows:
*No street name at the top
*No arrow indicating next turn direction
*Voice guidance is delayed, if at all present
Please do not waste space posting these issues. They are known.


If you are only going to be using Navigation in the USA, then get the official version from the Market. If you need Navigation outside the USA, then install the modified version.

If you don't want to do the installation manually, then uninstall Google Maps, and download and install Nav Launcher 2.1.3 from the Market (see below for a QR code). It will install the modified version of 3.3.1 for you.

If you want to do it manually, then follow these instructions:

If you have root, uninstall the current Maps app.

adb:
Code:
adb remount
adb shell find /system /data -name \*google\*maps.apk\* -o -name Maps.apk -delete
adb uninstall com.google.android.apps.maps
shell:
Code:
mount -o remount,rw /system
find /system /data -name \*google\*maps.apk\* -o -name Maps.apk -delete
pm uninstall com.google.android.apps.maps
Next, regardless of whether you have root, install the SpeechSynthesis Data. You can do this either by going into the market and searching "SpeechSynthesis Data Installer", or on some ROM's, like CM 4.2.7.1, Menu -> Settings -> Speech synthesis -> Install voice data

If you have root, download http://ul.to/1ofshq/maps4.0.0-brut4.apk (4.0.0)
If you do not have root, download http://ul.to/6w7e8n/maps4.0.0-brut4-alt.apk (4.0.0)
These files were created by Brut.all, without whom we would not have Navigation outside the USA.

Install the new file that you downloaded:
adb install -r maps4.0.0-brut4.apk
or
adb install -r maps4.0.0-brut4-alt.apk

Edit 2: Broken again

Google has made some anticipated changes to block us from using Navigation outside the USA. It looks like Brut.all is going to be looking at the original proxy idea again. For now, you might as well upgrade to 3.3.0, as it does have some cool new features (and you can always revert if necessary). Stay tuned to the thread for more details.

Edit 1: Solution (NO LONGER WORKS)

Brut.all and TAPP got it working. Here are some more in-depth instructions for those of you having issues:

If you have root, uninstall the current Maps app.

adb:
Code:
adb remount
adb shell find /system /data -name \*google\*maps.apk\* -o -name Maps.apk -delete
adb uninstall com.google.android.apps.maps
shell:
Code:
mount -o remount,rw /system
find /system /data -name \*google\*maps.apk\* -o -name Maps.apk -delete
pm uninstall com.google.android.apps.maps
Next, regardless of whether you have root, install the SpeechSynthesis Data. You can do this either by going into the market and searching "SpeechSynthesis Data Installer", or on some ROM's, like CM 4.2.5, Menu -> Settings -> Speech synthesis -> Install voice data

If you have root, download http://ul.to/uwa3gp/Maps3.2.1-patched-root.apk or http://files.legendofbong.co.uk/down...tched-root.apk
If you do not have root, download http://ul.to/18fckr/Maps3.2.1-patched-no-root.apk or http://files.legendofbong.co.uk/down...ed-no-root.apk
These files were created by Brut.all and TAPP, without whom we would not have Navigation outside the USA.

Install the new file:
adb install -r maps-root-aligned-apk
or
adb install -r maps-no-root-aligned-apk

Update: I made a simple launcher app called Nav Launcher that lets you easily navigate to a contact or any other destination by typing or speaking the name or address. Search the Market for "Nav Launcher", go to market://search?q=pname:com.madcowsolutions.NavLauncher on your device, or scan this QR code:

Discuss this app at http://navlauncher.madcowsolutions.com

rac2030 made a similar application called NavStarter that you can download from http://www.2030.tk/link/navstarter

Reply to this thread if you have any issues.

Original Post

Now that we have Google Maps Navigation working on other devices, I thought the next logical step was to get it working outside the USA.

I noticed something very interesting.

I turned off cell/gps location services, then opened Maps, and plotted a route from Detroit to San Francisco. I got the Navigate option.

When I selected it, it prompted me to download the voice stuff, so I did. Then it told me to go into settings to enable GPS. When I did that, and came back, it popped up a dialog "No route found - Navigation to your destination is not available.".

HOWEVER, under this dialog is a Navigation view of my area. Which means it was able to download the necessary map data, but something is preventing it from retrieving or using a route.

Here's an example of this from the emulator, with the GPS set to be right in front of parliament in Ottawa:


It's possible that the route could be transmitted in the same format as normal directions in Maps, but that either:
a) The server is rejecting the request because it's coming from Navigation and has a Canadian endpoint, or
b) The application is discarding it because it has a Canadian endpoint.

If it's a), then we might be able to setup a proxy server (even a locally running server on the phone) to mask the signature of the request.
If it's b), then we might have to modify some of the Maps code.

But the fact that it can render the Navigation view of Ottawa, Ontario, Canada means that it is downloading the appropriate map data, so that's a great start for getting Navigation to work outside the United States. We just need to find a way to tell it that it is allowed to work.

I made some Wireshark captures of a successful route being generated, as well as one that failed because it's in Canada, but the transmitted data isn't textual for the most part, and I don't know how it's encoded.

One interesting thing to note is that in my Wireshark captures, Navigation uses "DriveAbout" in all of its requests to the server, whereas regular driving directions uses "GMM" in the same spot.

I'm going to see if I can setup a simple proxy to forward requests, replacing "DriveAbout" with "GMM" to see if that gets us any further.

Hopefully some other people can help with this so that everyone, everywhere, can enjoy Google Maps Navigation.
Last edited by canadiancow; 6th March 2010 at 11:34 PM. Reason: Cleaned up the post and added NavLauncher
11th November 2009, 09:47 PM   |  #2  
TrOjAnUK's Avatar
Senior Member
Flag Essex
Thanks Meter: 638
 
1,903 posts
Join Date:Joined: Sep 2009
Donate to Me
More
Ill be watching this thread with interest

TrOjAn
11th November 2009, 10:40 PM   |  #3  
Junior Member
Flag New York
Thanks Meter: 0
 
14 posts
Join Date:Joined: Sep 2007
More
I installed the Nav, then Google Voice stopped working, no matter how many times I uninstalled GV and re-installed it. Also, I rm -r /cache/*.apk. but GV keeps saying Downloading.... Then I flushed the old build.prop and build.trout.prop back, and reboot. and both Nav and GV are working.
11th November 2009, 10:42 PM   |  #4  
Junior Member
Flag Ukraine, Kyiv
Thanks Meter: 0
 
10 posts
Join Date:Joined: Aug 2009
More
Interesting
It's interesting. I couldn't start navigation at all - I think it because of my location (Ukraine) - but some Motorola Droid apps was installed without any problems.
11th November 2009, 10:45 PM   |  #5  
OP Senior Member
Thanks Meter: 0
 
469 posts
Join Date:Joined: Feb 2008
More
Quote:
Originally Posted by AlexandrUa

It's interesting. I couldn't start navigation at all - I think it because of my location (Ukraine) - but some Motorola Droid apps was installed without any problems.

If you've installed it properly, and you enter two US locations as the endpoints, you should get the Navigate option.

If you use "My Location" as the start point, you won't get the navigate option unless you're in the USA.
11th November 2009, 11:38 PM   |  #6  
Junior Member
Thanks Meter: 0
 
4 posts
Join Date:Joined: Nov 2009
i think it depends on the map licence. e.g. in germany google maps use another provider for the map data. thats the reason why google just allow navigation in us. i think it must be possible to change that.
11th November 2009, 11:47 PM   |  #7  
Senior Member
London
Thanks Meter: 108
 
1,058 posts
Join Date:Joined: Aug 2009
More
Couple of weeks ago google terminated their licence with european maps provider teleatlas because or related to that licence not allowing turn-by-turn. Is that relevant? Was on financial mkt news.
12th November 2009, 12:01 AM   |  #8  
OP Senior Member
Thanks Meter: 0
 
469 posts
Join Date:Joined: Feb 2008
More
The licensing issues are why Google won't let us use Navigation, but this thread is about finding a technical way around the limitations.
12th November 2009, 12:35 AM   |  #9  
theomajigga's Avatar
Senior Member
Flag Hudson, WI
Thanks Meter: 2
 
242 posts
Join Date:Joined: Sep 2009
More
Just an idea
what I would do, is get a map route in the US with WiFi, use wireshark to see where/who it's talking to to see if its getting the directions from an online server...

If not, it would be internal then

Like i said, just an idea.
12th November 2009, 12:58 AM   |  #10  
OP Senior Member
Thanks Meter: 0
 
469 posts
Join Date:Joined: Feb 2008
More
Quote:
Originally Posted by theomajigga

what I would do, is get a map route in the US with WiFi, use wireshark to see where/who it's talking to to see if its getting the directions from an online server...

If not, it would be internal then

Like i said, just an idea.

I've already used Wireshark, and it's talking to a Google server. However, the exchange looks a lot like normal driving directions, except with the identifier "DriveAbout" instead of "GMM".

I'm working on routing all connections to this server through a proxy so that I can replace "DriveAbout" with "GMM", to see if that will make it work.

Post Reply Subscribe to Thread
Previous Thread Next Thread
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes