2013-08-29 70 views
29

Vì vậy, tôi đã mua Nexus 10 để phát triển và cực kỳ hào hứng với viễn cảnh có thể mô phỏng các thiết bị khác bằng lệnh "adb shell wm" kích thước, mật độ, và overscan subcommands.Android: Cách sử dụng "adb shell wm" để mô phỏng các thiết bị khác

Tuy nhiên, tôi đã gặp phải một số sự cố khi thực hiện tác vụ này. Tôi muốn xem liệu có ai khác đã gặp phải/vượt qua chúng không. Vì mục đích của cuộc thảo luận này, giả sử tôi đang cố mô phỏng một chiếc điện thoại điển hình, chạy như sau:

adb shell wm size 800x480 
adb shell wm density 240 
adb shell wm overscan reset 

Đầu tiên, thiết lập kích thước sẽ làm rối thanh trình đơn. Ở chế độ dọc, chỉ một số nút sẽ có mặt và ở quy mô không đúng, và ở chế độ ngang, thanh trình đơn bị thiếu hoàn toàn. Trong thực tế, ngay cả sau khi bạn đặt lại mọi thứ, nó vẫn còn thiếu cho đến khi bạn khởi động lại thiết bị. Bất kỳ cách giải quyết nào cho vấn đề này?

Thứ hai, lệnh overscan làm gì? Tôi không thể tìm thấy bất kỳ tài liệu nào cho nó ở bất cứ đâu.

Thứ ba, có cách nào để làm cho thiết bị hiển thị màn hình bằng cách sử dụng 1 pixel có kích thước mới đến 1 pixel của màn hình vật lý không? Tức là, nếu tôi đặt kích thước là 800x480, tôi muốn xem màn hình mới chiếm đúng không gian đó. Thay vào đó, những gì dường như xảy ra là màn hình 800x480 được kéo dài sao cho mặt dài nhất chỉ vừa với màn hình vật lý. Tôi nghi ngờ rằng overscan có thể là câu trả lời, nhưng khi tôi cố gắng đặt nó thành 0,0,800,480, nó vĩnh viễn treo hệ thống của tôi và tôi đã phải thiết lập lại hình ảnh nhà máy để phục hồi.

Cuối cùng, có cách nào khiến máy tính bảng mô phỏng điện thoại về điều gì xảy ra với thanh menu trong khi thay đổi hướng không? Trên máy tính bảng, thanh trình đơn sẽ chuyển đến dưới cùng của màn hình, nhưng trên điện thoại, nó vẫn ở vị trí hiện tại.

Tôi thích thiết bị này cho đến nay, nhưng nếu tôi chỉ có thể làm cho công cụ mô phỏng thiết bị này hoạt động, tôi rất thích nó! Cảm ơn trước cho bất kỳ con trỏ.

+0

Brian bạn có gặp phải vấn đề này khi kích thước wm hiển thị chân dung trong cảnh quan, lãng phí quá nhiều không gian màn hình không? – pt123

+0

@ pt123 Ứng dụng của tôi là một ứng dụng phong cảnh, vì vậy tôi đã không thử điều đó. –

+0

nó không trao đổi nó theo cách khác cho cảnh quan, tôi quên liên kết câu hỏi của tôi nó có một sơ đồ http://stackoverflow.com/questions/20086099/adb-set-display-size-is-incorrectly-displaying-portrait- sử dụng cảnh quan thansk – pt123

Trả lời

22

Được rồi, tôi nghĩ rằng tôi đã tìm ra đủ điều này là hữu ích. Tôi sẽ cố gắng trả lời từng câu hỏi tôi đã nêu trong bài đăng gốc của mình. Sau đó, tôi sẽ chia sẻ một vài điều khác mà tôi đã học được về cách sử dụng hiệu quả điều này.

  • Có cách nào để tránh làm rối thanh trình đơn khi ở màn hình chính không?

