gpt4 book ai didi

android-activity - 无法使用 .aar 文件从cordova 插件启动 Activity

转载 作者:行者123 更新时间:2023-12-01 13:44:38 25 4
gpt4 key购买 nike

我正在尝试为 android 编写一个简单的cordova-plugin,但我陷入了一个我不知道如何解决的崩溃中。

我基本上按照这些步骤创建了简单的插件,并且运行良好。

http://www.mat-d.com/site/tutorial-creating-a-cordova-phonegap-plugin-for-android-app/

然而,我的插件必须调用打包为 .aar 文件的 Activity 。基本上,我有一个完整的应用程序,其中包含需要由插件触发的 java/layouts。

我按照这些步骤将我的 .aar 文件添加到cordova的android版本。

Cordova plugin development - adding aar

它也起作用了。现在,到目前为止,我的插件结构中有这些文件(不可否认,由于我保留了大部分原始名称,因此现在已经相当不错了):

enter image description here

在我的 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”下有它的主要 Activity ,所以 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 文件的主要 Activity 。

open an activity from a CordovaPlugin

我不完全确定如何做到这一点,所以我进入了自动生成的 AndroidManifest.xml 下

C:\cordova\hello\platforms\android\AndroidManifest.xml

并使用内部命名空间入侵 Activity :
<?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

html 文件中有一个触发插件的按钮,然后触发我的 Activity ,如您在“mylittlelibrary-release.aar”文件的“MainActivity”中看到的那样。

然而,我不断遇到这种崩溃。我相信 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 有关。但我不知道如何在 Cordova 做。我需要解决这个问题,所以我很高兴给你点我的声誉,因为我的回答是可靠的,可以解开我的障碍。

谢谢你。

最佳答案

没关系,这是一个简单的错误。图书馆错过了一些导入和主题。这解决了这个问题。

显现:

android:theme="@style/Theme.AppCompat.Light"

Gradle :
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'

关于android-activity - 无法使用 .aar 文件从cordova 插件启动 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36875818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com