无法使用.aar文件从cordova插件启动活动
我正在尝试为android编写一个简单的cordova-plugin,但我陷入了崩溃,我不知道如何解决。无法使用.aar文件从cordova插件启动活动
我基本上按照这些步骤来创建简单的插件,它工作正常。
http://www.mat-d.com/site/tutorial-creating-a-cordova-phonegap-plugin-for-android-app/
然而,我的插件必须调用打包为.aar文件的活动。基本上我有一个完整的应用程序,需要由插件触发java /布局。
我按照以下步骤将我的.aar文件添加到cordova的android版本。
Cordova plugin development - adding aar
它还工作。现在,我至今在我的插件结构,这些文件(当然是相当黑客攻击,现在因为我一直最原始的名字):
在我yourFile.gradle我有这样的:
repositories{
jcenter()
flatDir{
dirs 'libs'
}
}
dependencies {
compile(name:'mylittlelibrary-release', ext:'aar')
compile 'com.android.volley:volley:1.0.0'
}
android {
packagingOptions {
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
}
}
和我的“CoolPlugin.java”的主要部分是这样的:
public class CoolPlugin extends CordovaPlugin {
public CoolPlugin() {}
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
}
public boolean execute(final String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
cordova.getActivity().runOnUiThread(new Runnable() {
public void run() {
final Context context = cordova.getActivity().getApplicationContext();
try {
Intent intent = new Intent(context, testv.com.mylittlelibrary.MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
cordova.getActivity().startActivity(intent);
} catch (Exception e) {
String errorText = e.toString();
Toast toast = Toast.makeText(context, errorText, duration);
toast.show();
}
我“mylittlelibrary-release.aar”指具有它的主要活动命名空间“testv.com.mylittlelibrary”所以MainActivity.java看起来是这样的:
package testv.com.mylittlelibrary;
import android.content.Context;
import android.support.v7.app.AppCompatActivity;
import com.android.volley.*;
import com.android.volley.toolbox.*;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
etc...
我读线程的下方,看起来我需要以某种方式登记自己的AAR文件的主要活动。
open an activity from a CordovaPlugin
我不完全知道如何做到这一点,所以我就自动生成的AndroidManifest.xml中
下C:\科尔多瓦\你好\平台\机器人\ AndroidManifest.xml中
和黑客攻击与命名空间中的活动里面这样:
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.example.hello" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
<activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
<intent-filter android:label="@string/launcher_name">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:label="@string/activity_name"
android:launchMode="singleTop"
android:name="testv.com.mylittlelibrary.MainActivity">
</activity>
</application>
<uses-sdk android:minSdkVersion="17" android:targetSdkVersion="23" />
</manifest>
我插件安装和使用运行应用程序:
cordova plugin add c:/CoolPlugin/
cordova build android
cordova run android
存在触发插件,你就在“mylittlelibrary-release.aar”文件“MainActivity”看到这则触发我的活动html文件按钮。
但是,我不断收到这次崩溃。我相信android插件无法正确解析名称空间并抛出此异常。
com.example.hello E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.hello, PID: 13119
java.lang.NoClassDefFoundError: Failed resolution of: Ltestv/com/mylittlelibrary/MainActivity;
at CoolPlugin$1.run(CoolPlugin.java:59)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5835)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
我也认为这与在testv.com.mylittlelibrary下正确注册MainActivity有关。但我不知道如何在科尔多瓦做。我需要解决这个问题,所以我很乐意为您提供一个可靠的解决方案来解决我的问题。
谢谢。
不要说,这很简单的错误。图书馆错过了一些进口和主题。这解决了这个问题。
清单:
android:theme="@style/Theme.AppCompat.Light"
摇篮:
dependencies {
compile(name:'mylittlelibrary-release', ext:'aar')
compile 'com.android.support:support-v13:23.1.0'
compile 'com.android.support:support-v4:23.1.0'
compile 'com.android.support:gridlayout-v7:23.1.1'
compile 'com.android.support:appcompat-v7:23.1.0'
compile 'com.android.support:design:23.1.0'
你好,很高兴你制定出一个解决方案。我需要你对下面的建议。我有一个类似的方式,其中包含类和方法在活动中提到的aar文件。但我需要创建一个活动,它将驻留在aar文件之外并位于我的Cordova插件中。这怎么能实现?任何建议? – Stallion
我也尝试过你的方式。创建一个库。使用Native android应用程序测试该库并运行良好。但是,当作为一个pluginname.aar文件包含在混合应用程序中,并且包含hello \ platforms \ android \ AndroidManifest.xml中的清单时,我得到错误。引起:java.lang.ClassNotFoundException:未在路径DexPathList中找到类“nativeplugin.cclib.MainActivity”。任何想法为什么它不能提及? – Stallion
你可以看看http://stackoverflow.com/questions/41245394/start-activity-inside-cordova-plugins-aars-file-in-ionic2链接哪个有类似的问题? – Stallion