-1

私はAndroid 5.0以上で正常に動作するプロジェクトを持っています。Xamarin Android Android 4.3(api 17)のみのjava.lang.ClassNotFoundException

しかしAndroid 4.3で実行しようとしましたが、最初の動作を開始する前にクラッシュしました。

全エラー:彼は見つけられませんでした

05-18 23:44:57.309 E/AndroidRuntime(27114): Caused by: java.lang.ClassNotFoundException: Didn't find class "mapsproject.ApplicationStartup" on path: /data/app/MapsProject.MapsProject-1.apk 

クラスは、アプリケーションです。私は自分のプロジェクトでAndroid Support Libraryを使用しています.AppleApplicationなどがありますか?

以下

私のマニフェストです:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="MapsProject.MapsProject" android:versionCode="2" android:versionName="1.0.1" android:installLocation="auto"> 
    <uses-sdk android:minSdkVersion="17" /> 
    <uses-feature android:glEsVersion="0x00020000" android:required="true" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
    <uses-permission android:name="com.xamarin.docs.android.mapsproject.permission.MAPS_RECEIVE" /> 
    <permission android:name="com.xamarin.docs.android.mapsproject.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> 
    <!--Location permissions--> 
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /> 
    <!--Location permissions end--> 
    <application android:label="MobileMapsProject" android:name="mapsproject.ApplicationStartup" android:allowBackup="true" android:debuggable="true"> 
    <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyATpV7pH8ti6rJrnN01H4dbVeaMX2vJdvE" /> 
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
    <!--Facebook SDK--> 
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"></meta-data> 
    <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/ApplicationName" android:screenOrientation="portrait" /> 
    <activity android:icon="@drawable/icon" android:label="MapsProject" android:theme="@style/MobileMapsTheme" android:name="md53f4bea8a426a59bffa9695091cc3f865.MainActivity"> 
     <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:theme="@style/MobileMapsTheme" android:name="md53f4bea8a426a59bffa9695091cc3f865.MainMapActivity" /> 
    <activity android:configChanges="keyboardHidden|orientation|screenSize" android:name="com.facebook.ads.InterstitialAdActivity" /> 
    <service android:name="md59f70a99687498e7ba187118950981d26.KeepAliveService" /> 
    <provider android:name="mono.MonoRuntimeProvider" android:exported="false" android:initOrder="2147483647" android:authorities="MapsProject.MapsProject.mono.MonoRuntimeProvider.__mono_init__" /> 
    <receiver android:name="mono.android.Seppuku"> 
     <intent-filter> 
     <action android:name="mono.android.intent.action.SEPPUKU" /> 
     <category android:name="mono.android.intent.category.SEPPUKU.MapsProject.MapsProject" /> 
     </intent-filter> 
    </receiver> 
    <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@style/com_facebook_activity_theme" /> 
    <activity android:name="com.facebook.CustomTabActivity" android:exported="true"></activity> 
    <activity android:name="com.facebook.CustomTabMainActivity" /> 
    <activity android:name="com.facebook.FacebookActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@style/com_facebook_activity_theme" /> 
    <activity android:name="com.facebook.CustomTabActivity" android:exported="true"></activity> 
    <activity android:name="com.facebook.CustomTabMainActivity" /> 
    <!--Include the AdActivity and InAppPurchaseActivity configChanges and themes. --> 
    <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" android:theme="@android:style/Theme.Translucent" /> 
    <activity android:name="com.google.android.gms.ads.purchase.InAppPurchaseActivity" android:theme="@style/Theme.IAPTheme" /> 
    <activity android:name="com.google.android.gms.common.api.GoogleApiActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:exported="false" /> 
    <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 
    </application> 
</manifest> 

以下は例外をスローして私のクラスである:

[Application(Name ="mapsproject.ApplicationStartup")] 
    public class ApplicationStartup : Application 
    { 
     public static ApplicationStartup Current { get; private set; } 
     public SqliteManager Manager { get; set; } 
     SQLiteConnection conn; 
     public ApplicationStartup(IntPtr handle, global::Android.Runtime.JniHandleOwnership transfer) 
      : base(handle, transfer) { 
      Current = this; 
     } 
     public override void OnCreate() 
     { 
      base.OnCreate(); 

      var sqliteFilename = "MapsDB.db3"; 
      string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); 
      var path = Path.Combine(libraryPath, sqliteFilename); 
      conn = new SQLiteConnection(path); 

      Manager = new SqliteManager(conn); 
     } 
    } 

私は別のスレッドでいくつかのヒントを試してみたが、それは解決しませんでした問題。

ありがとうございます!

編集1:

完全なapkマニフェストが追加されました。

+0

あなたのパッケージマニフェストは何が含まれていますか? – SushiHangover

+0

パッケージマニフェストとは、コードを実行するときにXamarinが生成する完全なマニフェストを意味しますか? –

+0

はい、最終的なマニフェストはapkにパッケージ化されています。以下のような場所で見つけることができます: 'obj/Debug/android/manifest/AndroidManifest.xml' – SushiHangover

答えて

0

Xamarin ForunsのJonDouglasのおかげで、私は解決策を見つけました。

Multidexを有効にすると問題が発生します。

Android 5以上ではマルチディックス自体を処理しますが、以下のバージョンではサポートしていません。だから、私は自分のアプリケーションの活動がclasses2.dexで生成されていることを発見しました。そしてそれはclasses.dexにあるはずです。そうすれば、Androidはアプリケーションを見つけ出し、アプリケーションを起動できます。 はclasses.dexを確認するには、私はClassyShark使用しました:https://github.com/google/android-classyshark

この問題を知った後、私は(obj/Debug/multidex.keepにあります)私のmultidex.keepが空であることがわかってきたので、それが問題でした。これを解決するために、私はアンドロイドSDKビルドツール(androidsdk\build-tools\25.0.3)に行き、編集のために開く必要があったmainDexClasses.bat

if DEFINED output goto redirect 
call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder "%disableKeepAnnotated%" "%tmpJar%" "%params%" 
goto afterClassReferenceListBuilder 
:redirect 
call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder "%disableKeepAnnotated%" "%tmpJar%" "%params%" 1>"%output%" 
:afterClassReferenceListBuilder 

をし、に変更します:

だから、私は、コードのこの部分を見つけた

SET params=%params:'=% 
if DEFINED output goto redirect 
call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder %disableKeepAnnotated% "%tmpJar%" %params% 
goto afterClassReferenceListBuilder 
:redirect 
call "%java_exe%" -Djava.ext.dirs="%frameworkdir%" com.android.multidex.MainDexListBuilder %disableKeepAnnotated% "%tmpJar%" %params% 1>"%output%" 
:afterClassReferenceListBuilder 

この方法で、正しくmultidex.keepファイルを扱うことができるのビルドツール。

この後、私はプロジェクトを再構築し、multidex.keepが正しく生成されました。だから、私はファイル内のテキストをコピーし、自分のmultidex.keepファイルをソリューション上に作成しました。

これを行うには、multidex.keepという名前のテキストファイルをアンドロイドプロジェクトに追加しました。私は生成されたmultidex.keepの値を新しいファイルに貼り付けて、自分の活動を一番上に移動しました。 したがって、multidex.keepファイルのプロパティを開き、Build ActionをMultiDexMainDexListに設定しました。

これ以降、私はプロジェクトを再構築して、classes.dexが正しく生成されました。この方法でアンドロイド4.4でアプリを実行できます。

ここで私は解決策を発見しましたリンクは、以下のとおりです。 http://www.jon-douglas.com/2016/09/05/xamarin-android-multidex/

関連する問題