2017-08-21 94 views
1

我試圖通過adb命令啓動apk,安裝apk後不久就要啓動了,但是我得到了ClassNotFoundException,應用崩潰了。adb shell am start給予ClassNotFoundException

我的日誌:

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.sample.test.one/com.sample.test.one.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.sample.test.one.MainActivity" on path: DexPathList[[zip file "/data/app/com.sample.test.one-1/base.apk"],nativeLibraryDirectories=[/data/app/com.sample.test.one-1/lib/arm, /system/lib, /vendor/lib]] 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2849) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045) 
    at android.app.ActivityThread.-wrap14(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6776) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408) 
    Caused by: java.lang.ClassNotFoundException: Didn't find class "com.sample.test.one.MainActivity" on path: DexPathList[[zip file "/data/app/com.sample.test.one-1/base.apk"],nativeLibraryDirectories=[/data/app/com.sample.test.one-1/lib/arm, /system/lib, /vendor/lib]] 
    at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:380) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:312) 
    at android.app.Instrumentation.newActivity(Instrumentation.java:1086) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2839) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)  
    at android.app.ActivityThread.-wrap14(ActivityThread.java)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:154)  
    at android.app.ActivityThread.main(ActivityThread.java:6776)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)  
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)  

流量:

adb install test.apk 

adb shell am start -n com.sample.test.one/com.sample.test.one.MainActivity 

or 

adb shell am start -a android.intent.action.Main -n com.sample.test.one/.MainActivity 

我想上面adb shell commands,但應用程序未能啓動,但一個場景我觀察到,如果我將運行Android Studio中的代碼和應用程​​序安裝在設備中,之後如果我嘗試「adb shell am start」command then w奧克斯罰款,但如果我嘗試通過「adb安裝apk」那麼這個命令不起作用。

+1

沒有試圖從這些方法的APK獲得在MainActivity名稱:https://stackoverflow.com/q/6109234/3162918 – bendaf

回答

0

我遇到過這種情況,但在將MultiDex添加到我的Gradle後,一切都很好。

步驟1

defaultConfig { 
     minSdkVersion minVersion+ 
     targetSdkVersion targetVersion+ 

     multiDexEnabled true 
    } 

dexOptions { 
     incremental true 
     javaMaxHeapSize "4g" 
} 

步驟2

的gradle添加

compile 'com.android.support:multidex:1.0.0' 

步驟3 變化特性的gradle

org.gradle.jvmargs=-Xmx4096m 

請試試這個把戲。

+0

感謝,它的工作就像一個魅力,你救我的一天:) –

+0

你能詳細爲什麼這是?我試過這個,但它對我沒有用。 –

0

英語不是我的母語;請原諒打字錯誤。

解決方案: 拿在應用項目文件AndroidMainfest.xml一看,尋找活動包含這個

 <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
      <category android:name="android.intent.category.LAUNCHER"/> 
     </intent-filter> 

在此範圍內,記住這個活動的名稱屬性。 使用此命令

adb shell am start -D -n com.mycompany.moba.lala/com.epicgames.ue4.SplashActivity 

與以前的名稱路徑替換com.epicgames.ue4.SplashActivity。