Uninstall multiple android packages using adb [duplicate] - android

This question already has answers here:
delete packages of domain by adb shell pm
(3 answers)
Closed 4 years ago.
I am trying to uninstall multiple packages using a bash script with adb uninstall.
In theory following scripts should work:
adb shell pm list packages com.your.app |
cut -d ':' -f 2 | while read line ; do
adb uninstall --verbose $line
done
OR
adb shell pm list packages com.your.app |
cut -d ':' -f 2 |
xargs -L1 -t adb uninstall
I get the following error
Failure [DELETE_FAILED_INTERNAL_ERROR]
I also found that the problem is with adb commands not taking piped arguments or arguments from shell variables. For example the following command also
echo com.your.app | adb uninstall
This will also give the same error.
I have already looked at delete packages of domain by adb shell pm

\r is added added to the output from the first command. We can use tr -d '\r' to remove these characters.
adb shell pm list packages com.your.app |
cut -d ':' -f 2 |
tr -d '\r' |
xargs -L1 -t adb uninstall
Found the solution in Echo outputting results in erratic order in BASH

Related

/system/bin/sh: tr: not found - Android Azure Devops pipeline

I get the following error when I try to start the emulator from my pipeline in Azure:
nohup $ANDROID_HOME/emulator/emulator -avd xamarin_android_emulator -no-snapshot >
/dev/null 2>&1 &
$ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop
sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82'
$ANDROID_HOME/platform-tools/adb devices
echo "Emulator started"
Generating script.
##[debug]which 'bash'
##[debug]found: '/bin/bash'
##[debug]Agent.Version=2.204.0
##[debug]agent.tempDirectory=/Users/runner/work/_temp
##[debug]check path : /Users/runner/work/_temp
========================== Starting Command Output ===========================
##[debug]which '/bin/bash'
##[debug]found: '/bin/bash'
##[debug]/bin/bash arg: /Users/runner/work/_temp/52b9227f-faa1-
4557-9396-
8b3c63435983.sh
##[debug]exec tool: /bin/bash
##[debug]arguments:
##[debug] /Users/runner/work/_temp/52b9227f-faa1-4557-9396-
8b3c63435983.sh
/bin/bash /Users/runner/work/_temp/52b9227f-faa1-4557-9396-
8b3c63435983.sh
* daemon not running; starting now at tcp:5037
* daemon started successfully
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
/system/bin/sh: tr: not found
Given below is my pipeline yml
# Android
# Build your Android project with Gradle.
# Add steps that test, sign, and distribute the APK, save build artifacts, and more:
# https://learn.microsoft.com/azure/devops/pipelines/languages/android
#trigger:
#- feature/azure-cicd
pool:
vmImage: 'macos-latest'
steps:
- bash: |
# Install AVD files
echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install 'system-images;android-19;google_apis;x86'
echo "AVD system-image successfully downloaded and installed."
displayName: 'Download and install emulator image'
- bash: |
# Create emulator
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n xamarin_android_emulator -k 'system-images;android-19;google_apis;x86' --force
$ANDROID_HOME/emulator/emulator -list-avds
displayName: 'Create emulator'
- bash: |
# Start emulator in background
nohup $ANDROID_HOME/emulator/emulator -avd xamarin_android_emulator -no-snapshot > /dev/null 2>&1 &
$ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 1; done; input keyevent 82'
$ANDROID_HOME/platform-tools/adb devices
echo "Emulator started"
displayName: 'Start emulator'
- bash: |
./gradlew testdevelopDebug connectedMockDebugAndroidTest --stacktrace --no-daemon
./gradlew --stop
displayName: 'Run Instrumented Tests'
continueOnError: true
This works perfect when I use android-28 instead of android-19
Is there any change that I need to make in my pipeline such that I can launch the emulator?
Any help is much appreciated
The adb call in yml was done to get the status and check that locally. In the yml I was trying to pass the while loop into adb.
This example depicts the right usage and solution:
https://stackoverflow.com/a/38896494/
while [ "`adb shell getprop sys.boot_completed | tr -d '\r' `" != "1" ] ; do sleep 1; done

Differences between "echo $variable" and actual output of it

