5

Я уже несколько дней борюсь с моим проектом, внезапно из одной сборки/развертывания в другую я начал получать следующее исключение. Ничего не было обновлено или изменено, я просто хотел запустить приложение на другом устройстве, когда это произошло (как и любой другой день).Не удалось создать экземпляр активности ... Не нашел класс WelcomeActivity по пути: DexPathList (с мгновенным запуском)

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.my.app.flavor.debug/com.my.app.ui.activity.WelcomeActivity}: java.lang.ClassNotFoundException: Didn't find class "com.my.app.flavor.ui.activity.WelcomeActivity" on path: DexPathList[[zip file "/data/app/com.my.app.flavor.debug-2/base.apk"],nativeLibraryDirectories=[/data/app/**com.my.app.flavor.**debug-2/lib/x86, /data/app/com.my.app.flavor.debug-2/base.apk!/lib/x86, /vendor/lib, /system/lib]] 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
        at android.app.ActivityThread.-wrap11(ActivityThread.java) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:148) 
        at android.app.ActivityThread.main(ActivityThread.java:5417) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
       Caused by: java.lang.ClassNotFoundException: Didn't find class "com.my.app.ui.activity.WelcomeActivity" on path: DexPathList[[zip file "/data/app/com.my.app.flavor.debug-2/base.apk"],nativeLibraryDirectories=[/data/app/com.my.app.flavor.debug-2/lib/x86, /data/app/com.my.app.flavor.debug-2/base.apk!/lib/x86, /vendor/lib, /system/lib]] 
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
        at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
        at java.lang.ClassLoader.loadClass(ClassLoader.java:469) 
        at android.app.Instrumentation.newActivity(Instrumentation.java:1067) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
        at android.app.ActivityThread.-wrap11(ActivityThread.java)  
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
        at android.os.Handler.dispatchMessage(Handler.java:102)  
        at android.os.Looper.loop(Looper.java:148)  
        at android.app.ActivityThread.main(ActivityThread.java:5417)  
        at java.lang.reflect.Method.invoke(Native Method)  
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
       Suppressed: java.lang.ClassNotFoundException: com.my.app.ui.activity.WelcomeActivity 
        at java.lang.Class.classForName(Native Method) 
        at java.lang.BootClassLoader.findClass(ClassLoader.java:781) 
        at java.lang.BootClassLoader.loadClass(ClassLoader.java:841) 
        at java.lang.ClassLoader.loadClass(ClassLoader.java:504) 
         ... 12 more 
       Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available 

отладка сборка не в состоянии развернуть/запуск на все мои 3 устройствах (Android 5.0.2, 6.0.1 и 7.0), а также на эмуляторах. Запуск работает, если я выбираю две или более цели развертывания, но не только с одним (поскольку мгновенный запуск отключен несколькими целями). Debug и Run работает, когда мгновенный запуск отключен

Мой проект имеет несколько вкусов и applicationIds (как в Android wear project with 3 flavors, 3 buildTypes and 2 applicationIdSuffixes). Ни один из файлов градиента не был изменен, когда произошла ошибка, и не было манифеста.

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
android:installLocation="auto" 
package="com.my.app"> 
<permission 
    android:name="${applicationId}.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<!-- PROTECTION_NORMAL --> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<!-- PROTECTION_DANGEROUS --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
<!-- Protection unknown --> 
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 

