Created
July 6, 2014 13:01
-
-
Save dextorer/a32cad7819b7f272239b to your computer and use it in GitHub Desktop.
google-play-services-strip-script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
I have analyzed the STRIPPED jar file and its content is virtually the same as the original google-play-services.jar file with all the same jar-files content. I cannot see where the strip.conf file is being tested for which jar-files to accept.
Any comments?
Regards
The problem was all mine. I had failed to copy your script accurately.
Regards
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
As a follow up to my comments above, I now have java 1.4 running on Windows 10 and have run strip-play-services.sh to generate google-play-services-STRIPPED.jar, but this is an even larger file than google-play-services.jar (5702 KB vs 5617 KB). I still get a Dalvik conversion failure due to exceeding 64K methods. The classes.dex file is showing 55663 or 28633 methods for an earlier successful version of the app (I'm not sure of the order of counting - big endian vs little endian) and the difference between both versions' methods count is unknown. The earlier version works well with the STRIPPED version of google-play-sevices.jar.
Why is the stripped version larger in size, and still unsuccessful in operation with the new version of the app?
Regards