2015-02-21 6 views
27

Ich habe die folgenden build.gradle Einstellungen.Android Studio Schritte in falsche sdk Quelle

compileSdkVersion 21 
buildToolsVersion '21.1.1' 

defaultConfig { 
    minSdkVersion 18 
    targetSdkVersion 21 
} 

Das Problem ist, dass, wenn ich in Android SDK Quelle auf einem KitKat Gerät Schritt (19 oder auf Genymotion Device), es besteht nach wie vor in Android-21-Quelle auf eine Steigerung statt von 19.

Ändern irgend der oben genannten Einstellungen bricht einfach die Zusammenstellung meiner App, da ich Code V21 habe. Alle 19 Anrufe sind ordnungsgemäß geschützt und der Code funktioniert auf 19, nur die Quellcode-Verknüpfung ist falsch.

Prost im Voraus Stack Overflow Brüder und Schwestern!

+0

Bitte überprüfen Sie Ihre AndroidManifest.xml Datei und stellen Sie sicher, dass diese Werte nicht auch definiert. Manchmal sind SDK-Versions- und Build-Tools auch im Manifest definiert. –

+0

Ich würde nicht davon ausgehen, dass dies unbedingt unterstützt wird. Wenn Sie auf API 19 debuggen möchten, ist es vielleicht am einfachsten, (vorübergehend) dagegen zu bauen. Oder Sie könnten versuchen, es mit Symlinks in den Quellverzeichnissen zu fälschen (dh, geben Sie api 21 an, damit das Build-Jar stimmt, aber symlink es ist das Quelljar mit dem api 19) oder eine obskure IDE-Einstellung. ** Warum müssen Sie die Quelle von Android selbst verfolgen? ** Das sollte selten benötigt werden, und bedenken Sie, dass ein großer Teil der Funktionalität auf der anderen Seite eines IPC liegt, den Sie sowieso nicht verfolgen können. –

+3

@ChrisStratton: Wenn Sie in die android.jar (19) einsteigen, die sich auf einem Gerät befindet, dann sollten Sie den Quellcode, mit dem sie erstellt wurde, einstufen, NICHT den Quellcode, für den meine App erstellt wurde. "Warum müssen Sie die Quelle von Android selbst verfolgen?" Viele Gründe. Mindestens zweimal am Tag betrete ich das SDK (nur wegen dieses Problems am 21.). Im Moment versuche ich Cross SDK Support anzubieten und sie funktionieren anders unter der Haube. Ich würde gerne sehen warum, wenn ich durchtrete. –

Antwort

1

Was passiert, wenn Sie versuchen, in der Quelle auf einem Emulator zu debuggen, der ein android 5.0.x Lollipop-Image ausführt? Markiert es die richtige Quelle? Ich habe auch damit zu kämpfen, und ich kam zu dem Schluss, dass das Problem auf Anpassungen an die Android-Quelle durch den Hardware-Anbieter zurückzuführen ist.

Ich habe versucht, durch den Android-Quellcode auf einem Samsung-Gerät mit 4.4.2 KitKat Schritt zu gehen. Einige Dateien reihen sich gut aneinander, einige sind um ein paar Zeilen entfernt, und der Rest ist weit außer Kontrolle geraten. Instrumentation.java ist eine, in der ich mich routinemäßig befinde. Sie ist um 5 Zeilen oder so verschoben.

Also warum denke ich, dass der Anbieter die Android-Quelle angepasst hat? Ich ging durch den Start der Anwendung in ActivityThread.java und Instrumentation.java. Der Debugger wird weiterhin korrekt ausgeführt, obwohl die Quelle nicht ausgerichtet ist. Ich referenzierte die Routine, in der ich mit Android-Quellcode auf grepcode.com war. Schließlich sehe ich den Debugger in einen Funktionsaufruf treten, der in keiner Version der Java-Datei vorhanden ist, die auf grepcode gepostet wird.

Hier ist ein spezifisches Beispiel: ActivityThread.HandleLaunchActivity. Ich war Zeuge der Debugger diese Anrufe

unscheduleGcIdler   : present in android source 
intent.getWindowStyle  : not present. Samsung customization? 
handleConfigurationChanged : present 

machen Wenn ich Recht habe, dann ist der Debugger korrekt durch einen emulierten Bild Schritt sollte, da es nicht Anbieter angepassten Code enthalten.

+1

Es ist der Fall, dass es ein herstellerspezifischer Build ist und daher nicht ansteht. Den größten Erfolg hatte ich mit Genymotion 5.0. Genymotion läuft AOSP und es passt perfekt. Es ist unglaublich wertvoll, wenn Sie nicht wissen, was der ListView Listet Ihre Zeilenansichten von Beispiel zu vermasseln. –

10

Edit (2016.07.01):
Android Studio 2.2 behebt es und wird zu den Quellen der API-Ebene springen, die dem Gerät entspricht, das Sie auf tatsächlich ausgeführt wird (solange Sie diejenigen haben Quellen installiert). Es wurde angekündigt here.


Die folgende Problemumgehung für mich gearbeitet:

  1. die Anwendung kompilieren, ohne Änderungen.
  2. Starten Sie die Anwendung im Debug-Modus (und optional Breakpoint).
  3. Zum File>Project Structure, finden Sie Ihr app Modul (oder/und gegebenenfalls weitere Module) und ändern Sie die Compile Sdk Version zu einer, die das Gerät übereinstimmt Sie das Debuggen auf (d 19).
  4. Schritt in den Framework-Code - es sollte in SDK 19 Quellen treten.
+4

Während dies funktioniert, schlägt es kläglich fehl, wenn Sie die appcompat-Unterstützungsbibliothek verwenden. – vangorra

+1

Große Problemumgehung! Oder Sie können "compileSdkVersion" von build.gradle direkt auf Ihre Zielebene ändern und dann auf "sync" klicken, es tut dasselbe. :) – superuser

+0

Dies ändert den Build-Pfad, die Frage ist, wie Sie den Quellpfad ändern, die Ihr Zielgerät übereinstimmen müssen, wenn Sie in SDK-Quelle treten. –

3

Wie in einer anderen Antwort erwähnt wurde, wurde es in Android Studio 2.2 (bug report) behoben.

Allerdings funktionierte es immer noch nicht für mich selbst in Android Studio 3.0 Es begann zu arbeiten, nur nachdem ich in den Einstellungen "Alternative Quellumschalter anzeigen" aktiviert.

screenshot

Verwandte Themen