USBを使用して実際のデバイスでAndroid studio。問題を解決する正しい方法を見つけられません。エラーは以下のとおりです。
FATAL EXCEPTION: main Process: com.w3xplorers.cmch,PID: 17715 Java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.w3xplorers.cmch/com.w3xplorers.cmch.MainActivity}: Java.lang.ClassNotFoundException: Didn't find class "com.w3xplorers.cmch.MainActivity" on path: DexPathList[[Zip file "/data/app/com.w3xplorers.cmch-1/base.apk"],nativeLibraryDirectories=[/data/app/com.w3xplorers.cmch-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2395)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2544)
at Android.app.ActivityThread.access$900(ActivityThread.Java:150)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1394)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:168)
at Android.app.ActivityThread.main(ActivityThread.Java:5845)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.Java:797)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:687)
Caused by: Java.lang.ClassNotFoundException: Didn't find class "com.w3xplorers.cmch.MainActivity" on path: DexPathList[[Zip file "/data/app/com.w3xplorers.cmch-1/base.apk"],nativeLibraryDirectories=[/data/app/com.w3xplorers.cmch-1/lib/arm, /system/lib, /vendor/lib, system/vendor/lib, system/vendor/lib/egl, system/lib/hw]]
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:1085)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2385)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2544)
at Android.app.ActivityThread.access$900(ActivityThread.Java:150)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1394)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:168)
at Android.app.ActivityThread.main(ActivityThread.Java:5845)
at Java.lang.reflect.Method.invoke(Native Method)
atcom.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:797)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:687) Suppressed: Java.lang.ClassNotFoundException: com.w3xplorers.cmch.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) ... 12 more
Caused by: Java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
私のマニフェストは以下です:
`<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.w3xplorers.cmch">
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.READ_PHONE_STATE" />
<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<uses-permission Android:name="Android.permission.WRITE_CONTACTS" />
<uses-permission Android:name="Android.permission.SEND_SMS" />
<application
Android:name="com.w3xplorers.cmch.EnableMultiDex"
Android:allowBackup="true"
Android:icon="@mipmap/ic_launcher"
Android:label="@string/app_name"
Android:roundIcon="@mipmap/ic_launcher_round"
Android:supportsRtl="true"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.w3xplorers.cmch.MainActivity"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name="com.w3xplorers.cmch.HomeActivity"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.QuickSms"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.GroupSms"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.SelfSms"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.Contact"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.Favourite"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity
Android:name="com.w3xplorers.cmch.Info"
Android:screenOrientation="portrait"
Android:theme="@style/AppTheme.NoActionBar" />
<activity Android:name="com.w3xplorers.cmch.Dialog" />
</application>
</manifest>`
以下のGradle:
apply plugin: 'com.Android.application'
Android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
applicationId "com.w3xplorers.cmch"
minSdkVersion 13
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2',
{
exclude group: 'com.Android.support', module: 'support-annotations'
})
compile 'com.Android.support:appcompat-v7:25.3.0'
compile 'com.Android.support.constraint:constraint-layout:1.0.0-alpha5'
compile 'com.Android.support:design:25.3.0'
compile 'com.andreabaccega:Android-form-edittext:1.0.3'
compile 'com.Android.volley:volley:1.0.0'
compile 'com.squareup.okhttp3:okhttp:3.3.1'
compile 'com.Android.support:multidex:1.0.1'
testCompile 'junit:junit:4.12'
}
私の問題に対する完璧な解決策は見つかりませんでしたが、Google PlayにAPKをアップロードしてそこからダウンロードすると、アプリは正常に動作します。これは私が見つけた最も奇妙な解決策です。
プロジェクトレベルbuild.gradleファイルに移動し、gradle依存関係のバージョンを2.3.よりも低いものに減らします。たとえば、use 2.2.
dependencies {
classpath 'com.Android.tools.build:gradle:2.2.3'
....
}
その後、クリーン->ビルド->デバッグapkを他のデバイスにインストールします--->[〜#〜] ok [〜#〜] then!
問題は、AndroidStudioが新しいAPKをコンパイルしてインストールする代わりに「Instant Run」を使用していることです。
「インスタントラン」をファイル->設定->ビルド、実行、展開->インスタントランから無効にします。
アプリケーションタグで、変更
Android:name="com.w3xplorers.cmch.EnableMultiDex"
と
Android:name="Android.support.multidex.MultiDexApplication"
お役に立てれば :)
詳細情報:
公式ドキュメントに従う必要があります: https://developer.Android.com/studio/build/multidex.html#mdex-gradle
build.gradle:
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
Android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 26
multiDexEnabled true
}
...
}
YourAppクラス
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
あなたが言ったように、あなたはアプリをビルドし、USB経由で携帯電話にプッシュしました。それからあなたはビルドディレクトリからapkをコピーし、他のデバイスでプッシュして実行しようとしました。デバイスやエミュレータをターゲットにしたり、接続したりせずにapkをビルドしてください。つまり、デバイスを接続せずに端末からapkをビルドするということです。動作するか、何かが表示されます。
defaultConfig {
minSdkVersion 14
targetSdkVersion 21
multiDexEnabled true
}
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
Android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 26
multiDexEnabled true
}
...
}
dependencies {
compile 'com.Android.support:multidex:1.0.1'
}
public class MyApplication extends SomeOtherApplication {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
}
アプリケーションをMultidex.install(this)にしないかもしれません。
Build.gradleに追加します
defaultConfig {
multiDexEnabled true
}
依存関係も追加します
dependencies {
compile 'com.Android.support:multidex:1.0.0'}
インスタントラン機能を有効にしている可能性があるため、インスタントランの無効化を試してください。
ファイル->設定->ビルド、実行、展開->インスタントラン->インスタントランのチェックボックスのチェックを外す
私も同様の問題に直面しました。私の場合、以下を追加することで問題を解決しましたbuildTypes
dexOptions {
javaMaxHeapSize "4g"
}
また使用される
defaultConfig {
multiDexEnabled true
}
そして
dependencies {
compile 'com.Android.support:multidex:1.0.0'
}
MainActivityがJavaではなくKotlinで記述されていることを確認できますか?
Kotlinを無効にし、Kotlinでアクティビティを作成すると、このエラーが発生しました。
これに遭遇し、Kotlinを使用して計装テストを行う人々へ:
メソッド名のスペースはJVMテストでのみ機能し、notAndroid Instrumentation Tests( Jake Whartonによって記されている として、彼はこれは将来修正されるかもしれないと言った)
現時点で、次のようなテストを実行しようとすると:
@Test
fun `spaces should work in names`() {
}
テスト出力は言う:
テストは見つかりませんでした
そしてログには次のように書かれています:
テストの実行を開始しました
テストの実行に失敗しました:「プロセスがクラッシュしました」が原因で、計装の実行に失敗しました。
空のテストスイート。
Logcatはこの例外を出力しますが:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example, PID: 5424
Java.lang.RuntimeException: Unable to instantiate instrumentation
ComponentInfo{com.example.test/Android.support.test.runner.AndroidJUnitRunner}:
Java.lang.ClassNotFoundException: Didn't find class
"Android.support.test.runner.AndroidJUnitRunner"
on path: DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5730)
at Android.app.ActivityThread.-wrap1(Unknown Source:0)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1661)
at Android.os.Handler.dispatchMessage(Handler.Java:105)
at Android.os.Looper.loop(Looper.Java:164)
at Android.app.ActivityThread.main(ActivityThread.Java:6541)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)
Caused by: Java.lang.ClassNotFoundException: Didn't find class
"Android.support.test.runner.AndroidJUnitRunner" on path:
DexPathList[[],nativeLibraryDirectories=[/system/lib, /vendor/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:93)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:379)
at Java.lang.ClassLoader.loadClass(ClassLoader.Java:312)
at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:5728)
at Android.app.ActivityThread.-wrap1(Unknown Source:0)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1661)
at Android.os.Handler.dispatchMessage(Handler.Java:105)
at Android.os.Looper.loop(Looper.Java:164)
at Android.app.ActivityThread.main(ActivityThread.Java:6541)
at Java.lang.reflect.Method.invoke(Native Method)
at com.Android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.Java:240)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:767)
ご覧のとおり、ここでのエラーはあまり役に立たないので、今すぐこの答えを見つけてください。解決策は簡単で、次のような有効な名前を使用します。
@Test
fun spaces_dontWorkInNames() {
}
Mohaimanul Chowdhuryの答えを参照できます。カスタムアプリケーションクラスを使用している場合は、アプリケーションの拡張からMultiDexApplicationに変更します。
例えば
class YourApplication : Application()
に
class YourApplication : MultiDexApplication()
それは私の問題を修正しました
この問題を解決するのは私にはランダムに思えます。 Android:nameをAndroidからMultiDexに変更し、実行してから、独自のアプリに戻すだけです。
Androidスタジオファイルセクションで、プロジェクトをクリアし、キャッシュを無効化/再起動します。
Java 8をAndroid Studio 3.5に更新した後、サポートを有効にする必要がありました
Build.gradleファイルに次の行を追加します。
Android {
defaultConfig {
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
ここでドキュメントを確認できます: https://developer.Android.com/studio/write/Java8-support
アプリケーションクラスの拡張クラスを変更する
public class MyApplication extends Application { ... }
から
public class MyApplication extends MultiDexApplication { ... }
へ
詳細については、公式ドキュメントに従ってください: https://developer.Android.com/studio/build/multidex.html#mdex-gradle
わたしにはできる