-
-
Save dlew/5db1b780896bbc6f542e7c00a11db6a0 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash | |
# 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. | |
MAPPING_FILE=path/to/androidx-class-mapping.csv | |
PROJECT_DIR=path/to/android/project | |
replace="" | |
while IFS=, read -r from to | |
do | |
replace+="; s/$from/$to/g" | |
done <<< "$(cat $MAPPING_FILE)" | |
find $PROJECT_DIR \( -name "*.kt" -o -name "*.java" -o -name "*.xml" \) -type f -not -path '*/\.git*' -print0 | xargs -0 gsed -i "$replace" |
Thank you!
Great job, thanks a lot!
Thanks Dan Leu
We can add
android.support.design.widget.FloatingActionButton,com.google.android.material.floatingactionbutton.FloatingActionButton
android.support.design.widget.AppBarLayout,com.google.android.material.appbar.AppBarLayout
to the csv if using AppBarLayout and FloatingActionButton
Some more missing classes:
android.support.design.widget.Snackbar,com.google.android.material.snackbar.Snackbar
android.support.design.widget.BottomSheetBehavior,com.google.android.material.bottomsheet.BottomSheetBehavior
android.support.design.widget.TextInputEditText,com.google.android.material.textfield.TextInputEditText
android.support.design.widget.TextInputLayout,com.google.android.material.textfield.TextInputLayout
Thanks for this, Dan!
Android relevant issue for missing mappings: https://issuetracker.google.com/issues/119776865
This string doesn't work on windows 10 or Linux. "xargs: Argument list too long" even with just few files
I wrote a python script which can be used cross-platform in case you have the same issue: https://gist.github.com/AndiMiko/58ecc04a64ac4f89eb5262176ab3fc9e
On Mac run: brew install gnu-sed
to get gsed
.
Thanks a Ton Dan!
Oh my goodness, thank you!!
Here is a much faster version – replaces find
with rg
and sed
with perl
, and I think it works just as well. I terminated the original script after 28 minutes. This rg/perl version completed after about 1 minute.
https://gist.github.com/loganj/7535a13e98be83460f362b63dbd13e07
Thanks Dan. I wrote a script based on your idea with some added enhancements: https://gist.github.com/dudeinthemirror/cb4942e0ee5c3df0fcb678d1798e1d4d
thank you.
Awesome this is what we're looking for!!! Thanks for the people here.
how to use this script?
Did a fork for Linux (i'm on Ubuntu) to work around the xarg too long argument list error, and assumes the csv file is in the same directory as the script. https://gist.github.com/draekko/4019f0342553b6c0cbeca1d185245dd1
Hope this helps someone else, thanks for the original, saved me a lot of work.
Thank you, this saved me hours of pain 🙏
after run the script.sh
It seems that there is an error: android.support.v7.widget.GridLayoutManager => androidx.gridlayout.widget.GridLayoutManager
It should be : android.support.v7.widget.GridLayoutManager => androidx.recyclerview.widget.GridLayoutManager
I've noticed a substantial performance improvement by running gradle clean
before running this script.
The comment on line 8 suggests this but it is easy to overlook.
It'll run faster on a clean build because then there are fewer files to scan over.
The script now runs in 18s instead of 2m43s!
brew install gnu-sed
Thanks.
any idea of migrating away from AndroidX
Thanks for this!