2015-02-21 31 views
27

Tôi đã có các cài đặt build.gradle sau.Android Studio bước vào nguồn sdk sai

compileSdkVersion 21 
buildToolsVersion '21.1.1' 

defaultConfig { 
    minSdkVersion 18 
    targetSdkVersion 21 
} 

Vấn đề là khi tôi bước vào nguồn Android SDK trên một thiết bị KitKat (19 trên Genymotion hoặc thiết bị), nó vẫn khăng khăng bước vào nguồn Android-21 thay vì 19.

Thay đổi bất kỳ các cài đặt ở trên chỉ đơn giản là phá vỡ việc biên dịch ứng dụng của tôi vì tôi có mã v21. Tất cả 19 cuộc gọi được bảo vệ đúng cách và mã hoạt động vào ngày 19, chỉ liên kết mã nguồn không chính xác.

Cổ vũ trước các anh chị em Chồng tràn!

+0

Vui lòng xem lại tệp AndroidManifest.xml của bạn và chắc chắn rằng những giá trị đó không được định nghĩa cũng có. Đôi khi phiên bản sdk và công cụ xây dựng cũng được xác định trong tệp kê khai. –

+0

Tôi không cho rằng điều này nhất thiết phải được hỗ trợ. Nếu bạn muốn gỡ lỗi trên API 19, có lẽ cách đơn giản nhất sẽ là (tạm thời) xây dựng dựa trên đó. Hoặc bạn có thể thử giả mạo nó với các liên kết tượng trưng trong thư mục nguồn (ví dụ, chỉ định api 21 để jar xây dựng là đúng, nhưng symlink là mã nguồn cho api 19) hoặc một số thiết lập IDE tối nghĩa. ** Tại sao bạn cần phải theo dõi thông qua nguồn của chính Android? ** Điều đó hiếm khi cần thiết, và hãy nhớ rằng rất nhiều chức năng nằm ở phía bên kia của một IPC mà bạn không thể theo dõi được. –

+3

@ChrisStratton: Khi bạn bước vào android.jar (19) nằm trên một thiết bị thì bạn nên bước vào mã nguồn mà nó được xây dựng với, KHÔNG phải mã nguồn mà ứng dụng của tôi đã được xây dựng. "Tại sao bạn cần theo dõi thông qua nguồn của chính Android?" Đống lý do. Ít nhất hai lần một ngày, tôi bước vào SDK (trên 21 chỉ vì vấn đề này). Ngay bây giờ tôi đang cố gắng cung cấp hỗ trợ sdk chéo và họ đang hoạt động khác nhau dưới mui xe. Tôi muốn xem lý do tại sao bằng cách bước qua. –

Trả lời

1

Điều gì sẽ xảy ra nếu bạn cố gắng gỡ lỗi vào nguồn trên trình giả lập đang chạy hình ảnh Lollipop android 5.0.x? Nó có làm nổi bật nguồn chính xác không? Tôi đã đấu tranh với điều này là tốt, và tôi đạt đến kết luận rằng vấn đề là do các tùy chỉnh cho nguồn Android của nhà cung cấp phần cứng.

Tôi đã cố gắng bước qua mã nguồn Android trên thiết bị samsung chạy 4.4.2 KitKat. Một số tập tin xếp hàng tốt, một số được tắt bởi một vài dòng, và phần còn lại là cách ra khỏi Whack. Instrumentation.java là một trong những thứ mà tôi thường tìm thấy. Nó bị tắt bởi 5 dòng hoặc hơn.

Vậy tại sao tôi nghĩ nhà cung cấp đã tùy chỉnh nguồn Android? Tôi đã bước qua quá trình khởi động ứng dụng trong ActivityThread.java và Instrumentation.java. Trình gỡ lỗi sẽ vẫn bước chính xác ngay cả khi nguồn không xếp hàng. Tôi tham chiếu chéo các thói quen tôi đã ở với mã nguồn Android trên grepcode.com. Cuối cùng tôi thấy bước gỡ rối vào một cuộc gọi hàm không có trong bất kỳ phiên bản nào của tệp java được đăng trên grepcode.

Dưới đây là ví dụ cụ thể: ActivityThread.HandleLaunchActivity. Tôi đã chứng kiến ​​trình gỡ lỗi thực hiện các cuộc gọi này

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

Nếu tôi đúng, trình gỡ lỗi sẽ duyệt qua hình ảnh mô phỏng chính xác vì nó sẽ không chứa mã tùy chỉnh của nhà cung cấp.

+1

Đó là trường hợp của nó một nhà cung cấp xây dựng cụ thể và do đó không xếp hàng. Thành công nhất mà tôi đã có là thông qua Genymotion chạy 5.0. Genymotion chạy AOSP và nó xếp hàng hoàn hảo. Điều vô cùng vô giá của nó khi bạn không biết f * ck mà ListView của bạn đang làm gì để làm cho các khung nhìn hàng của bạn bị hỏng. –

10

Chỉnh sửa (2016/07/01):
Android Studio 2.2 sửa chữa nó, và sẽ nhảy đến nguồn cấp API tương ứng với thiết bị mà bạn đang thực sự chạy trên (miễn là bạn có những nguồn được cài đặt). Nó đã được công bố here.


Cách giải quyết sau đây làm việc cho tôi:

  1. Biên dịch ứng dụng mà không cần bất kỳ thay đổi.
  2. Khởi động ứng dụng ở chế độ Gỡ lỗi (và tùy ý ngắt trên điểm ngắt).
  3. Đi tới File>Project Structure, tìm mô-đun app (hoặc/và tùy chọn, bất kỳ mô-đun nào khác) và thay đổi Compile Sdk Version thành phù hợp với thiết bị bạn đang gỡ lỗi (ví dụ: 19).
  4. Bước vào mã khung - nó sẽ bước vào SDK 19 nguồn.
+4

Trong khi điều này hoạt động, nó không thành công nếu bạn đang sử dụng thư viện hỗ trợ appcompat. – vangorra

+1

Giải pháp tuyệt vời! Hoặc bạn có thể trực tiếp sửa đổi "compileSdkVersion" của build.gradle thành cấp độ mục tiêu của bạn, sau đó nhấp vào đồng bộ hóa, nó cũng làm như vậy. :) – superuser

+0

Điều này thay đổi đường dẫn xây dựng, câu hỏi là làm thế nào để thay đổi đường dẫn nguồn, mà bạn cần phải có phù hợp với thiết bị đích của bạn nếu bước vào nguồn SDK. –

3

Như đã đề cập trong một câu trả lời khác, nó đã được sửa trong Android Studio 2.2 (bug report).

Tuy nhiên, nó vẫn không hoạt động đối với tôi ngay cả trong Android Studio 3.0 Nó chỉ bắt đầu hoạt động sau khi tôi chọn "Hiển thị trình chuyển đổi nguồn thay thế" trong Cài đặt.

screenshot

Các vấn đề liên quan