NativeScript / nativescript-cli

Command-line interface for building NativeScript apps
https://www.npmjs.com/package/nativescript
Apache License 2.0
1.04k stars 196 forks source link

Unable to apply changes on device. Error is: Invalid Version. #5522

Open twopelu opened 3 years ago

twopelu commented 3 years ago

Environment

Windows 10 + Android

D:\DANI\vscode\NativeScriptAngularExample>tns info
✔ Getting NativeScript components versions information...
✔ Component nativescript has 8.0.1 version and is up to date.
✔ Component @nativescript/core has 8.0.3 version and is up to date.
✖ Component @nativescript/ios is not installed.
✔ Component @nativescript/android has ~8.0.0 version and is up to date.

Describe the bug

When I run the command ns run android to launch the app in a virtual device, the app is built and installed correctly, but it shows the error in console:

Unable to apply changes on device: emulator-5554. Error is: Invalid Version: ~8.0.0.

I have checked that the app is installed in the virtual device and if I open it manually it works properly, it seems the problem only affects to hot-reload of changes.

image image

See complete log of run command:

D:\DANI\vscode\NativeScriptAngularExample>ns run android
Searching for devices...
Preparing project...
webpack is watching the files...
asset vendor.js 16.2 MiB [compared for emit] (name: vendor) (id hint: defaultVendor)
asset bundle.js 461 KiB [emitted] [compared for emit] (name: bundle)
Entrypoint bundle 16.6 MiB = vendor.js 16.2 MiB bundle.js 461 KiB
orphan modules 228 KiB [orphan] 132 modules
runtime modules 25.1 KiB 14 modules
modules by path ./node_modules/ 6.13 MiB
  javascript modules 5.86 MiB 370 modules
  json modules 274 KiB
    modules by path ./node_modules/mdn-data/css/*.json 242 KiB 3 modules
    modules by path ./node_modules/css-tree/ 31.6 KiB 2 modules
modules by path ./src/ 131 KiB
  modules by path ./src/app/ 9.35 KiB
    modules by path ./src/app/*.ts 3.54 KiB 3 modules
    modules by path ./src/app/item/*.ts 5.81 KiB 3 modules
  ./src/main.ts 3.54 KiB [built] [code generated]
  ./src/app.css 118 KiB [built] [code generated]
external "~/package.json" 42 bytes [optional] [built] [code generated]
./$$_lazy_route_resource/ lazy namespace object 160 bytes [built] [code generated]
webpack 5.31.2 compiled successfully in 40511 ms
Webpack compilation complete. Watching for file changes.
File change detected. Starting incremental webpack compilation...
Updating runtime package.json with configuration values...
Project successfully prepared (android)
Unable to apply changes on device: emulator-5554. Error is: Invalid Version: ~8.0.0.

To Reproduce

  1. Install NativeScript in your computer with npm
  2. Create a new sample project using the CLI with the Angular template
  3. Setup the environment as per documentation (ANDROID_HOME, Path)
  4. Install Android SDK >= 28 and create a virtual device for that version
  5. Launch virtual device and run the NativeScript application using the CLI

Expected behavior

The expected behaviour would be to not see any errors in console and have hot-reaload of changes in the virtual device.

Sample project

I'm following the NativeScript Tutorial, the project has been created with the command ns create NativeScriptAngularExample --angular and there are no changes in the project except adding the dev dependency "@nativescript/android": "~8.0.0" as per documentation.

https://docs.nativescript.org/environment-setup.html#windows-android

I have checked my setup is correct by running the doctor.

See complete log of doctor command:

D:\DANI\vscode\NativeScriptAngularExample>ns doctor android
✔ Getting environment information

No issues were detected.
✔ Your ANDROID_HOME environment variable is set and points to correct directory.
✔ Your adb from the Android SDK is correctly installed.
✔ The Android SDK is installed.
✔ A compatible Android SDK for compilation is found.
✔ Javac is installed and is configured properly.
✔ The Java Development Kit (JDK) is installed and is configured properly.
✔ Local builds for iOS can be executed only on a macOS system. To build for iOS on a different operating system, you can use the NativeScript cloud infrastructure.
✔ Getting NativeScript components versions information...
✔ Component nativescript has 8.0.1 version and is up to date.
✔ Component @nativescript/core has 8.0.3 version and is up to date.
✔ Component @nativescript/android has ~8.0.0 version and is up to date.

Additional context

See configuration of the Android SDK and AVD:

image image

image

Please let me know if you need any further information. Thanks in advance!

s-ovation commented 3 years ago

Same happened to me.

ns doctor shows no error.

$  ns doctor
✔ Getting environment information

No issues were detected.
✔ Your ANDROID_HOME environment variable is set and points to correct directory.
✔ Your adb from the Android SDK is correctly installed.
✔ The Android SDK is installed.
✔ A compatible Android SDK for compilation is found.
✔ Javac is installed and is configured properly.
✔ The Java Development Kit (JDK) is installed and is configured properly.
✔ Xcode is installed and is configured properly.
✔ xcodeproj is installed and is configured properly.
✔ CocoaPods are installed.
✔ CocoaPods update is not required.
✔ CocoaPods are configured properly.
✔ Your current CocoaPods version is newer than 1.0.0.
✔ Python installed and configured correctly.
✔ The Python 'six' package is found.
✔ Xcode version 12.4.0 satisfies minimum required version 10.
✔ Getting NativeScript components versions information...
✔ Component nativescript has 8.0.2 version and is up to date.
✔ Component @nativescript/core has 8.0.5 version and is up to date.
✔ Component @nativescript/ios has ~8.0.0 version and is up to date.
✔ Component @nativescript/android has ~8.0.0 version and is up to date.
s-ovation commented 3 years ago

@twopelu Here is my workaround.

Remove ~ or ^ from version expressions in the package.json

before (NOT WORKED)

        "@nativescript/android": "~8.0.0",
        "@nativescript/ios": "~8.0.0",

after (WORKED)

        "@nativescript/android": "8.0.0",
        "@nativescript/ios": "8.0.0",

Use API 29 virtual device

Seems NativeScript CLI cannot launch API 30 devices. I created new virtual device which uses API 29 and it works perfectly.

kiyavash commented 2 years ago

Hi, I have the same issue, any solutions?

rigor789 commented 2 years ago

@kiyavash post your package.json

mohsenbarzgar commented 1 year ago

add package.json :

{
    "nativescript": {
        "id": {
            "ios": "org.nativescript.appidios",
            "android": "org.nativescript.appidandroid"
        },
        "tns-android": {
            "version": "*"
        },
        "tns-ios": {
            "version": "*"
        }
    },
    .........
}
indefinities commented 2 months ago

Hi, I am experiencing a similar error, but instead of "invalid version" I am getting "Must be String. Got type 'object'" Even though the version is "^8.8.2" I also tried the fix mentioned in this issue withinpackage.json`.

Successfully installed on device with identifier 'emulator-5554'.
Could not find an installed runtime, falling back to default runtimes
Could not find an installed runtime, falling back to default runtimes
Could not find an installed runtime, falling back to default runtimes
Unable to apply changes on device: emulator-5554. Error is: Invalid version. Must be a string. Got type "object"..
TypeError: Invalid version. Must be a string. Got type "object".
    at new SemVer (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/node_modules/semver/classes/semver.js:19:13)
    at compare (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/node_modules/semver/functions/compare.js:3:3)
    at Object.gt (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/node_modules/semver/functions/gt.js:2:29)
    at AndroidLiveSyncService._getDeviceLiveSyncService (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/lib/services/livesync/android-livesync-service.js:34:20)
    at AndroidLiveSyncService.getDeviceLiveSyncService (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/lib/services/livesync/platform-livesync-service-base.js:42:59)
    at AndroidLiveSyncService.<anonymous> (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/lib/services/livesync/platform-livesync-service-base.js:79:48)
    at Generator.next (<anonymous>)
    at /Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/lib/services/livesync/platform-livesync-service-base.js:14:71
    at new Promise (<anonymous>)
    at __awaiter (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/lib/services/livesync/platform-livesync-service-base.js:10:12)
Will emit event runOnDeviceError with data {
  projectDir: '/Users/hsunatal/Projects/ibd-ns-latest',
  deviceIdentifier: 'emulator-5554',
  applicationIdentifier: 'org.nativescript.ibdnslatest',
  error: TypeError: Invalid version. Must be a string. Got type "object".
      at new SemVer (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/node_modules/semver/classes/semver.js:19:13)
      at compare (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/node_modules/semver/functions/compare.js:3:3)
      at Object.gt (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/node_modules/semver/functions/gt.js:2:29)
      at AndroidLiveSyncService._getDeviceLiveSyncService (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/lib/services/livesync/android-livesync-service.js:34:20)
      at AndroidLiveSyncService.getDeviceLiveSyncService (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/lib/services/livesync/platform-livesync-service-base.js:42:59)
      at AndroidLiveSyncService.<anonymous> (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/lib/services/livesync/platform-livesync-service-base.js:79:48)
      at Generator.next (<anonymous>)
      at /Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/lib/services/livesync/platform-livesync-service-base.js:14:71
      at new Promise (<anonymous>)
      at __awaiter (/Users/hsunatal/.nvm/versions/node/v20.15.1/lib/node_modules/nativescript/lib/services/livesync/platform-livesync-service-base.js:10:12)
}
Stopping webpack watch for platform android.
Project dir from hooksArgs is: /Users/hsunatal/Projects/ibd-ns-latest.
AfterHookName for command watch is after-watch
Will emit event runOnDeviceStopped with data {
  projectDir: '/Users/hsunatal/Projects/ibd-ns-latest',
  deviceIdentifier: 'emulator-5554',
  keepProcessAlive: undefined
}
Webpack process exited with code null when we expected it to be long living with watch.