cordova run android executes fine. But Android 4.1

2019-01-10 20:48发布

问题:

I'm starting to develop and android app using Cordova 5.0.0 (cordova -v prints 5.0.0), and testing it on a Moto Razr D1 with Android 4.1.2. Under Windows 7, btw.

cordova build 

and manually copying the platforms/android/build/output/apk/android-degug.apk to the SD and installing works fine.

cordova emulate android 

runs fine on emulator with android version >4.1.2

cordova run android 

builds successfully, says using apk platforms/android/build/output/apk/android-debugger.apk, which seems ok, installing app, launching and LAUNCH SUCCESS. however as you can see in this screenshot

Razr Screenshot

This "WALLPAPER/MANAGE/SETTINGS" thing happens, and that's it.

If I execute:

cordova emulate android

On an emulator with Android 4.1.2 Jelly, an equal output

BUILD SUCCESSFUL

Total time: 6.352 secs
Built the following apk(s):
    C:\android\Some\platforms\android\build\outputs\apk\android-debug.apk
Installing app on emulator...
Using apk: C:\android\Some\platforms\android\build\outputs\apk\android-debug.apk
Launching application...
LAUNCH SUCCESS

same "WALLPAPAER/MANAGE/SETTINGS", here's another screenshot Emulator Screenshot

Any ideas how to solve this issue? Thanks in advance...

PS: If I've installed the apk previously, the Razr will startup the old version, instead of the WALLPAPER/MANAGE/SETTINGS thing. So I have to uninstall it before trying to run the cordova run commands.

回答1:

I met the same problem (Cordova "hello world" app won't display) and found a way to pass through it (but I don't really understand the underlying causes).

Problem seemed to occur when installing the apk. On Cordova 5.0.0, adb commands to install the apk can be found at line 101 of file platforms\android\cordova\lib\device.js (and at line 311 of platforms\android\cordova\lib\emulator.js for cordova emulate android):

adb -s ' + resolvedTarget.target + ' install -r -d "' + apk_path + '"

Current command returns to me: "Error: unknown option -d"!

If you simply delete the "-d" option, applications run normally with cordova run android.

EDIT

The -d is supposed to come directly after adb (as in --device) instead of after install. So you can just move it there instead of removing it.

Plus, here is the opened issue on apache cordova issue tracker



回答2:

Here are a couple of things to check and be aware of, in case you didn't know:

  • Your CLI version cordova -v won’t necessarily match the platform version cordova platform
  • Your platform versions between the different platforms (if you have any) may not match. For example, Android may have a different platform version than iOS.

If you've updated to the latest version of cordova-android sdk, please ensure you read through the releasenotes.md: https://github.com/apache/cordova-android/blob/master/RELEASENOTES.md

I'm not sure what SD is but I've installed my apps via

adb install <path_to_apk>

After comparing and checking your uploaded apk to your device, which I believe is easier to debug than the emulator, start up Android Debug Bridge with logcat:

adb -d logcat

If you prefer debugging with logcat through emulator, then:

adb -e logcat

There are extra debug flags to reduce the verbosity here: http://developer.android.com/tools/debugging/debugging-log.html. You'll need to adjust the filter spec to however you like, such as this: adb logcat ActivityManager:I MyApp:D *:S. I prefer to use adb logcat *:D to capture almost all debugging messages but reduce the verbosity slightly.

Hopefully, upon connection and startup of logcat you'll be able to catch what errors may be happening to cause your issue.

EDIT: Here's another method to do device debugging via chrome browser developer tools: https://developer.chrome.com/devtools/docs/remote-debugging

In general, here are the steps from the above link:

Requirements: Chrome 32 or later, USB cable to connect to Android device, browser debugging requires Android 4.0+, app debugging requires Android 4.4+

  1. Enable USB debugging on the device: Settings > Developer options. If you have an Android 4.2+ device, the developer options are hidden by default. Click on Settings > About phone and tap Build number seven times.
  2. In "Developer options", select USB debugging checkbox.
  3. Click OK to confirm that you are turning on USB debugging.
  4. Connect your device to your computer using the USB cable.
  5. Open Chrome browser and in the search/address bar type chrome://inspect.
  6. Click on the checkbox for Discover USB devices.
  7. On your device, an alert prompt appears. Click OK.
  8. The chrome://inspect page should now display your connected device. Click on the device's "inspect" link. Chrome developer tools should appear.

There is more information in the remote-debugging link above regarding live screencasting, proxy setup, port forwarding, and virtual host mapping.



回答3:

For those using Cordova 6.1.1 and having similar problem of not opening/installing the app, what worked for me was to run ionic emulate android once to open the android emulator with a home screen. Then, in another terminal window run again ionic emulate android which installed the application on the already opened emulator and everything worked normally.

Found similar problem in here: https://forum.ionicframework.com/t/ionic-serve-works-correctly-ionic-emulate-android-just-displays-android-emulator-home-screen/53524/6



回答4:

The solution is: edit emulator.js under platforms\android\cordova\lib

Go to line 311 and comment out the line

// return exec('adb -s ' + resolvedTarget.target + ' install -r -d "' + apk_path + '"', os.tmpdir())

and paste new line

return exec('adb -s ' + resolvedTarget.target + ' install -r  "' + apk_path + '"', os.tmpdir())

it works.



回答5:

for me this trick worked perfectly by removing the -d

but i had to install the apk manullay for the first time by transferring to phone and then i was able to run the app directly using ionic run android

hope this helps someone



回答6:

Changing the code in device.js and emulator.js didn't work for me (and in fact introduced an error where cordova build android wouldn't work anymore). My problem was completely different: I had two <application>s in my AndroidManifest.xml which is apparently not allowed.

Somewhere along the line I had added <application android:debuggable="true" /> to my AndroidManifest.xml. However, that file already had an "application" element that looked like this:

<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">

So I added the "debuggable" line to the existing <application> (and removed the second <application>) like so:

<application android:debuggable="true" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">

After that I rebuilt using cordova build android, ran it successfully on my device with cordova run android, and then clapped my hands and scared my dog.

HOWEVER, even if this isn't your issue, here's how I discovered the problem: I followed the instructions in jojo's answer and ran adb logcat with my device connected. That terminal tab immediately filled up with interminable crap.

Then I opened a new terminal window that I could view at the same time, I took note of the latest timestamp in the logcat output, and I ran cordova run android. The screen filled up with more crap, and then once things calmed down I scrolled back up to my starting time and reviewed it line by line. Eventually I found my culprit:

PackageParser: <manifest> has more than one <application>

Hope this helps!



回答7:

Try to use simple -

cordova run anroid

If there is no conencted device it will show "No target specified and no devices found, deploying to emulator" and will launch the emulator.