I’m having trouble with developing a plugin. I followed this page on the docs, but I must’ve missed something since it’s not working at all.
I’m not very familiar with Java or android development, please let me know if I’ve got something wrong.
I create the plugin just as explained in the guide with the same parameters:
npx @capacitor/cli plugin:generate
✏️ Creating new Capacitor plugin
? Plugin NPM name (kebab-case): my-plugin
? Plugin id (domain-style syntax. ex: com.example.plugin) com.ionicframework.myplugin
? Plugin class name (ex: AwesomePlugin) MyPlugin
? description:
? git repository:
? author:
? license: MIT
? package.json will be created, do you want to continue? (Y/n)
Then I run npm run build
.
In my Capacitor app I run npm install "/home/leonardo/Desktop/Node Projects/my-plugin"
to locally install my plugin and run npx cap sync
:
npx cap sync
✔ Copying web assets from build to android/app/src/main/assets/public in 21.37ms
✔ Copying native bridge in 1.14ms
✔ Copying capacitor.config.json in 1.41ms
✔ copy in 43.39ms
✔ Updating Android plugins in 2.40ms
Found 1 Capacitor plugin for android:
my-plugin (0.0.1)
✔ update android in 25.32ms
✔ copy in 248.88μp
✔ update web in 5.94μp
Sync finished in 0.08s
In src/main/java/com/ionicframework/myplugin/MyPlugin.java
the Plugin looks like this:
package com.ionicframework.myplugin;
import com.getcapacitor.JSObject;
import com.getcapacitor.NativePlugin;
import com.getcapacitor.Plugin;
import com.getcapacitor.PluginCall;
import com.getcapacitor.PluginMethod;
@NativePlugin()
public class MyPlugin extends Plugin {
@PluginMethod()
public void echo(PluginCall call) {
String value = call.getString("value");
JSObject ret = new JSObject();
ret.put("value", value);
call.success(ret);
}
}
I then go to my app to make Capacitor aware of the plugin and edit src/main/java/com/ironeko/time/MainActivity.java
:
package com.ironeko.time;
import android.os.Bundle;
import com.getcapacitor.BridgeActivity;
import com.getcapacitor.Plugin;
import java.util.ArrayList;
import com.ironeko.time.EchoPlugin;
public class MainActivity extends BridgeActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Initializes the Bridge
this.init(savedInstanceState, new ArrayList<Class<? extends Plugin>>() {{
// Additional plugins you've installed go here
// Ex: add(TotallyAwesomePlugin.class);
add(EchoPlugin.class);
}});
}
}
I also tried importing:
import com.ionicframework.myplugin.EchoPlugin;
Once I run my app in Android Studio however I get this error:
/home/leonardo/Desktop/Node Projects/time-management/android/app/src/main/java/com/ironeko/time/MainActivity.java:10: error: cannot find symbol
import com.ironeko.time.EchoPlugin;
^
symbol: class EchoPlugin
location: package com.ironeko.time
What’s happening? Shouldn’t this work?