Intereting Posts
SonarQube: как применить несколько профилей качества к одному проекту? Python vars () в Котлине "Coroutine local" переменные в kotlin Как проверить функцию kotlin varargs с помощью mockito Android – SharedPreferences – Контекст Kotlin + Intelij + HtmlUnit: Ни одна из следующих функций не может быть вызвана с предоставленными аргументами Передача любого в массив в Котлин Почему getMessage () является нерешенной ссылкой в ​​Kotlin с классом Exception? Есть ли способ идентифицировать класс данных Kotlin из обычного класса Kotlin? Android Espresso IntentsMatcher работает на новом устройстве, но не в старом RxJava с использованием Kotlin – как синхронизировать 2 асинхронных метода, рефакторинг с Java Kotlin: передать объект в качестве ссылки и изменить его экземпляр Почему у Kotlin есть два синтаксиса для lambdas / анонимных функций? Out-projected type «ArrayList <*>» запрещает использование «public open fun add (index: Int, element: E): Unit, определенный в java.util.ArrayList ' что эквивалентно этому котлинскому коду java

ClassNotFoundException при последующих сборках после преобразования MainActivity в Kotlin

Я хочу дать Kotlin попробовать, поэтому я решил попробовать преобразовать один класс моего проекта в Kotlin и посмотреть, как он интегрируется с моим рабочим процессом, прежде чем пытаться преобразовать весь мой проект. Я могу построить, и мое приложение работает правильно, но после каждой последующей сборки после первого я получаю исключение из класса ClassLoader. Приложение работает только после очистки, и отлично работало, прежде чем я что-то изменил. Я могу запускать проект HelloWorld на одном компьютере несколько раз без ошибок. Ответы в этом вопросе не помогли: ClassNotFoundException в пользовательском вкусе с использованием kotlin

07-31 14:35:41.563 1878-1878/com.ddiehl.android.htn.debug E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.ddiehl.android.htn.debug, PID: 1878 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.ddiehl.android.htn.debug/com.ddiehl.android.htn.view.activities.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.ddiehl.android.htn.view.activities.MainActivity" on path: DexPathList[[zip file "/data/app/com.ddiehl.android.htn.debug-1/base.apk"],nativeLibraryDirectories=[/data/app/com.ddiehl.android.htn.debug-1/lib/arm, /vendor/lib, /system/lib]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) at android.app.ActivityThread.access$800(ActivityThread.java:144) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5221) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.ddiehl.android.htn.view.activities.MainActivity" on path: DexPathList[[zip file "/data/app/com.ddiehl.android.htn.debug-1/base.apk"],nativeLibraryDirectories=[/data/app/com.ddiehl.android.htn.debug-1/lib/arm, /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:1065) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)             at android.app.ActivityThread.access$800(ActivityThread.java:144)             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)             at android.os.Handler.dispatchMessage(Handler.java:102)             at android.os.Looper.loop(Looper.java:135)             at android.app.ActivityThread.main(ActivityThread.java:5221)             at java.lang.reflect.Method.invoke(Native Method)             at java.lang.reflect.Method.invoke(Method.java:372)             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) Suppressed: java.lang.ClassNotFoundException: com.ddiehl.android.htn.view.activities.MainActivity 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) ... 13 more Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available 

У кого-нибудь есть идея, почему мое приложение может работать на первой сборке, но не на последующих сборках? Вот мой сборщик, манифест и активность для справки.

