Skip to content

Instantly share code, notes, and snippets.

@hkratz
Forked from dextorer/strip.conf
Last active August 29, 2015 14:09
Show Gist options
  • Select an option

  • Save hkratz/6ae278dba2818b68ab6a to your computer and use it in GitHub Desktop.

Select an option

Save hkratz/6ae278dba2818b68ab6a to your computer and use it in GitHub Desktop.

Revisions

  1. @dextorer dextorer created this gist Jul 6, 2014.
    22 changes: 22 additions & 0 deletions strip.conf
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    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
    72 changes: 72 additions & 0 deletions strip_play_services.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,72 @@
    #!/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