<uses-feature android:glEsVersion="0x00020000" android:required="true" /> 
<uses-feature android:name="android.hardware.location" android:required="true" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme"> 
    <activity android:name="net.hockeyapp.android.UpdateActivity" /> 
    <activity 
     android:name=".ui.activity.WelcomeActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".ui.activity.StartActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" /> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" /> 

    <activity 
     android:name="com.facebook.LoginActivity" 
     android:screenOrientation="portrait" /> 
    <activity 
     android:name=".ui.activity.NotificationActivity" 
     android:screenOrientation="portrait" /> 

    <activity 
     android:name=".ui.activity.OtherActivity" 
     android:label="@string/cards_register_card" 
     android:screenOrientation="portrait" /> 
    <activity 
     android:name=".ui.activity.OneMoreActivity" 
     android:label="@string/a_title" 
     android:parentActivityName=".ui.activity.OtherActivity" 
     android:screenOrientation="portrait"> 
     <meta-data 
      android:name="android.support.PARENT_ACTIVITY" 
      android:value=".ui.activity.OtherActivity" /> 
    </activity> 

    <service android:name=".service.WearableListenerService"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.wearable.DATA_CHANGED" /> 
      <action android:name="com.google.android.gms.wearable.MESSAGE_RECEIVED" /> 

      <data 
       android:host="*" 
       android:pathPrefix="/path" 
       android:scheme="wear" /> 
     </intent-filter> 
    </service> 

    <!-- GCM START --> 
    <receiver 
     android:name="com.google.android.gms.gcm.GcmReceiver" 
     android:exported="true" 
     android:permission="com.google.android.c2dm.permission.SEND"> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 

      <category android:name="${applicationId}" /> 
     </intent-filter> 
    </receiver> 

    <service 
     android:name=".service.PushListenerService" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
     </intent-filter> 
    </service> 
    <service 
     android:name=".service.PushInstanceIDListenerService" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.iid.InstanceID" /> 
     </intent-filter> 
    </service> 
    <service 
     android:name=".service.PushRegistrationIntentService" 
     android:exported="false"></service> 
    <!-- GCM END --> 

    <meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="@string/google_maps_api_key" /> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
    <meta-data 
     android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/facebook_app_id" /> 

    <!-- Register AnalyticsReceiver and AnalyticsService to support background dispatching on non-Google Play devices --> 
    <receiver 
     android:name="com.google.android.gms.analytics.AnalyticsReceiver" 
     android:enabled="true"> 
     <intent-filter> 
      <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" /> 
     </intent-filter> 
    </receiver> 

    <service 
     android:name="com.google.android.gms.analytics.AnalyticsService" 
     android:enabled="true" 
     android:exported="false" /> 
</application> 

До сих пор я попытался следующие:

  • чистый, чистый, чистый и даже больше очистки
  • удалить все/сборки папки
  • перезапуск Android Studio (2.2), мой компьютер и все устройства
  • удалить все вкусы моих приложений на всех устройствах и эмуляторы
  • пытается создать новую конфигурацию Run с деятельностью, указанной под Параметры запуска (иногда работает при запуске на одной цели развертывания, но никогда в Debug режим)
  • работает с мгновенной перспективой деактивирован с последующим бегом с ним активированного
  • повторной установкой Android Studio

Любая помощь в получении этой работы с мгновенным запуском очень ценится!

+0

пожалуйста, напишите полный манифест вместо этой части –

+1

Попробовать запустить эту команду в терминале и посмотреть, если есть какая-либо ошибка: 'gradlew -d assembleDebug', если ошибка не выскочит , может быть и ошибка Android Studio, иногда я сталкиваюсь с такими проблемами, как ваша, попробуйте отключить функцию мгновенного запуска, если она есть. –

+0

'gradlew -d assembleDebug' строит отлично, никаких ошибок. Отключение мгновенного запуска на самом деле позволяет мне отлаживать (thx!), Но как заставить его работать _with_ мгновенный запуск снова? – Tormod

ответ

4

Это похоже на ошибку в сборки инструментов версии 24.0.2, я повышен до 24.0.3 и, наконец, получил его снова работает!

buildToolsVersion '24.0.3' 

Возврат к 24.0.2 воспроизводит проблему каждый раз.

4

Кажется, что это случается время от времени с включенным мгновенным запуском (хотя не так часто в последних обновлениях Android Studio). Просто отключите мгновенный запуск, запустите приложение, включите мгновенный запуск еще раз.

Надеюсь, мгновенный запуск будет продолжать улучшаться.

(Для меня, переключение между ветвями, кажется, чтобы вызвать это чаще.)

+0

Не переключался ветвь в долгое время, но хорошо знать! К сожалению, отключение, запуск и включение ничего не сделали для меня. – Tormod

0

У него может быть несколько причин. Если ваша проблема в том, что он не может запустить приложение на устройстве, когда он установлен от отладки APK файл и журнал ошибок показывает:

java.lang.RuntimeException: Невозможно создать экземпляр активности ComponentInfo java.lang.ClassNotFoundException : не нашли класс «com.b.MainActivity» по пути: DexPathList

затем получить подписанный APK и запустить на любом устройстве, он будет работать.

Android Studio> Сборка> Создать подписан APK