build.gradle (модуль приложения)

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'com.jakewharton.hugo' apply plugin: 'com.getkeepsafe.dexcount' apply plugin: 'me.tatarka.retrolambda' android { compileSdkVersion 22 buildToolsVersion "23 rc3" defaultConfig { applicationId "com.ddiehl.android.htn" minSdkVersion 15 targetSdkVersion 22 versionCode 4 versionName "0.3.0-dev" ndk { moduleName "app" } } signingConfigs { release { storeFile file(ANDROID_KEYSTORE_PATH) storePassword ANDROID_KEYSTORE_PWD keyAlias HTN_KEYSTORE_ALIAS keyPassword HTN_KEYSTORE_PWD } } buildTypes { debug { applicationIdSuffix ".debug" minifyEnabled false } release { debuggable false minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } sourceSets { main.java.srcDirs += 'src/main/kotlin' debug.java.srcDirs += 'src/debug/kotlin' } } def getLocalProperty(s) { Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) return properties.getProperty(s) } retrolambda { jdk getLocalProperty("jdk8.dir") } dependencies { compile project(':reddit') compile project(':mopub') compile project(':flurry') compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" compile 'com.android.support:appcompat-v7:22.2.1' compile 'com.android.support:support-v4:22.2.1' compile 'com.android.support:design:22.2.0' compile 'com.android.support:recyclerview-v7:22.2.1' compile 'com.android.support:cardview-v7:22.2.1' compile 'com.google.android.gms:play-services-ads:7.5.0' compile 'com.squareup.okhttp:okhttp:2.4.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0' compile 'com.squareup.retrofit:retrofit:1.9.0' compile 'com.squareup:otto:1.3.5' compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.jakewharton:butterknife:7.0.0' compile 'com.jakewharton:kotterknife:0.1.0-SNAPSHOT' compile 'io.reactivex:rxandroid:0.25.0' compile 'com.facebook.stetho:stetho:1.1.1' compile 'com.facebook.stetho:stetho-okhttp:1.1.1' debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3.1' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1' } buildscript { ext.kotlin_version = '0.12.1230' repositories { mavenCentral() maven { url 'http://oss.sonatype.org/content/repositories/snapshots' } } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } repositories { mavenCentral() maven { url 'http://oss.sonatype.org/content/repositories/snapshots' } } 

AndroidManifest.xml

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ddiehl.android.htn" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:name="com.ddiehl.android.htn.HoldTheNarwhal" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:supportsRtl="true"> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name="com.ddiehl.android.htn.view.activities.MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="www.damiendiehl.net" android:scheme="http" /> </intent-filter> </activity> </application> </manifest> Размер <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ddiehl.android.htn" > <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <application android:name="com.ddiehl.android.htn.HoldTheNarwhal" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:supportsRtl="true"> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name="com.ddiehl.android.htn.view.activities.MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="www.damiendiehl.net" android:scheme="http" /> </intent-filter> </activity> </application> </manifest> 

MainActivity.kt (я отредактировал большую часть логики, связанной с View, это было 400 строк, и на данный момент это проект с закрытым исходным кодом. В случае необходимости я могу использовать полный файл, хотя, если необходимо).

 package com.ddiehl.android.htn.view.activities import android.app.Dialog import android.app.ProgressDialog import android.os.AsyncTask import android.os.Build import android.os.Bundle import android.support.design.widget.NavigationView import android.support.design.widget.Snackbar import android.support.v4.content.ContextCompat import android.support.v4.view.GravityCompat import android.support.v4.widget.DrawerLayout import android.support.v7.app.AppCompatActivity import android.support.v7.widget.Toolbar import android.view.MenuItem import android.view.View import android.view.Window import android.widget.EditText import android.widget.ImageView import android.widget.TextView import butterknife.Bind import butterknife.ButterKnife import butterknife.OnClick import butterknife.bindView import com.flurry.android.FlurryAgent import com.flurry.android.FlurryAgentListener import com.mopub.common.MoPub import com.mopub.mobileads.MoPubConversionTracker import hugo.weaving.DebugLog import java.util.HashMap import kotlin.properties.Delegates public class MainActivity : AppCompatActivity(), MainView, ConfirmSignOutDialog.Callbacks, NavigationView.OnNavigationItemSelectedListener { private val mBus = BusProvider.getInstance() private var mMainPresenter: MainPresenter? = null private var mLastAuthCode: String? = null private var mProgressBar: ProgressDialog? = null private var mSubredditNavigationDialog: Dialog? = null val mDrawerLayout: DrawerLayout by bindView(R.id.drawer_layout) private var mAccessTokenManager: AccessTokenManager? = null DebugLog override fun onCreate(savedInstanceState: Bundle?) { super<AppCompatActivity>.onCreate(savedInstanceState) setContentView(R.layout.activity_main) ButterKnife.bind(this@MainActivity) Init().execute() } private inner class Init : AsyncTask<Void, Void, Void>() { override fun onPreExecute() { super.onPreExecute() mNavigationView.setNavigationItemSelectedListener(this@MainActivity) val toolbar = ButterKnife.findById<Toolbar>(this@MainActivity, R.id.toolbar) setSupportActionBar(toolbar) val actionBar = getSupportActionBar() if (actionBar != null) { actionBar.setHomeAsUpIndicator(R.drawable.ic_navigation_menu) actionBar.setDisplayHomeAsUpEnabled(true) } } override fun doInBackground(vararg params: Void): Void? { mAccessTokenManager = AccessTokenManager.getInstance(this@MainActivity) return null } override fun onPostExecute(aVoid: Void?) { super.onPostExecute(aVoid) onAppInitialized() } } override fun onStart() { super<AppCompatActivity>.onStart() if (mAccessTokenManager == null) { showSpinner(R.string.application_loading) } else { onAppInitialized() } } private fun onAppInitialized() { mBus.register(mAccessTokenManager) FlurryAgent.onStartSession(this) dismissSpinner() updateUserIdentity() showSubredditIfEmpty(null) } override fun onStop() { super<AppCompatActivity>.onStop() FlurryAgent.onEndSession(this) mBus.unregister(mAccessTokenManager) } companion object { public val TAG: String = javaClass<MainActivity>().getSimpleName() private val DIALOG_CONFIRM_SIGN_OUT = "dialog_confirm_sign_out" private val FLURRY_SESSION_TIMEOUT_SECONDS = 30 } } 

Одной из возможных причин может быть библиотека обработки аннотаций.