2016-04-26 11 views
2

私はアンドロイド用の単純なコードバ - プラグインを作成しようとしていますが、解決方法がわからないクラッシュに巻き込まれています。.aarファイルを使用してcordovaプラグインからアクティビティを開始できません

私は基本的に単純なプラグインを作成するためにこれらの手順を実行し、正常に動作しました。

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

しかし、私のプラグインは.aarファイルとしてパッケージ化されたアクティビティを呼び出す必要があります。基本的に私はプラグインによってトリガーされる必要があるJava /レイアウトで完全に吹き飛ばされたアプリケーションを持っています。

私の.aarファイルをcordroidのアンドロイドビルドに追加する手順は、次のとおりです。

Cordova plugin development - adding aar

また、働いていました。

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' 
    } 
} 
:私のyourFile.gradleで

enter image description here

は、私はこれを持っている:今、私はこれらのファイルは、(私は元の名前のほとんどを保っているので確かにかなり今ハッキングされた)これまでのところ、私のプラグイン構造を持っています

と私の「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

私はこれを行う方法を全くわからないので、私はC

の下に自動生成されたAndroidManifest.xml内で行ってきました:\コルドバ\こんにちは\プラットフォーム\ androidの\ 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ファイル内のボタンがあります。

しかし、私はこのクラッシュを続けています。私はアンドロイドプラグインがネームスペースを正しく解決できず、この例外をスローすると信じています。

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とは何かを持っていると信じています。しかし、私はコードワで何をするのか分かりません。私はこれを解決する必要があるので、私のブロックを解除する確固たる答えに対する私の評判の点を教えてくれることをうれしく思います。

ありがとうございました。

答えて

2

これは簡単な間違いでした。図書館はいくつかの輸入品とテーマを見逃していた。これで問題は解決しました。

マニフェスト:

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' 
+0

こんにちは、。私はあなたの提案が必要です。私は、アクティビティで参照されるクラスとメソッドを持つ同様の方法で含まれているaarファイルを持っています。しかし、私はaarファイルの外側と私のCordova Pluginの内部にあるActivityを作成する必要があります。これはどのように達成できますか?なにか提案を? – Stallion

+0

私もあなたのやり方を試しました。ライブラリの作成。ネイティブアンドロイドアプリケーションでライブラリをテストし、うまく動作します。しかし、hello \ platforms \ android \ AndroidManifest.xmlにマニフェストを含む変更を含むpluginname.aarファイルとしてハイブリッドアプリケーションに含まれると、エラーが発生します。原因:java.lang.ClassNotFoundException:パス "DexPathList"でクラス "nativeplugin.cclib.MainActivity"が見つかりませんでした。なぜその参照することができない任意のアイデア? – Stallion

+0

同様の問題があるhttp://stackoverflow.com/questions/41245394/start-activity-inside-cordova-plugins-aars-file-in-ionic2 linkを調べることはできますか? – Stallion

関連する問題