Bernardo O
Bernardo O

Reputation: 828

Running shell script in Android adb shell

I'm trying to create a script to find and remove my app from the Android emulator through the adb shell.

This is what I've got:

adb shell "
cd data/app
for app in com.mycompany.*.apk;
do
    echo $app
    bundle=$(echo $app | sed 's/-[0-9]//g')
    echo 'bundle name is $bundle'
    if [ '$bundle' != '' ];then
        adb uninstall $bundle
    else
        echo 'No apps found'
    fi
done
exit
"

But it doesn't seem to work as expected.

Therefore, it obviously never goes inside my if block, falling in to my else clause and that's it.

What am I doing wrong? I'm not very experienced in shell script, I'd appreciate any ideas.

My goal with this is to have a shell function that I can call to automate the process of removing my app from the emulator without having to drag it and uninstall it manually. Other ideas are also very much welcome.

Thanks!

Upvotes: 2

Views: 4140

Answers (2)

ajaaskel
ajaaskel

Reputation: 1709

I'm still curious to know why my approach was "suboptimal" and what could I have done better?

Wild guess since I'm not familiar with adb shell but bash: Quotation. Variables can not be inside ticks '...$VAR' but "...$VAR". Anything inside ticks is taken "as is", i.e. literally:

echo 'bundle name is $bundle'

vs.

echo "bundle name is $bundle"

Upvotes: 1

Alex P.
Alex P.

Reputation: 31716

You should not really go through the /data/app folder. If you want to uninstall multiple packages with names matching the com.mycompany pattern with a single adb command use:

adb shell "pm list packages com.mycompany | cut -c9- | xargs -n 1 sh /system/bin/pm uninstall"

Upvotes: 2

Related Questions