I'm trying to fix a bash script. The part of relevance is this one:
function do_get_apks {(
mkdir -p apks
cd apks
adb shell pm list packages > installed_packages
adb shell pm list packages -3 > installed_packages_user
while read p; do
# remove trailing 'package'
package=$(echo "${p/package:/}" | tr -d '\r\n')
mkdir "$package"
echo "$package"
echo "adb shell pm path $package"
apkpath=$(adb shell pm path "$package")
echo "$apkpath"
apkpath1=$(echo "$apkpath" | grep "package")
echo "$apkpath1"
apkpath2=$(echo "$apkpath" | grep "package" | tr -d '[[:space:]]')
echo "$apkpath2"
apkpath=$(adb shell pm path "$package" | grep package | tr -d '[[:space:]]')
adb pull ${apkpath/package:/} "$package/"
adb shell dumpsys package "$package" > "$package"/info
done < installed_packages)}
Thing is there are incongruities between the output of the command echo "adb shell pm path $package" where package is com.mobeam.barcodeService which returns a list of all the packages, and the actual content of the command "adb shell pm path com.mobeam.barcodeService", which returns just package:/system/app/BeamService/BeamService.apk (which is the desired output)
It looks like the script is returning a list of packages instead of the desired one. You can test this script with adb and any Android Device.
EDIT: Just to clarify, the error I'm getting is the following one:
adb: error: SendRequest failed: path too long: 3922
adb: error: failed to stat remote object
'com.samsung.android.provider.filterproviderpackage:com.monotype.android.font.rosemarypackage:com.sec.android.app.DataCreatepackage:com.gd.mobicore.papackage:com.sec.android.widgetapp.samsungappspackage:com.google.android.youtubepackage:com.samsung.android.app.galaxyfinderpackage:com.sec.android.app.chromecustomizationspackage:com.android.providers.telephonypackage:com.sec.android.app.parserpackage:com.google.android.googlequicksearchboxpackage:com.vlingo.midaspackage:com.android.providers.calendarpackage:com.osp.app.signinpackage:com.sec.android.directsharepackage:com.samsung.clipboardsaveservicepackage:com.sec.automationpackage:com.android.providers.mediapackage:com.google.android.onetimeinitializerpackage:com.sec.android.widgetapp.digitalclockpackage:com.android.wallpapercropperpackage:com.samsung.android.provider.shootingmodeproviderpackage:com.sec.android.app.wfdbrokerpackage:com.sec.android.app.safetyassurancepackage:com.sec.factory.camerapackage:org.simalliance.openmobileapi.servicepackage:com.sec.usbsettingspackage:com.samsung.android.easysetuppackage:com.android.documentsuipackage:com.android.externalstoragepackage:com.sec.factorypackage:com.android.htmlviewerpackage:com.whatsapppackage:com.android.mms.servicepackage:com.android.providers.downloadspackage:com.qualcomm.qti.auth.sampleauthenticatorservicepackage:com.samsung.ucs.agent.bootpackage:com.sec.android.theme.naturalpackage:com.wsomacppackage:com.sec.android.Kiespackage:com.qapp.secprotectpackage:com.sec.android.app.voicenotepackage:com.sec.android.app.easylauncherpackage:com.samsung.knox.rcp.componentspackage:com.sec.android.widgetapp.easymodecontactswidgetpackage:com.samsung.android.intelligenceservice2package:samsunges.sclubpackage:com.sec.di.SmartSelfShotpackage:com.samsung.android.MtpApplicationpackage:com.sec.android.app.factorykeystringpackage:com.sec.android.app.samsungappspackage:com.sec.android.emergencymode.servicepackage:com.google.android.configupdaterpackage:com.sec.android.app.wlantestpackage:com.sec.android.widgetapp.SPlannerAppWidgetpackage:com.sec.android.widgetapp.activeapplicationwidgetpackage:com.sec.android.app.billingpackage:com.sec.android.app.minimode.respackage:com.android.defcontainerpackage:com.sec.android.daemonapppackage:com.sec.enterprise.knox.attestationpackage:com.android.vendingpackage:com.android.pacprocessorpackage:com.dsi.ant.service.socketpackage:com.sec.android.app.popupuireceiverpackage:com.sec.android.AutoPreconfigpackage:com.sec.android.providers.securitypackage:com.sec.android.provider.badgepackage:com.android.certinstallerpackage:com.samsung.android.securitylogagentpackage:com.android.carrierconfigpackage:com.google.android.marvin.talkbackpackage:com.sec.android.app.taskmanagerpackage:com.samsung.android.app.assistantmenupackage:com.samsung.SMTpackage:com.sec.android.ofviewerpackage:com.samsung.everglades.videopackage:androidpackage:com.android.contactspackage:com.samsung.hs20providerpackage:com.samsung.android.sm.devicesecuritypackage:com.sec.android.casual2package:com.samsung.android.smartfacepackage:com.android.mmspackage:com.android.nfcpackage:com.android.stkpackage:com.sec.knox.foldercontainerpackage:com.android.backupconfirmpackage:com.sec.android.cloudagent.dropboxoobedummypackage:com.samsung.klmsagentpackage:com.samsung.android.app.memopackage:flipboard.apppackage:com.sec.android.app.SecSetupWizardpackage:com.android.statementservicepackage:com.google.android.gmpackage:com.sec.android.app.hwmoduletestpackage:com.sec.bcservicepackage:com.android.calendarpackage:com.sec.modem.settingspackage:com.android.phasebeampackage:com.monotype.android.font.samsungsanspackage:com.sec.android.app.sysscopepackage:com.google.android.instantapps.supervisorpackage:com.sec.android.app.wallpaperchooserpackage:com.sec.android.app.servicemodeapppackage:com.sec.android.preloadinstallerpackage:com.sec.android.widgpackage:/system/app/BeamService/BeamService.apk': File name too long

