Вы можете сделать это так в своем плагине:
plugin.xml
* * 1004
<platform name="android">
<source-file src="src/MyPlugin.java" target-dir="src/my/plugin" />
<source-file src="src/MyApplication.java" target-dir="src/my/plugin" />
</platform>
<edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
<application android:name="my.plugin.MyApplication" />
</edit-config>
MyApplication.java
package my.plugin;
import android.app.Application;
import android.util.Log;
public class MyApplication extends Application {
@Override
public void onCreate() {
Log.d("MyApplication", "onCreate");
super.onCreate();
}
}
Однако я обнаружил, что блок <edit-config>
был склонен к проблемам, когда плагин использовался в проекте с множеством других плагинов, поэтому я использовал скрипт-ловушку, чтобы добавить атрибут name к элементу <application>
в AndroidManifest.xml
* * 1014
В plugin.xml
, заменить:
<edit-config file="AndroidManifest.xml" target="/manifest/application" mode="merge">
<application android:name="my.plugin.MyApplication" />
</edit-config>
с:
<hook type="after_prepare" src="hooks/android_app_name.js" />
Затем внутри вашего каталога плагинов создайте hooks/android_app_name.js
:
#!/usr/bin/env node
var APP_CLASS = 'my.plugin.MyApplication';
module.exports = function(context) {
var fs = context.requireCordovaModule('fs'),
path = context.requireCordovaModule('path');
var platformRoot = path.join(context.opts.projectRoot, 'platforms/android');
var manifestFile = path.join(platformRoot, 'AndroidManifest.xml');
if (fs.existsSync(manifestFile)) {
fs.readFile(manifestFile, 'utf8', function (err, data) {
if (err) {
throw new Error('Unable to find AndroidManifest.xml: ' + err);
}
if (data.indexOf(APP_CLASS) == -1) {
var result = data.replace(/<application/g, '<application android:name="' + APP_CLASS + '"');
fs.writeFile(manifestFile, result, 'utf8', function (err) {
if (err) throw new Error('Unable to write AndroidManifest.xml: ' + err);
})
}
});
}
};