2012-07-05 19 views

Trả lời

-1

Nếu bạn muốn ứng dụng không có đầu, lời khuyên của tôi sẽ là sử dụng cgo cho GUI. Điều đó nghe có vẻ phản trực giác, nhưng nếu NDK hỗ trợ các thư viện gui android, thì có lẽ dễ nhất là viết GUI bằng cách sử dụng các cuộc gọi đó. Tất nhiên, bạn không phải viết tất cả các logic trong C. Bạn chỉ đơn giản có thể cgo wrappers cho mỗi cuộc gọi GUI và sau đó viết GUI trong đi, ngoại trừ mỗi cuộc gọi gui sẽ được dịch thông qua cgo.

+0

Go/cgo/Java không thể tương thích với nhau như thế này. –

+0

Tôi không đề xuất sử dụng Java. NDK hỗ trợ hỗ trợ C bản địa trên các thiết bị Android - không có Java tham gia. Quan điểm của tôi là nếu bạn có thể viết các bit giao diện hệ thống android bằng C bằng NDK, thì bạn có thể liên kết bằng cách sử dụng cgo – joshlf

+0

Hiểu biết của tôi về vòng đời của ứng dụng là quy trình cho ứng dụng của bạn là bản sao dalvik zygote và khi uid/gid của bạn được đặt đúng, có sự chuyển giao quyền kiểm soát từ Android cho ứng dụng của bạn, thông qua các quy ước gọi điện qua Java. Nếu điều đầu tiên bạn muốn làm là trao quyền kiểm soát cho mã C do NDK biên soạn, thì tốt. Nhưng thời gian chạy của Go muốn khởi tạo chính nó trong trường hợp không có Dalvik đã chạy trong không gian địa chỉ. –

1

Không, không thể thực hiện được ngay bây giờ. Các chương trình Go và C có thể tương thích thông qua cgo. nhưng trong trường hợp đó, chương trình Go phải bắt đầu và khởi tạo thời gian chạy của nó trước khi chuyển điều khiển đến phần C của chương trình.

Khi sử dụng NDK trong Android, mã C của bạn được gọi bởi máy ảo Dalvik qua dlopen. Vì vậy, thời gian chạy Go sẽ không có cơ hội để khởi tạo chính nó.

+0

Không thể thực hiện cuộc gọi từ mã C thành Go để thực hiện việc khởi tạo? – kristianp

+0

Vâng, về nguyên tắc ... như "heo có thể bay nếu chúng có đủ động năng". Nhưng cái cách Go và cgo làm việc ngày hôm nay, không. Giới hạn cơ bản của việc thực thi hiện tại là tiêu đề ELF của tệp thi hành phải được trình biên dịch Go thực hiện và phải trỏ tới mã init của Go. Khi đã xong, sau đó Go có thể cấp phát một ngăn xếp kiểu C và chuyển đổi lên và tắt nó khi gọi vào mã C. –

+0

Đẹp tương tự :) – kristianp