2012-10-22 27 views
28

Motorola vừa phát hành một điện thoại Android dựa trên x86. Tôi là một chút bối rối như thế nào ứng dụng bản địa/thư viện được viết cho ARM (netflix ví dụ) có thể chạy trên điện thoại này.Mã Android gốc được viết cho ARM chạy trên x86 như thế nào?

Tôi rất biết ơn nếu ai đó có thể giải thích.

+0

Có thể mã gốc của ARM không thể chạy trên x86 hoặc ít nhất là cần trình giả lập. –

Trả lời

48

Vâng, ARM mã gốc chạy trên x86 của Intel sử dụng một tính năng mô phỏng tên Houdini

gì thư viện này thực hiện là đọc hướng dẫn ARM trên bay và chuyển đổi chúng sang x86, hướng dẫn tương đương. Đây là lý do tại sao nhiều ứng dụng có thể hoạt động như trên x86 mà không thực sự phải xây dựng một thư viện tương đương.

enter image description here

+0

Tôi tưởng tượng rằng loại ứng dụng mà các nhà phát triển đã cố ý sử dụng NDK là tính toán nặng và có thể theo thời gian thực. Tôi không tưởng tượng bản dịch mã sẽ là tin tuyệt vời. – marko

+1

Nó sẽ không thể làm điều đó theo cách khác? Vì vậy, x86 để ARM? sao Windows RT sẽ hoạt động với các ứng dụng x86? Và hiệu suất có đạt được không? – Yamcha

+0

Đây chỉ là trên Android. Tôi không biết làm thế nào cửa sổ đang chuyển các ứng dụng của nó cho cả hai của arch. Hiệu suất đạt khá nhỏ. Tôi đã không nghe nói về than phiền về các ứng dụng đang gặp khó khăn trên x86. –

9

Bạn thực sự có thể bao gồm mã nguồn gốc khác nhau cho kiến ​​trúc khác nhau, không chắc chắn cách Netflix đang chạy nhưng nếu bạn mở apk bạn có thể thấy /lib/armeabi-v7a/, vì vậy tôi cho rằng có thể có một cái gì đó thư mục như /lib/x86/

Chỉnh sửa: Tôi chỉ kiểm tra ứng dụng mua sắm Amazon nó có mã gốc cho cánh tay và x86. Vì vậy, có thể Thats như thế nào netflix hiện nó quá.

+0

Tôi nghĩ rằng thư mục gốc là 'libs' không' lib', vẫn là một câu trả lời hay. – Blackbelt

0

Trong Trend Micro Safe Mobile Workforce, chúng ta có một thời gian chạy ARM (không Houdini của Intel) cho thư viện bản địa trong các ứng dụng Android. Vì vậy, chúng tôi có thể hỗ trợ chạy APK chỉ với ARM lib trên máy chủ x86 mạnh mẽ.

0
  • CPU là "Turing hoàn thành" (lên đến giới hạn bộ nhớ)
  • CPU có một hành vi xác định đơn giản mà có thể được mô phỏng với bộ nhớ hữu hạn máy Turing

Vì vậy, rõ ràng là bất kỳ CPU có thể mô phỏng bất kỳ CPU nào có đủ bộ nhớ.

Câu hỏi khó là làm cách nào để thực hiện điều đó nhanh.

Bên cạnh Houdini của Intel, tôi khuyên bạn nên nghiên cứu cách QEMU thực hiện điều đó.

QEMU là cách hàng đầu để chạy ARM trên x86. Nó là phần mềm GPL và được sử dụng làm cốt lõi của trình mô phỏng Android được các nhà phát triển Android sử dụng.

x86 trên ARM có ít hỗ trợ hơn, nhưng các khái niệm chính phải tương tự ngược lại.

Cụ thể, chơi với chế độ mô phỏng người dùng. Với chế độ này, bạn có thể chạy một thực thi ARM liên kết tĩnh trên máy chủ x86 đơn giản là:

qemu-arm-static ./executable 

Một vài ý tưởng:

  • hướng dẫn được quy đổi sang hướng dẫn máy chủ
  • hệ thống các cuộc gọi được chuyển tiếp đến các máy chủ
Các vấn đề liên quan