Không phải tôi đã phát hiện và thay đổi cài đặt dường như có hiệu ứng tích lũy thường sẽ làm hỏng màn hình chính cho đến khi bạn khởi động lại thiết bị. Tuy nhiên, bạn thường có thể ít nhất là mở khóa thiết bị, đủ để hữu ích. Điều quan trọng là bắt đầu ứng dụng của bạn trước, sau đó điều chỉnh kích thước và mật độ trong khi đã chạy ứng dụng. Chỉ cần nhấn nút nguồn để tắt màn hình, điều chỉnh kích thước và mật độ tùy thích, sau đó bật lại màn hình, mở khóa và ứng dụng của bạn sẽ chạy đúng kích thước và mật độ mới.

  • Lệnh overscan làm gì?

Tôi chỉ tìm thấy tài liệu tham khảo xiên này, nhưng tốt nhất tôi có thể xác định, đó là dành cho TV hoặc màn hình khác mà không phải tất cả màn hình đều có thể sử dụng/hiển thị. Tôi không nghĩ rằng nó thực sự áp dụng cho điện thoại hoặc máy tính bảng thông thường.

  • Có cách nào để làm cho thiết bị hiển thị màn hình bằng cách sử dụng 1 pixel có kích thước mới đến 1 pixel của màn hình thực không?

Không phải tôi đã phát hiện ra. Nhưng nó có lẽ không quan trọng. Tôi nghĩ rằng điểm chính của việc sử dụng lệnh wm shell adb là kiểm tra bố cục, không phải để xem đồ họa pixel hoàn hảo. (Và hãy tin tôi, những gì bạn nhận được là điều xa nhất có thể từ điểm ảnh hoàn hảo.)

  • Có cách nào khiến máy tính bảng mô phỏng điện thoại về điều gì xảy ra với thanh menu trong khi thay đổi hướng ?

Có thể tôi đang làm sai, nhưng đối với tôi, thanh trình đơn hoạt động theo những cách kỳ quái và không thể đoán trước. Đôi khi nó lớn, đôi khi nó chỉ mất tích. Đừng dựa vào việc có thể sử dụng nó. Vâng, điều này thật tệ. Ai đó xin vui lòng kêu vang trong nếu có một giải pháp cho điều này.

  • Vậy làm cách nào để sử dụng "adb shell wm" một cách hiệu quả?

Tôi không chắc chắn tại sao, nhưng phải mất một chút thời gian để nắm bắt điều này. Đó có thể là vì khi tôi lần đầu tiên bắt đầu này, tâm trí của tôi đã không quen với cách suy nghĩ của Android về mọi thứ. Nhưng nó thực sự khá đơn giản.

Trước tiên, hãy đặt kích thước bạn muốn bằng pixel. Đối với cuộc thảo luận này, giả sử chúng ta sẽ sử dụng 1024x600.

Tiếp theo, đặt DPI. Nhưng bạn nên đặt nó thành cái gì?

Đó là phần khó khăn (tốt, phần mà tôi không nhận được lúc đầu). Khi bạn thiết lập DPI, bạn đang thiết lập một nửa khác của phương trình sẽ xác định kích thước trong DP của không gian ứng dụng ảo, ứng dụng sẽ sử dụng để tự render. (Duh, tôi biết, nhưng lúc đầu tôi nghĩ DPI được chỉ định sẽ được sử dụng chủ yếu để chọn tài nguyên, mà thực sự nó cũng vậy.)

Chúng ta hãy xem xét các hậu quả của việc sử dụng mật độ khác nhau với kích thước màn hình 1024x600 .

Đầu tiên, hãy ghi nhớ rằng

dp = px * (160/dpi) 

Điều đó có nghĩa nếu chúng ta xác định dpi của chúng tôi tại 160, ứng dụng sẽ cho rằng không gian có sẵn là 1024dp x 600dp. Nếu thay vào đó, chúng tôi sử dụng 240, thay đổi thành 683dp x 400 dp ít ỏi và ngược lại, nếu chúng tôi sử dụng 120, chúng tôi nhận được ấn tượng 1365 dp x 800 dp. Đặt nó là 80, và bây giờ bạn đang rocking 2048dp x 1200dp.

Phần truy cập trực quan đang nhận ra rằng việc chỉ định một mật độ thấp dẫn đến hình ảnh xuất hiện giống như những gì bạn thấy trong màn hình siêu phân giải - mọi thứ đều nhỏ. Nhưng đó là vì ứng dụng hiện đang xử lý cùng một không gian vật lý như thể nó là một kích thước rất lớn trong dp.

