Skip to content

Instantly share code, notes, and snippets.

@sinergy
Forked from loganj/script.sh
Created July 17, 2019 16:41
Show Gist options
  • Save sinergy/3dfeb715c1dc27a7db0653fbeb1c9154 to your computer and use it in GitHub Desktop.
Save sinergy/3dfeb715c1dc27a7db0653fbeb1c9154 to your computer and use it in GitHub Desktop.
Simple AndroidX Migration Script
#!/usr/bin/env bash
# Original by Dan Lew
#
# I've found that the "Migrate to AndroidX" converter in Android Studio doesn't work very
# well, so I wrote my own script to do the simple job of converting package names.
#
# You can download a CSV of package names here: https://developer.android.com/topic/libraries/support-library/downloads/androidx-class-mapping.csv
#
# It'll run faster on a clean build because then there are fewer files to scan over.
#
# Uses `gsed` because I'm on a Mac. Can easily replace with `sed` if you don't have `gsed`.
#
# This isn't perfect; it won't find every conversion issue. You break it you buy it. Viewer discretion is advised.
#
# Changes by Logan Johnson:
# - replaced find with rg, which finds matching files much, much faster
# - replaced sed with perl, which does the replacement much, much faster
# Original ran for 28 minutes on my laptop before I killed it. This version completes in just over a minute.
# As Dan said: not perfect, won't find every issue, good luck.
MAPPING_FILE=androidx-class-mapping.csv
PROJECT_DIR=../register
from_pkgs=""
replace=""
while IFS=, read -r from_pkg to_pkg
do
from_pkgs+=" -e $from_pkg"
replace+="; s/$from_pkg/$to_pkg/g"
done <<< "$(tail -n +2 $MAPPING_FILE)"
rg --files-with-matches -t java -t kotlin -t xml -F $from_pkgs $PROJECT_DIR | xargs perl -pi -e "$replace"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment