| actions=true | |
| ads=true | |
| analytics=true | |
| appindexing=true | |
| appstate=true | |
| auth=true | |
| cast=true | |
| common=true | |
| drive=false | |
| dynamic=true | |
| games=false | |
| gcm=true | |
| identity=true | |
| internal=true | |
| location=false | |
| maps=false | |
| panorama=false | |
| plus=true | |
| security=true | |
| tagmanager=true | |
| wallet=false | |
| wearable=true |
| #!/bin/sh | |
| # | |
| # Strips the Google Play Services JAR archive and removes the folders that are specified below. | |
| # This should lower the methods count of the final DEX file and should lower the chance of hitting | |
| # the (dreaded) 64K methods limit. | |
| # | |
| # | |
| # Author: Sebastiano Gottardo | |
| # @rotxed - dextorer[at]gmail[dot]com | |
| # | |
| PLAY_SERVICES_FILENAME="google-play-services.jar" | |
| PLAY_SERVICES_TEMP_DIR="google-play-services-temp" | |
| PLAY_SERVICES_STRIP_FILE="strip.conf" | |
| PLAY_SERVICES_NESTED_PATH="com/google/android/gms" | |
| PLAY_SERVICES_OUTPUT_FILE="google-play-services-STRIPPED.jar" | |
| # Check if file exists in the same directory | |
| if [ ! -f $PLAY_SERVICES_FILENAME ]; then | |
| echo "\nPlease put this script in the Play Services JAR location, then run it again\n\n" | |
| exit -1 | |
| fi | |
| # Preventive cleanup | |
| rm -rf $PLAY_SERVICES_TEMP_DIR | |
| # Create temporary work folder | |
| mkdir $PLAY_SERVICES_TEMP_DIR | |
| cp $PLAY_SERVICES_FILENAME $PLAY_SERVICES_TEMP_DIR/ | |
| cd $PLAY_SERVICES_TEMP_DIR | |
| # Extract the content of the Play Services JAR archive | |
| echo "Extracting archive, please wait.." | |
| jar xvf $PLAY_SERVICES_FILENAME > /dev/null | |
| echo "Extracted.\n" | |
| # If the configuration file doesn't exist, create it | |
| if [ ! -f ../$PLAY_SERVICES_STRIP_FILE ]; then | |
| # Create the file | |
| touch ../$PLAY_SERVICES_STRIP_FILE | |
| FOLDERS=`ls $PLAY_SERVICES_NESTED_PATH` | |
| for index in $FOLDERS | |
| do | |
| echo "$index=true" >> ../$PLAY_SERVICES_STRIP_FILE | |
| done | |
| fi | |
| # Read configuration from file | |
| while read -r FOLDERS | |
| do | |
| CURRENT_FOLDER=$FOLDERS | |
| CURRENT_FOLDER_NAME=`echo $CURRENT_FOLDER | awk -F'=' '{print $1}'` | |
| CURRENT_FOLDER_ENABLED=`echo $CURRENT_FOLDER | awk -F'=' '{print $2}'` | |
| if [ "$CURRENT_FOLDER_ENABLED" = false ]; then | |
| echo "Removed $CURRENT_FOLDER_NAME folder" | |
| rm -rf "$PLAY_SERVICES_NESTED_PATH/$CURRENT_FOLDER_NAME" | |
| fi | |
| done < ../"$PLAY_SERVICES_STRIP_FILE" | |
| # Create final stripped JAR | |
| jar cf $PLAY_SERVICES_OUTPUT_FILE com/ | |
| cp $PLAY_SERVICES_OUTPUT_FILE ../ | |
| cd .. | |
| # Clean up | |
| echo "\nFolders removed, cleaning up.." | |
| rm -rf $PLAY_SERVICES_TEMP_DIR | |
| echo "All done, exiting!" | |
| exit 0 |
When I use your script with only maps=true I get java.lang.NoClassDefFoundError: com.google.android.gms.maps.MapView$b. Any ideas?
I recommend to use "-p" flag for copying jar into temp directory to avoid permissions issue:
cp -p $PLAY_SERVICES_FILENAME $PLAY_SERVICES_TEMP_DIR/
I am trying to run above shell script in a mac machine, but I am always getting error: ' syntax error near unexpected token `do' :(
Any clues?
line 36: jar command not found
line 63: jar: command not found
cp: cannot stat 'google-play-services-STRIPPED.jar' : No suc file or directory
What do I wrong?
Can anyone tell me how to run this script a short tutorial will help
Thanks
As a hint to anyone else who comes along, you will probably need to keep common, internal, and dynamic as it looks like those are used by a few of the other ones. Still getting a handle on it myself
Found a problem using the stripped library. The file strip.conf is the same of the sample, except for the location that's true. When I check if play services are available, I get the error java.lang.NoClassDefFoundError: com.google.android.gms.R$string
on the line that shall show the error dialog from play service:
GooglePlayServicesUtil.getErrorDialog(resultCode, this,
PLAY_SERVICES_ERROR_REQUEST_CODE).show();
Do anyone have a solution for this?
I have the same problem as: ilya-shknaj
EDIT: the problem was that I did not have java in PATH.
maps=true I get java.lang.NoClassDefFoundError: com.google.android.gms.maps.MapView$b while doing maps with stripped google play services
while read -r FOLDERS misses last line
It fixes like that while read -r FOLDERS || [[ -n "$FOLDERS" ]];