Vì vậy, quay trở lại ví dụ về mật độ 80, chúng tôi có một khu vực ảo 2048dp x 1200dp, nhưng nó đang được nhét vào bất kỳ màn hình vật lý có kích thước nào bạn đang thực sự sử dụng. Kể từ 160dp được cho là khoảng 1 inch, đó sẽ là một máy tính bảng gần như thế giới khác với chiều rộng 12,8 inch. Nhưng toàn bộ điều đó được thu nhỏ lại thành kích thước thực tế của máy tính bảng của bạn, làm cho văn bản 30dp rộng rãi của bạn xuất hiện khá nhảm nhí.

Có lẽ tôi chỉ là đứa trẻ chậm nhất trong phòng, nhưng phải mất một lúc tôi mới thực sự lúng túng điều này. Tôi hy vọng nó giúp người khác ra khỏi đó.

+0

khi tôi chạy 'adb shell wm density 240' tôi gặp lỗi:'/system/bin/sh: wm: not found'. Tại sao? Thiết bị của tôi bị root! – breceivemail

+2

@breceivemail: wm chỉ có trong Jellybean 4.3 trở lên. Bạn có thể sử dụng am kích thước màn hình và mật độ hiển thị thay vào đó, trong các thiết bị trước 4.3 thiết bị – aravindsagar

+1

20% dưới cùng của Nexus 4 của tôi không hoạt động. Tôi sử dụng: 'wm overscan 0,0,0,210' để có WM android không vẽ bất cứ thứ gì trong khu vực đó để tôi có thể vận hành tất cả các vùng được vẽ lại hoàn toàn .. – SuperSaiyan

1

Tôi đoán quá mức là đặt không gian của màn hình ("lề") không được sử dụng. Hãy thử với một cái gì đó như adb shell wm overscan 200,200,200,200 bắt đầu một ứng dụng và bạn sẽ thấy sự khác biệt. Ở nhà, sự khác biệt không rõ ràng.

Nếu điều này thực sự hữu ích khi kết hợp với kích thước và mật độ tôi không biết. Tôi đã làm một số xét nghiệm nhưng không có kết quả hữu ích. Đó là một chút phức tạp (?) Để xem những giá trị để sử dụng ...

+0

Cảm ơn bạn đã trả lời. Nó giúp xác nhận những gì tôi đã nhìn thấy. Tôi nghĩ rằng nó làm cho một phần của màn hình không sử dụng được, điều này có thể hữu ích cho các CRT và các màn hình khác mà không phải tất cả màn hình đều được đảm bảo hiển thị. Những gì tôi không hiểu là nó dường như thực sự mất không gian ra khỏi kích thước ứng dụng quy định. Vì vậy, nếu bạn đặt kích thước ứng dụng thành 800x600 nhưng đặt mức vượt quá 200,0,0,0, giao diện thực tế của bạn chỉ là 600x600. Tôi đoán nếu bạn thực sự muốn sử dụng overscan, bạn sẽ phải chỉ cần thêm số lượng overscanned đến kích thước kích thước ban đầu. –

+0

Tôi cũng sử dụng Nexus 10 để thử nghiệm các ứng dụng trên các kích thước màn hình khác nhau. Tôi nghĩ rằng adb shell wm rất hữu ích. "Kích thước màn hình vật lý" là không chính xác (nó được streched) và thanh điều hướng bị hỏng (và cũng màn hình Home) như bạn đã nói. Nhưng kích thước tương đối của các thành phần có vẻ là chính xác và bạn có thể thấy nếu mọi thứ phù hợp trên màn hình vv. AVD là máy tính bảng mô phỏng rất chậm trên một máy tính cũ ... –

+0

Tôi nhận thấy rằng overscan ném các mảnh vào một điên cuồng. Điều gì có thể là lý do? Hãy thử thiết lập overscan và mở các ứng dụng như gmail, và nhiều không gian hơn khu vực overscan vẫn còn màu trắng. – aravindsagar

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