Install and run apk file on all connected devices in android through cmd

I know how to install and run apk through cmd with this command:
adb install SimpleClientActivity.apk
and:
adb shell am start -n com.example.simpleclientactivity/.SimpleClientActivity
How can I run this command on all connected devices?
Here and here you have an answer.
You can also build you projects with Maven and after clean install, type: mvn android:deploy android:run.
To install and automatically launch the app for multiple devices, the easiest way is to use the command line and a Windows Batch script in my opinion:
<!-- language: Batch script -->
:: This five lines are used to minimize the
:: command lines directly after the start
if not "%minimized%"=="" goto :minimized
set minimized=true
start /min cmd /C "%~dpnx0"
goto :EOF
:minimized
:: Path to the ADB and to the APK file
#set ADB="D:/Android/sdk/platform-tools/adb.exe"
#set APK="D:/workspace_android/SomeApp/bin/SomeApp.apk"
:: AndroidManifest.xml: <manifest package="com.example.appname">
:: The launching activity: <activity android:name=".activities.HomeActivity">
#set ACTIVITY=at.example.appname/.activities.HomeActivity
:: Install APK on all devices
%ADB% devices | tail -n +2 | cut -sf 1 | xargs -iX %ADB% -s X install -r %APK%
:: Launch App on all devices
%ADB% devices | tail -n +2 | cut -sf 1 | xargs -iX %ADB% -s X shell am start -a android.intent.action.MAIN -n %ACTIVITY%
In my case I have three devices. For faster access to one device, I used the following code instead of the loop in upper code. First, I install and launch the app on the fastest device and after that on the second and so on. I am sure there are better ways instead of using tail, head and xargs, but I don't know that much about Batch files, but it just runs. ;)
<!-- language: Batch script -->
:: NEXUS 5
:: This command reinstalls the APK on the Nexus 5 device
%ADB% devices | tail -n +2 | head -n +1 | cut -sf 1 | xargs -iX %ADB% -s X install -r %APK%
:: This command launch the application on the Nexus 5 device
%ADB% devices | tail -n +2 | head -n +1 | cut -sf 1 | xargs -iX %ADB% -s X shell am start -a android.intent.action.MAIN -n %ACTIVITY%
:: Galaxy Tab
%ADB% devices | tail -n -2 | cut -sf 1 | xargs -iX %ADB% -s X install -r %APK%
%ADB% devices | tail -n -2 | cut -sf 1 | xargs -iX %ADB% -s X shell am start -a android.intent.action.MAIN -n %ACTIVITY%
:: Optimus 3D
%ADB% devices | tail -n +3 | head -n +1 | cut -sf 1 | xargs -iX %ADB% -s X install -r %APK%
%ADB% devices | tail -n +3 | head -n +1 | cut -sf 1 | xargs -iX %ADB% -s X shell am start -a android.intent.action.MAIN -n %ACTIVITY%
After having the Windows Batch script, create a shortcut of that file. Right click the shortcut file and select properties. There you can specify a global shortcut key for example STRG+ALT+F10.
Just press STRG+ALT+F10 and the app will be launched on all devices.

