1

我是新手機android編程,一直有很多麻煩。我終於讓我的應用程序在API 23和16上的模擬器中工作,我的目標是API 16.它在模擬器上運行時沒有問題,但是當我嘗試在手機上使用它時(Google Nexus 5 API 23)Android Studio應用程序在模擬器中工作,但不在真實設備上

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:gravity="center" 
    android:orientation="vertical" 
    android:background="#F44336" 
    android:id="@+id/background" 
    tools:context="thereisstuffhere.MainActivity"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:id="@+id/factTextBox" 
     android:textSize="25dp" 
     android:textColor="#fff"/> 
</LinearLayout> 


package there is stuff here too; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.GestureDetector; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity { 

    TextView factBox; 
    LinearLayout bg; 
    Facts factHolder = new Facts(this); 
    Backgrounds backs = new Backgrounds(); 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     factBox = (TextView) findViewById(R.id.factTextBox); 
     factBox.setText(factHolder.nextFact()); 
     bg = (LinearLayout) findViewById(R.id.background); 
     bg.setBackgroundColor(getResources().getColor(backs.getBackground())); 
     bg.setOnTouchListener(new OnSwipeTouchListener(this) 
     { 
      public void onSwipeTop() 
      { 
       //Toast.makeText(MainActivity.this, "top", Toast.LENGTH_SHORT).show(); 
      } 
      public void onSwipeRight() 
      { 
       //Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show(); 
       prev(); 
      } 
      public void onSwipeLeft() 
      { 
       //Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show(); 
       next(); 
      } 
      public void onSwipeBottom() 
      { 
       //Toast.makeText(MainActivity.this, "bottom", Toast.LENGTH_SHORT).show(); 
      } 
      public boolean onTouch(View v, MotionEvent event) { 
       return gestureDetector.onTouchEvent(event); 
      } 
     }); 
    } 

    private void next() { 
     factBox.setText(factHolder.nextFact()); 
     bg.setBackgroundColor(getResources().getColor(backs.getBackground())); 
    } 

    private void prev() { 
     factBox.setText(factHolder.prevFact()); 
     bg.setBackgroundColor(getResources().getColor(backs.getBackground())); 
    } 

    public void genFact(View view) 
    { 
     factBox.setText(factHolder.nextFact()); 
    } 

Facts.java只包含一個巨大的名單和兩個函數列表

Backgrounds.java也基本上是同樣的事情只有它使用一個整數列表和colors.xml文件返回下一首或上線存儲標籤等

這是我的OnTouchListener類:

package stuff be here; 

import android.content.Context; 
import android.view.GestureDetector; 
import android.view.GestureDetector.SimpleOnGestureListener; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 

public class OnSwipeTouchListener implements OnTouchListener { 
    final GestureDetector gestureDetector; 

    public OnSwipeTouchListener(Context ctx) 
    { 
     gestureDetector = new GestureDetector(ctx, new GestureListener()); 
    } 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) 
    { 
     return false; 
    } 

    private final class GestureListener extends SimpleOnGestureListener{ 

     private static final int SWIPE_THRESHOLD = 100; 
     private static final int SWIPE_VELOCITY_THRESHOLD = 100; 

     @Override 
     public boolean onDown(MotionEvent e) 
     { 
      return true; 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) 
     { 
      boolean result = false; 
      try{ 
       float diffY = e2.getY() - e1.getY(); 
       float diffX = e2.getX() - e1.getX(); 
       if(Math.abs(diffX) > Math.abs(diffY)){ 
        if(Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD){ 
         if(diffX > 0){ 
          onSwipeRight(); 
         }else{ 
          onSwipeLeft(); 
         } 
        } 
        result = true; 
       } 
       else if(Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD){ 
        if(diffY > 0){ 
         onSwipeBottom(); 
        }else{ 
         onSwipeTop(); 
        } 
       } 
       result = true; 
      } catch (Exception exception){ 
       exception.printStackTrace(); 
      } 
      return result; 
     } 
    } 
    public void onSwipeRight(){} 
    public void onSwipeLeft(){} 
    public void onSwipeTop(){} 
    public void onSwipeBottom(){} 
} 

