After adb install
-ing my app, I can verify that it's there with adb shell pm list packages AppName
:
package:air.com.client.AppName
So I know it's there, but when I try to launch it with adb shell am start -a android.intent.action.MAIN -n air.com.client/.AppName
, I get this error:
Starting: Intent { cmp=air.com.client/.AppName}
Error type 3
Error: Activity class {air.com.client/air.com.client.AppName} does not exist.
If it matters, this is, as you may have noticed, an AIR app that's been packaged as an Android app. Any ideas? Did I miss something somewhere? When I use aapt dump xmltree
I can see that my .apk includes an android.intent.action.MAIN
entry in the intent-filter node, for what it's worth.
And finally, for sanity's sake, using the same command template I can launch the settings app with no problems:
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.Settings
Watch out for
applicationIdSuffix
!!When using
applicationIdSuffix
in build.gradle the suffix only applies to your application id, not to the actual package structure in the generated .apk, meaning that referencing your activity the short way (.MainActivity
, instead of its fully qualified name) will add the application id suffix to the path of the activity too and hence AS will fail to locate it. E.g.:My application's package name is
my.application.package
, and I have this in my app module's build.gradle:When trying to execute, let's say `MainActivity (which is located in the root package) from the command line:
actually resolves to
But
MainActivity
is actually located inmy.application.package.MainActivity
, not inmy.application.package.dev.MainActivity
, becauseapplicationIdSuffix
changes only the application id, not the actual package structure, so it will fail to locate it.Therefore, you should use the activity's fully qualified name:
At lease for me the issue was solved once I entered a full path to the main activity in the application manifest file.
Instead of:
Use:
and then use the regular:
The problem is for writing only the activity name without it's package
Is wrong,
First, You should enter the activity name (not the AppName), and second you can't enter the activity name without the package name .AppName alone wouldn't work. you should enter air.com.client.AppName even if the activity is in the exact same package as the application package.
This would probably work
Managed to figure it out - I left a prompt open with
adb logcat
, then launched my app on the device - out of this corresponding log entry:I put together a new command line:
... which does exactly what I wanted. I'll be honest, I don't understand exactly why it works, but that's good enough for now.
I created a new project by copying another existing, and got this problem. None of the answers above helped as all seemed to be correct. And what eventually resolved the issue in my case was just a restart of the Andriod Studio.