Dam*_*ehl 6 android classnotfoundexception kotlin
我想尝试一下 Kotlin,因此我决定尝试将项目的单个类转换为 Kotlin,并在尝试转换整个项目之前看看它如何与我的工作流程集成。我能够构建并且我的应用程序可以正常工作,但是在第一次构建之后的每个后续构建中,我都会从 ClassLoader 中得到以下异常。该应用程序仅在清洁后才能正常工作,并且在我转换任何内容之前都可以正常工作。我能够在同一台计算机上多次运行 HelloWorld 项目,而不会出现错误。这个问题中的回答没有帮助:ClassNotFoundException in custom Flavor using kotlin
\n\n07-31 14:35:41.563 1878-1878/com.ddiehl.android.htn.debug\nE/AndroidRuntime\xef\xb9\x95 FATAL EXCEPTION: main\nProcess: com.ddiehl.android.htn.debug, PID: 1878\n 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]]\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2209)\n at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)\n at android.app.ActivityThread.access$800(ActivityThread.java:144)\n at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)\n at android.os.Handler.dispatchMessage(Handler.java:102)\n at android.os.Looper.loop(Looper.java:135)\n at android.app.ActivityThread.main(ActivityThread.java:5221)\n at java.lang.reflect.Method.invoke(Native Method)\n at java.lang.reflect.Method.invoke(Method.java:372)\n at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)\n at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)\n 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]]\n at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)\n at java.lang.ClassLoader.loadClass(ClassLoader.java:511)\n at java.lang.ClassLoader.loadClass(ClassLoader.java:469)\n at android.app.Instrumentation.newActivity(Instrumentation.java:1065)\n at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2199)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0at android.app.ActivityThread.access$800(ActivityThread.java:144)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0at android.os.Handler.dispatchMessage(Handler.java:102)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0at android.os.Looper.loop(Looper.java:135)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0at android.app.ActivityThread.main(ActivityThread.java:5221)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0at java.lang.reflect.Method.invoke(Native Method)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0at java.lang.reflect.Method.invoke(Method.java:372)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)\n Suppressed: java.lang.ClassNotFoundException: com.ddiehl.android.htn.view.activities.MainActivity\n at java.lang.Class.classForName(Native Method)\n at java.lang.BootClassLoader.findClass(ClassLoader.java:781)\n at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)\n at java.lang.ClassLoader.loadClass(ClassLoader.java:504)\n ... 13 more\n Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack available\nRun Code Online (Sandbox Code Playgroud)\n\n任何人都知道为什么我的应用程序可能在第一个构建中工作,但在后续构建中不起作用?这是我的build.gradle、manifest和activity,供参考。
\n\nbuild.gradle(应用程序模块)
\n\napply plugin: \'com.android.application\'\napply plugin: \'kotlin-android\'\napply plugin: \'com.jakewharton.hugo\'\napply plugin: \'com.getkeepsafe.dexcount\'\napply plugin: \'me.tatarka.retrolambda\'\n\nandroid {\n compileSdkVersion 22\n buildToolsVersion "23 rc3"\n defaultConfig {\n applicationId "com.ddiehl.android.htn"\n minSdkVersion 15\n targetSdkVersion 22\n versionCode 4\n versionName "0.3.0-dev"\n ndk {\n moduleName "app"\n }\n }\n signingConfigs {\n release {\n storeFile file(ANDROID_KEYSTORE_PATH)\n storePassword ANDROID_KEYSTORE_PWD\n keyAlias HTN_KEYSTORE_ALIAS\n keyPassword HTN_KEYSTORE_PWD\n }\n }\n buildTypes {\n debug {\n applicationIdSuffix ".debug"\n minifyEnabled false\n }\n\n release {\n debuggable false\n minifyEnabled true\n proguardFiles getDefaultProguardFile(\'proguard-android-optimize.txt\'), \'proguard-rules.pro\'\n signingConfig signingConfigs.release\n }\n }\n compileOptions {\n sourceCompatibility JavaVersion.VERSION_1_8\n targetCompatibility JavaVersion.VERSION_1_8\n }\n sourceSets {\n main.java.srcDirs += \'src/main/kotlin\'\n debug.java.srcDirs += \'src/debug/kotlin\'\n }\n}\n\ndef getLocalProperty(s) {\n Properties properties = new Properties()\n properties.load(project.rootProject.file(\'local.properties\').newDataInputStream())\n return properties.getProperty(s)\n}\n\nretrolambda {\n jdk getLocalProperty("jdk8.dir")\n}\n\ndependencies {\n compile project(\':reddit\')\n compile project(\':mopub\')\n compile project(\':flurry\')\n compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"\n compile \'com.android.support:appcompat-v7:22.2.1\'\n compile \'com.android.support:support-v4:22.2.1\'\n compile \'com.android.support:design:22.2.0\'\n compile \'com.android.support:recyclerview-v7:22.2.1\'\n compile \'com.android.support:cardview-v7:22.2.1\'\n compile \'com.google.android.gms:play-services-ads:7.5.0\'\n compile \'com.squareup.okhttp:okhttp:2.4.0\'\n compile \'com.squareup.okhttp:okhttp-urlconnection:2.4.0\'\n compile \'com.squareup.retrofit:retrofit:1.9.0\'\n compile \'com.squareup:otto:1.3.5\'\n compile \'com.squareup.picasso:picasso:2.5.2\'\n compile \'com.jakewharton:butterknife:7.0.0\'\n compile \'com.jakewharton:kotterknife:0.1.0-SNAPSHOT\'\n compile \'io.reactivex:rxandroid:0.25.0\'\n compile \'com.facebook.stetho:stetho:1.1.1\'\n compile \'com.facebook.stetho:stetho-okhttp:1.1.1\'\n debugCompile \'com.squareup.leakcanary:leakcanary-android:1.3.1\'\n releaseCompile \'com.squareup.leakcanary:leakcanary-android-no-op:1.3.1\'\n}\n\nbuildscript {\n ext.kotlin_version = \'0.12.1230\'\n repositories {\n mavenCentral()\n maven {\n url \'http://oss.sonatype.org/content/repositories/snapshots\'\n }\n }\n dependencies {\n classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"\n }\n}\n\nrepositories {\n mavenCentral()\n maven {\n url \'http://oss.sonatype.org/content/repositories/snapshots\'\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\nAndroidManifest.xml
\n\n<?xml version="1.0" encoding="utf-8"?>\n<manifest xmlns:android="http://schemas.android.com/apk/res/android"\n package="com.ddiehl.android.htn" >\n\n <uses-permission android:name="android.permission.INTERNET" />\n <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>\n <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>\n\n <application\n android:name="com.ddiehl.android.htn.HoldTheNarwhal"\n android:allowBackup="true"\n android:icon="@mipmap/ic_launcher"\n android:label="@string/app_name"\n android:theme="@style/AppTheme"\n android:supportsRtl="true">\n\n <meta-data android:name="com.google.android.gms.version"\n android:value="@integer/google_play_services_version" />\n\n <activity\n android:name="com.ddiehl.android.htn.view.activities.MainActivity"\n android:label="@string/app_name"\n android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize">\n <intent-filter>\n <action android:name="android.intent.action.MAIN" />\n\n <category android:name="android.intent.category.LAUNCHER" />\n </intent-filter>\n <intent-filter>\n <action android:name="android.intent.action.VIEW" />\n\n <category android:name="android.intent.category.DEFAULT" />\n <category android:name="android.intent.category.BROWSABLE" />\n\n <data\n android:host="www.damiendiehl.net"\n android:scheme="http" />\n </intent-filter>\n </activity>\n </application>\n\n</manifest>\nRun Code Online (Sandbox Code Playgroud)\n\nMainActivity.kt(我编辑了大部分与视图相关的逻辑,有 400 行,目前这是一个闭源项目。不过,如果有必要,我可以粘贴完整的文件)。
\n\npackage com.ddiehl.android.htn.view.activities\n\nimport android.app.Dialog\nimport android.app.ProgressDialog\nimport android.os.AsyncTask\nimport android.os.Build\nimport android.os.Bundle\nimport android.support.design.widget.NavigationView\nimport android.support.design.widget.Snackbar\nimport android.support.v4.content.ContextCompat\nimport android.support.v4.view.GravityCompat\nimport android.support.v4.widget.DrawerLayout\nimport android.support.v7.app.AppCompatActivity\nimport android.support.v7.widget.Toolbar\nimport android.view.MenuItem\nimport android.view.View\nimport android.view.Window\nimport android.widget.EditText\nimport android.widget.ImageView\nimport android.widget.TextView\nimport butterknife.Bind\nimport butterknife.ButterKnife\nimport butterknife.OnClick\nimport butterknife.bindView\nimport com.flurry.android.FlurryAgent\nimport com.flurry.android.FlurryAgentListener\nimport com.mopub.common.MoPub\nimport com.mopub.mobileads.MoPubConversionTracker\nimport hugo.weaving.DebugLog\nimport java.util.HashMap\nimport kotlin.properties.Delegates\n\npublic class MainActivity : AppCompatActivity(), MainView, ConfirmSignOutDialog.Callbacks, NavigationView.OnNavigationItemSelectedListener {\n\n private val mBus = BusProvider.getInstance()\n private var mMainPresenter: MainPresenter? = null\n private var mLastAuthCode: String? = null\n\n private var mProgressBar: ProgressDialog? = null\n private var mSubredditNavigationDialog: Dialog? = null\n\n val mDrawerLayout: DrawerLayout by bindView(R.id.drawer_layout)\n\n private var mAccessTokenManager: AccessTokenManager? = null\n\n DebugLog\n override fun onCreate(savedInstanceState: Bundle?) {\n super<AppCompatActivity>.onCreate(savedInstanceState)\n setContentView(R.layout.activity_main)\n\n ButterKnife.bind(this@MainActivity)\n\n Init().execute()\n }\n\n private inner class Init : AsyncTask<Void, Void, Void>() {\n override fun onPreExecute() {\n super.onPreExecute()\n\n mNavigationView.setNavigationItemSelectedListener(this@MainActivity)\n\n val toolbar = ButterKnife.findById<Toolbar>(this@MainActivity, R.id.toolbar)\n setSupportActionBar(toolbar)\n val actionBar = getSupportActionBar()\n if (actionBar != null) {\n actionBar.setHomeAsUpIndicator(R.drawable.ic_navigation_menu)\n actionBar.setDisplayHomeAsUpEnabled(true)\n }\n }\n\n override fun doInBackground(vararg params: Void): Void? {\n mAccessTokenManager = AccessTokenManager.getInstance(this@MainActivity)\n return null\n }\n\n override fun onPostExecute(aVoid: Void?) {\n super.onPostExecute(aVoid)\n onAppInitialized()\n }\n }\n\n override fun onStart() {\n super<AppCompatActivity>.onStart()\n\n if (mAccessTokenManager == null) {\n showSpinner(R.string.application_loading)\n } else {\n onAppInitialized()\n }\n }\n\n private fun onAppInitialized() {\n mBus.register(mAccessTokenManager)\n\n FlurryAgent.onStartSession(this)\n dismissSpinner()\n updateUserIdentity()\n showSubredditIfEmpty(null)\n }\n\n override fun onStop() {\n super<AppCompatActivity>.onStop()\n FlurryAgent.onEndSession(this)\n mBus.unregister(mAccessTokenManager)\n }\n\n companion object {\n public val TAG: String = javaClass<MainActivity>().getSimpleName()\n\n private val DIALOG_CONFIRM_SIGN_OUT = "dialog_confirm_sign_out"\n private val FLURRY_SESSION_TIMEOUT_SECONDS = 30\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n
一个可能的原因可能是注释处理库。
| 归档时间: |
|
| 查看次数: |
2664 次 |
| 最近记录: |