Đ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.
Nguồn
2015-04-01 14:28:04
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. –
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. –
@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. –