我對所有的代碼表示歉意,但我一直試圖解決這一段時間無濟於事。當我嘗試運行時出現很多錯誤,比如「Class not found using boot class loader; no stack trace available」和「Unable to instantiate activity ComponentInf ...」我還收到一些警告,如「ClassLoader referenced unknown path: /數據/應用/ packagenamehere-1/lib目錄/ x86_64的和/數據/應用/ packagenamehere-1/lib目錄/手臂」即使是在模擬器

這裏運行的時候是我的日誌貓文件:

12-16 17:26:25.167 22237-22237/com.ubiquity.sciencefacts I/art: Late-enabling -Xcheck:jni 
12-16 17:26:25.197 22237-22243/com.ubiquity.sciencefacts I/art: Ignoring second debugger -- accepting and dropping 
12-16 17:26:25.203 22237-22243/com.ubiquity.sciencefacts I/art: Debugger is no longer active 
12-16 17:26:25.211 22237-22243/com.ubiquity.sciencefacts W/art: Suspending all threads took: 7.324ms 
12-16 17:26:25.235 22237-22237/com.ubiquity.sciencefacts W/System: ClassLoader referenced unknown path: /data/app/com.ubiquity.sciencefacts-2/lib/arm 
12-16 17:26:25.248 22237-22237/com.ubiquity.sciencefacts D/AndroidRuntime: Shutting down VM 
12-16 17:26:25.254 22237-22237/com.ubiquity.sciencefacts E/AndroidRuntime: FATAL EXCEPTION: main 
12-16 17:26:27.065 22237-22237/com.ubiquity.sciencefacts I/Process: Sending signal. PID: 22237 SIG: 9 
12-16 17:33:18.574 24986-24986/com.ubiquity.sciencefacts W/System: ClassLoader referenced unknown path: /data/app/com.ubiquity.sciencefacts-1/lib/arm 
12-16 17:33:18.662 24986-24986/com.ubiquity.sciencefacts D/AndroidRuntime: Shutting down VM 
12-16 17:33:18.673 24986-24986/com.ubiquity.sciencefacts E/AndroidRuntime: FATAL EXCEPTION: main 
12-16 17:33:20.800 24986-24986/com.ubiquity.sciencefacts I/Process: Sending signal. PID: 24986 SIG: 9 
12-16 17:34:15.668 25845-25845/com.ubiquity.sciencefacts W/System: ClassLoader referenced unknown path: /data/app/com.ubiquity.sciencefacts-1/lib/arm 
12-16 17:34:15.687 25845-25845/com.ubiquity.sciencefacts D/AndroidRuntime: Shutting down VM 
12-16 17:34:15.693 25845-25845/com.ubiquity.sciencefacts E/AndroidRuntime: FATAL EXCEPTION: main 
12-16 18:00:52.080 2640-2640/com.ubiquity.sciencefacts I/art: Not late-enabling -Xcheck:jni (already on) 
12-16 18:00:52.142 2640-2640/com.ubiquity.sciencefacts W/System: ClassLoader referenced unknown path: /data/app/com.ubiquity.sciencefacts-1/lib/x86_64 
12-16 18:00:52.568 2640-2640/com.ubiquity.sciencefacts W/System: ClassLoader referenced unknown path: /data/app/com.ubiquity.sciencefacts-1/lib/x86_64 
12-16 18:00:52.805 2640-2640/com.ubiquity.sciencefacts W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
12-16 18:00:53.993 2640-2646/com.ubiquity.sciencefacts W/art: Suspending all threads took: 633.582ms 
12-16 18:00:54.020 2640-2716/com.ubiquity.sciencefacts D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true 
12-16 18:00:54.063 2640-2716/com.ubiquity.sciencefacts I/OpenGLRenderer: Initialized EGL, version 1.4 
12-16 18:00:54.091 2640-2716/com.ubiquity.sciencefacts E/EGL_emulation: tid 2716: eglSurfaceAttrib(1165): error 0x3009 (EGL_BAD_MATCH) 
12-16 18:00:54.091 2640-2716/com.ubiquity.sciencefacts W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0x7f8b8ec90c40, error=EGL_BAD_MATCH 
12-16 18:34:41.488 27869-27869/com.ubiquity.sciencefacts I/art: Late-enabling -Xcheck:jni 
12-16 18:34:41.561 27869-27869/com.ubiquity.sciencefacts W/System: ClassLoader referenced unknown path: /data/app/com.ubiquity.sciencefacts-2/lib/arm 
12-16 18:34:41.586 27869-27869/com.ubiquity.sciencefacts D/AndroidRuntime: Shutting down VM 
12-16 18:34:41.589 27869-27869/com.ubiquity.sciencefacts E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.ubiquity.sciencefacts, PID: 27869 
                      java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.ubiquity.sciencefacts/com.ubiquity.sciencefacts.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.ubiquity.sciencefacts.MainActivity" on path: DexPathList[[zip file "/data/app/com.ubiquity.sciencefacts-2/base.apk"],nativeLibraryDirectories=[/data/app/com.ubiquity.sciencefacts-2/lib/arm, /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.ubiquity.sciencefacts.MainActivity" on path: DexPathList[[zip file "/data/app/com.ubiquity.sciencefacts-2/base.apk"],nativeLibraryDirectories=[/data/app/com.ubiquity.sciencefacts-2/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: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.ubiquity.sciencefacts.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 
12-16 18:34:43.772 27869-27869/com.ubiquity.sciencefacts I/Process: Sending signal. PID: 27869 SIG: 9 

重要更新:我將該程序構建爲apk並使用它將其安裝在手機上,並且沒有問題。這是否意味着在評論中如下所述的目標錯誤?這是否會影響我的應用程序的分發(爲了將來的參考我實際上沒有分發這個)?

+0

不要道歉發佈日誌崩潰 –

+0

請複製粘貼您的日誌貓文件。 – Champandorid

+2

您是否使用任何權限?如果是,那麼你必須編寫運行時代碼,要求允許你的應用在API 23(或以上)上正常工作。此外,目標API應該始終大於兩者(在您的案例中爲23而不是16)。 – Talha

回答

0

關於您的錯誤,似乎缺少一些SDK。

如果安裝了所有需要的SDK和SDK工具,請檢查您的SDK管理器。

+0

這是在我的電腦上嗎?我不知道我還需要什麼。我相信我擁有一切,雖然我一直有很多問題與jdk和sdk –

+0

基本上你需要安裝JDK和Android Studio。 Android Studio應該自己安裝所有需要的SDK,但有時會發生可怕的錯誤。 – beal

+0

如果Android Studio的everthing沒問題,你也可以檢查你的build.gradle文件和你的清單 Didi你試過改變目標版本,如你的文章下面的評論中所述? – beal

0

使用multidexEnabled在你的build.gradle:

defaultConfig { 
    multiDexEnabled true 
} 

乾淨,構建和運行

+0

這真的可以成爲一個問題嗎?當然,我非常簡單的應用程序沒有超過64K的參考? –

0

你也可以查看你的build.gradle文件(S)。 在你的情況應該是這樣的:

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.1" 

    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 23 
    } 

    buildTypes { 
     debug { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

通過minifyEnabled設置爲false,確保您禁用proguard的。這可以確保這不會導致額外的錯誤;)

0

在大多數情況下,只需cleaningrebuilding該項目就可以解決問題。

0

當您使用連接到Android Studio的USB電纜調試/運行您的應用程序時,對於某些設備,當您卸載應用程序並嘗試通過studio再次運行它時,它會顯示目標錯誤。

一旦您卸載應用程序,只需從USB電纜斷開您的設備並再次連接。

相關問題