Get Application Name/ Label via ADB Shell or Terminal

I'm developing an application that uses ADB Shell to interface with android devices, and I need some way of printing out the application name or label of an application, given maybe their package name.
In short, I need a way of getting app names (i.e. "Angry Birds v1.0.0") for user installed applications through adb shell.
Any light on the matter? Any help is appreciated on this.
adb shell pm list packages will give you a list of all installed package names.
You can then use dumpsys | grep -A18 "Package \[my.package\]" to grab the package information such as version identifiers etc
just enter the following command on command prompt after launching the app:
adb shell dumpsys window windows | find "mCurrentFocus"
if executing the command on linux terminal replace find by grep
If you know the app id of the package (like org.mozilla.firefox), it is easy.
First to get the path of actual package file of the appId,
$ adb shell pm list packages -f com.google.android.apps.inbox
package:/data/app/com.google.android.apps.inbox-1/base.apk=com.google.android.apps.inbox
Now you can do some grep|sed magic to extract the path : /data/app/com.google.android.apps.inbox-1/base.apk
After that aapt tool comes in handy :
$ adb shell aapt dump badging /data/app/com.google.android.apps.inbox-1/base.apk
...
application-label:'Inbox'
application-label-hi:'Inbox'
application-label-ru:'Inbox'
...
Again some grep magic to get the Label.
A shell script to accomplish this:
#!/bin/bash
# Remove whitespace
function remWS {
if [ -z "${1}" ]; then
cat | tr -d '[:space:]'
else
echo "${1}" | tr -d '[:space:]'
fi
}
for pkg in $(adb shell pm list packages -3 | cut -d':' -f2); do
apk_loc="$(adb shell pm path $(remWS $pkg) | cut -d':' -f2 | remWS)"
apk_name="$(adb shell aapt dump badging $apk_loc | pcregrep -o1 $'application-label:\'(.+)\'' | remWS)"
apk_info="$(adb shell aapt dump badging $apk_loc | pcregrep -o1 '\b(package: .+)')"
echo "$apk_name v$(echo $apk_info | pcregrep -io1 -e $'\\bversionName=\'(.+?)\'')"
done
Inorder to find an app's name (application label), you need to do the following:
(as shown in other answers)
Find the APK path of the app whose name you want to find.
Using aapt command, find the app label.
But devices don't ship with the aapt binary out-of-the-box.
So you will need to install it first. You can download it from here:
https://github.com/Calsign/APDE/tree/master/APDE/src/main/assets/aapt-binaries
Check this guide for complete steps:
How to find an app name using package name through ADB Android?
(Disclaimer: I am the author of that blog post)
This is what I just came up with. It gives a few errors but works well enough for my needs, matching package names to labels.
It pulls copies of all packages into subdirectories of $PWD, so keep that in mind if storage is a concern.
#!/bin/bash
TOOLS=~/Downloads/adt-bundle-linux-x86_64-20130717/sdk/build-tools/19.1.0
AAPT=$TOOLS/aapt
PMLIST=adb_shell_pm_list_packages_-f.txt
TEMP=$(echo $(adb shell mktemp -d -p /data/local/tmp) | sed 's/\r//')
mkdir -p packages
[ -f $PMLIST ] || eval $(echo $(basename $PMLIST) | tr '_' ' ') > $PMLIST
while read line; do
package=${line##*:}
apk=${package%%=*}
name=${package#*=}
copy=packages$apk
mkdir -p $(dirname $copy)
if [ ! -s $copy ]; then # copy it because `adb pull` doesn't see /mnt/expand/
adb shell cp -f $apk $TEMP/copy.apk
adb pull $TEMP/copy.apk $copy
fi
label=$($AAPT dump badging $copy || echo ERROR in $copy >&2 | \
sed -n 's/^application-label:\(.\)\(.*\)\1$/\2/p')
echo $name:$label
done < <(sed 's/\r//' $PMLIST)
adb shell rm -rf $TEMP
So I extremely grateful to jcomeau_ictx for providing the info on how to extract application-label info from apk and the idea to pull apk from phone directly!
However I had to make several alteration to script it self:
while read line; do done are breaking as a result of commands within while loop interacting with stdin/stdout and as a result while loop runs only once and then stops, as it is discussed in While loop stops reading after the first line in Bash - the comment from cmo I used solution provided and switched while loop to use unused file descriptor number 9.
All that the script really need is a package name and adb shell pm list packages -f is really excessive so I changed it to expect a file with packages list only and provided example on how one can get one from adb.
jcomeau_ictx script variant do not take in to account that some packages may have multiple apk associated with them which breaks the script.
And the least and last, I made every variable to start with underscore, it's just something that makes it easier to read script.
So here another variant of the same script:
#!/bin/bash
_TOOLS=/opt/android-sdk-update-manager/build-tools/29.0.3
_AAPT=${_TOOLS}/aapt
#adb shell pm list packages --user 0 | sed -e 's|^package:||' | sort >./packages_list.txt
_PMLIST=packages_list.txt
rm ./packages_list_with_names.txt
_TEMP=$(echo $(adb shell mktemp -d -p /data/local/tmp) | sed 's/\r//')
mkdir -p packages
[ -f ${_PMLIST} ] || eval $(echo $(basename ${_PMLIST}) | tr '_' ' ') > ${_PMLIST}
while read -u 9 _line; do
_package=${_line##*:}
_apkpath=$(adb shell pm path ${_package} | sed -e 's|^package:||' | head -n 1)
_apkfilename=$(basename "${_apkpath}")
adb shell cp -f ${_apkpath} ${_TEMP}/copy.apk
adb pull ${_TEMP}/copy.apk ./packages
_name=$(${_AAPT} dump badging ./packages/copy.apk | sed -n 's|^application-label:\(.\)\(.*\)\1$|\2|p' )
#'
echo "${_package} - ${_name}" >>./packages_list_with_names.txt
done 9< ${_PMLIST}
adb shell rm -rf $TEMP

How to run (not only install) an android application using .apk file?

Is there any command on cmd.exe that would allow me to start the main activity of a particular android application using the .apk file of that application. Please note that I know this command which only installs an android application:
adb install myapp.apk
This command will only install myapp onto the emulator and I have to manually run this application from the emulator (by performing single click on its icon).
What I want to do is use a command which not only installs the application but also starts its main activity (please note that I have only its .apk file so I don't know what the package name or any activity name is).
You can't install and run in one go - but you can certainly use adb to start your already installed application. Use adb shell am start to fire an intent - you will need to use the correct intent for your application though. A couple of examples:
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
will launch Settings, and
adb shell am start -a android.intent.action.MAIN -n com.android.browser/.BrowserActivity
will launch the Browser.
If you want to point the Browser at a particular page, do this
adb shell am start -a android.intent.action.VIEW -n com.android.browser/.BrowserActivity http://www.google.co.uk
If you don't know the name of the activities in the APK, then do this
aapt d xmltree <path to apk> AndroidManifest.xml
the output content will includes a section like this:
E: activity (line=32)
A: android:theme(0x01010000)=#0x7f080000
A: android:label(0x01010001)=#0x7f070000
A: android:name(0x01010003)="com.anonymous.MainWindow"
A: android:launchMode(0x0101001d)=(type 0x10)0x3
A: android:screenOrientation(0x0101001e)=(type 0x10)0x1
A: android:configChanges(0x0101001f)=(type 0x11)0x80
E: intent-filter (line=33)
E: action (line=34)
A: android:name(0x01010003)="android.intent.action.MAIN"
XE: (line=34)
That tells you the name of the main activity (MainWindow), and you can now run
adb shell am start -a android.intent.action.MAIN -n com.anonymous/.MainWindow
if you're looking for the equivalent of "adb run myapp.apk"
you can use the script shown in this answer
(linux and mac only - maybe with cygwin on windows)
linux/mac users can also create a script to run an apk with something like the following:
create a file named "adb-run.sh" with these 3 lines:
pkg=$(aapt dump badging $1|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
act=$(aapt dump badging $1|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')
adb shell am start -n $pkg/$act
then "chmod +x adb-run.sh" to make it executable.
now you can simply:
adb-run.sh myapp.apk
The benefit here is that you don't need to know the package name or launchable activity name. Similarly, you can create "adb-uninstall.sh myapp.apk"
Note: This requires that you have aapt in your path. You can find it under the new build tools folder in the SDK
This is a solution in shell script:
apk="$apk_path"
1. Install apk
adb install "$apk"
sleep 1
2. Get package name
pkg_info=`aapt dump badging "$apk" | head -1 | awk -F " " '{print $2}'`
eval $pkg_info > /dev/null
3. Start app
pkg_name=$name
adb shell monkey -p "${pkg_name}" -c android.intent.category.LAUNCHER 1
When you start the app from the GUI, adb logcat might show you the corresponding action/category/component:
$ adb logcat
[...]
I/ActivityManager( 1607): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.android.browser/.BrowserActivity} from pid 1792
[...]
I put this in my makefile, right the next line after adb install ...
adb shell monkey -p `cat .identifier` -c android.intent.category.LAUNCHER 1
For this to work there must be a .identifier file with the app's bundle identifier in it, like com.company.ourfirstapp
No need to hunt activity name.
First to install your app:
adb install -r path\ProjectName.apk
The great thing about the -r is it works even if it wasn’t already installed.
To launch MainActivity, so you can launch it like:
adb shell am start -n com.other.ProjectName/.MainActivity
I created terminal aliases to install and run an apk using a single command.
// I use ZSH, here is what I added to my .zshrc file (config file)
// at ~/.zshrc
// If you use bash shell, append it to ~/.bashrc
# Have the adb accessible, by including it in the PATH
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:path/to/android_sdk/platform-tools/"
# Setup your Android SDK path in ANDROID_HOME variable
export ANDROID_HOME=~/sdks/android_sdk
# Setup aapt tool so it accessible using a single command
alias aapt="$ANDROID_HOME/build-tools/27.0.3/aapt"
# Install APK to device
# Use as: apkinstall app-debug.apk
alias apkinstall="adb devices | tail -n +2 | cut -sf 1 | xargs -I X adb -s X install -r $1"
# As an alternative to apkinstall, you can also do just ./gradlew installDebug
# Alias for building and installing the apk to connected device
# Run at the root of your project
# $ buildAndInstallApk
alias buildAndInstallApk='./gradlew assembleDebug && apkinstall ./app/build/outputs/apk/debug/app-debug.apk'
# Launch your debug apk on your connected device
# Execute at the root of your android project
# Usage: launchDebugApk
alias launchDebugApk="adb shell monkey -p `aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name' | cut -d \' -f 2` 1"
# ------------- Single command to build+install+launch apk------------#
# Execute at the root of your android project
# Use as: buildInstallLaunchDebugApk
alias buildInstallLaunchDebugApk="buildAndInstallApk && launchDebugApk"
Note: Here I am building, installing and launching the debug apk which is usually in the path: ./app/build/outputs/apk/debug/app-debug.apk, when this command is executed from the root of the project
If you would like to install and run any other apk, simply replace the path for debug apk with path of your own apk
Here is the gist for the same.
I created this because I was having trouble working with Android Studio build reaching around 28 minutes, so I switched over to terminal builds which were around 3 minutes. You can read more about this here
Explanation:
The one alias that I think needs explanation is the launchDebugApk alias.
Here is how it is broken down:
The part aapt dump badging ./app/build/outputs/apk/debug/app-debug.apk | grep -e 'package: name basically uses the aapt tool to extract the package name from the apk.
Next, is the command: adb shell monkey -p com.package.name 1, which basically uses the monkey tool to open up the default launcher activity of the installed app on the connected device. The part of com.package.name is replaced by our previous command which takes care of getting the package name from the apk.

Categories

Resources