Ionic build cannot find module error. How to import Android plugin?

Ionic build cannot find module error. How to import Android plugin?

I'm trying to develop an Android Plugin to use in an Ionic app.

I'm trying to develop an Android Plugin to use in an Ionic app.

I created the app with a starter project already provided by Ionic using ionic start myApp tabs.

I have also created, in a different folder, my plugin, that contains the following files.

<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns=""
    id="location-plugin" version="0.0.1">
<description>Location Plugin</description>

<js-module name="LocationManager" src="www/LocationManager.js"> <clobbers target="LocationManager" /> </js-module>

<engines> <engine name="cordova" version=">=3.6.0"></engine> </engines>

<platform name="android"> <preference name="GOOGLE_PLAY_SERVICES_VERSION" default="11+"/> <preference name="ANDROID_SUPPORT_LIBRARY_VERSION" default="26+"/> <preference name="ICON" default="@mipmap/icon" /> <preference name="SMALL_ICON" default="@mipmap/icon" /> <preference name="ACCOUNT_NAME" default="@string/app_name" /> <preference name="ACCOUNT_LABEL" default="@string/app_name" /> <preference name="ACCOUNT_TYPE" default="$PACKAGE_NAME.account" /> <preference name="CONTENT_AUTHORITY" default="$PACKAGE_NAME" />

<framework src="$GOOGLE_PLAY_SERVICES_VERSION" /> <framework src="$ANDROID_SUPPORT_LIBRARY_VERSION" /> <framework src="$ANDROID_SUPPORT_LIBRARY_VERSION" /> <!-- <framework src="android/dependencies.gradle" custom="true" type="gradleReference"/> -->

<source-file src="path/to/locationmanager/" target-dir="path/to/locationmanager"></source-file>

<config-file target="AndroidManifest.xml" parent="/manifest"> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.hardware.location" /> </config-file>

<config-file target="res/xml/config.xml" parent="/*"> <feature name="GSLocationManager"> <param name="android-package" value="android.package.locationmanager.GSLocationManager" /> </feature> </config-file> </platform>

var GSLocationManager = {
  getCurrentLocation: function(success, failure) {
    exec(success, failure, 'GSLocationManager', 'getCurrentLocation', []);

module.exports = GSLocationManager;
package android.package.locationmanager;

import org.apache.cordova.CallbackContext; import org.apache.cordova.CordovaInterface; import org.apache.cordova.CordovaWebView; import org.apache.cordova.CordovaPlugin;

import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONException;

import android.annotation.SuppressLint; import android.content.Context; import android.location.Location; import android.location.LocationManager;

public class GSLocationManager extends CordovaPlugin {

private JSONObject data = new JSONObject();

// at the initialize function, we can configure the tools we want to use later, like the sensors
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
    super.initialize(cordova, webView);


// safety unregistering from the events if the application stops somehow
public void onDestroy() {


// this is the main part of the plugin, we have to handle all of the actions sent from the js
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
    if ("getCurrentLocation".equals(action)) {
        Location location = getCurrentLocation();
        JSONObject json = new JSONObject();
        json.put("latitude", location.getLatitude());
        json.put("longitude", location.getLongitude());
        return true;
    return false;  // Returning false results in a "MethodNotFound" error.

private Location getCurrentLocation() {
    LocationManager locationManager = (LocationManager) cordova.getActivity().getApplicationContext().getSystemService(Context.LOCATION_SERVICE);

    Location lastKnownGPSLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    return lastKnownGPSLocation;


Then I created a package.json for my plugin usign plugman And after that, added my android plugin to my Ionic project by doing ionic cordova plugin add path/to/my/plugin

But I cannot seem to be able to import my plugin to app.module.ts using import { GSLocationManager } from 'globespinning-location-plugin' I try to build but CLI says ERROR in src/app/app.module.ts(12,31): error TS2307: Cannot find module 'globespinning-location-plugin'.

Any idea where the error is? How should I import a plugin created by me, and referenced from a local folder? I want to be able to call GSLocationManager.getCurrentLocation() inside my ionic app.

Angular 9 Tutorial: Learn to Build a CRUD Angular App Quickly

What's new in Bootstrap 5 and when Bootstrap 5 release date?

Brave, Chrome, Firefox, Opera or Edge: Which is Better and Faster?

How to Build Progressive Web Apps (PWA) using Angular 9

What is new features in Javascript ES2020 ECMAScript 2020

Ionic 4, Angular 7 and Cordova Crop and Upload Image

The comprehensive step by step tutorial on crop, and upload Image using Ionic 4, Angular 7 and Cordova

How to Create Mobile Apps using Ionic 4, Angular 8 and Cordova?

In this Ionic 4 tutorial, we will show you how to create mobile apps quickly using Ionic 4, Angular 8, and Cordova

Ionic 4 & Angular Tutorial For Beginners - Crash Course

Learn to build iOS, Android and web apps from scratch with Ionic 4 and Angular!