Android Matrix uses skia and its row-major meaning the indices are as follows
0 1 2
3 4 5
6 7 8
I contrast OpenGL uses indices like so
0 3 6
1 4 7
2 5 8
The "meanings" are identical in regards to matrix position.
a b tx
c d ty
0 0 1
a,b,c,d encode scale & rotation at the same time. tx/ty encode translation. If you do m.getValues(vals); then vals[2] == tx, vals[5] == ty, and the rest is straight forward. The best way to extract translation is to make a vector
float[] point = {0, 0};
Then map it and see where it ends up and that's your translation (which is exactly (tx, ty). Under rare circumstances its not
to get scale map a second point
float[] point2 = {1, 0};
Now take the difference rel = (point - point2) and get the length of that vector and that's your scale. To extract rotation, normalize rel and it's simple to get it's standard angle.