2011-07-05 33 views
9

Tôi đang làm việc trên một công cụ trò chơi lớn phải được chuyển sang Android. Tất cả các mã là C/C++, vì vậy chúng tôi đang chuyển qua NDK. Tôi đã có tất cả mọi thứ xây dựng, nhưng sau khi rất nhiều cọ rửa, tôi vẫn không chắc chắn những gì phương pháp tốt nhất là để xây dựng Debug vs phiên bản phát hành của tập tin .so của chúng tôi. Thay đổi mọi thứ bằng tay mỗi khi bạn già đi.Bản dựng gỡ lỗi và Bản phát hành trong Android NDK

Bạn có các tệp Application.mk khác nhau cho từng mục tiêu không? Hoặc có cách nào để bao gồm nhiều mục tiêu trong một tệp Android.mk dưới thư mục jni /? Hoặc có lẽ một lựa chọn thứ ba có thể là viết một makefile tiêu chuẩn đặt các biến môi trường mà tệp Android.mk sử dụng để thông báo cho quá trình xây dựng?

Cuối cùng, một câu hỏi cuối cùng liên quan đến lá cờ android: debuggable phải được đặt trong tệp AndroidManifest.xml. Điều này thực sự có ảnh hưởng gì đến mã gốc đã tạo được sao chép vào thiết bị?

tốt nhất và cảm ơn,

Kevin

+0

Vâng, làm cách nào để bạn chọn Gỡ lỗi hoặc Phát hành bằng tay? Các mẫu NDK dường như không có bất kỳ cờ gỡ lỗi hoặc phát hành nào, cũng như chúng không sử dụng tùy chọn -Ox. – Qwertie

Trả lời

9

Bạn có các tệp Application.mk khác nhau cho từng mục tiêu không?

Không. Thư mục con riêng biệt, tất cả đều có Android.mk riêng (shared and static libs) nhưng chỉ có một Application.mk cho tôi.

My Application.mk chỉ là:

APP_STL := gnustl_static 
APP_OPTIM := debug 

Tôi vẫn không chắc chắn những gì phương pháp tốt nhất là để xây dựng gỡ lỗi vs các phiên bản phát hành của file .so của chúng tôi. Thay đổi mọi thứ bằng tay mỗi khi bạn già đi.

Đó là một chút trải ra, đối với tôi ít nhất, bằng cách sử dụng bố cục jni/Android.mk + Application.mk.

Application.mk có APP_OPTIM := debug Sau đó, trong phần ứng dụng của AndroidManifest.xml Tôi có android:debuggable="true" Khi bạn xây dựng với ndk-build, nó sử dụng lá cờ biểu hiện này để xác định tối ưu hóa (đó là hữu ích để tắt hoặc bật, tắt cho profiling, vv)

(Một chủ đề nhỏ Tắt) Gần đây tôi đã chạy ngang qua

https://code.google.com/p/android-ndk-profiler/

nào, khi kết hợp với http://code.google.com/p/jrfonseca/wiki/Gprof2Dot

Tạo ra một số hình ảnh đẹp để giúp tâm trí nhỏ của tôi nắm bắt được mọi thứ đang hoạt động như thế nào trên điện thoại.

+1

Vâng, tôi đã làm tất cả những điều đó - những gì tôi đã làm là có một Application.mk khác nhau cho mỗi mục tiêu (release/debug). Sau đó, trong mỗi tập tin (Release.mk/Debug.mk) tôi chỉ định cờ c toàn cầu thông qua APP_CFLAGS và gọi ndk-build, chỉ định Release.mk hoặc Debug.mk từ một makefile tiêu chuẩn. –

+0

Tôi thấy mình đang làm hồ sơ nhiều hơn là gỡ rối, và có thêm một vài cờ để đặt/lọc trên cơ sở từng tiểu dự án (ví dụ: -fomit-frame-pointer và -pg không tương thích), vì vậy nó có liên quan nhiều hơn một chút trong trường hợp của tôi vì tôi không muốn toàn bộ chuỗi lib của mình là -pg. – dwerner

1

Bạn không bắt buộc sử dụng hệ thống Android.mk để xây dựng của .so của bạn. Cá nhân, tôi sử dụng Makefile của riêng tôi với các mục tiêu tôi cần và điều này cho phép gỡ lỗi rất chuẩn hóa so với đặc tả xây dựng bản phát hành.

+0

Tệp Android.mk có hỗ trợ nhiều mục tiêu trong một tệp không?Tôi hy vọng có một cách để cứu vãn điều này bằng cách sử dụng hệ thống của họ. –

+0

Chúng tôi cũng sử dụng hệ thống xây dựng của riêng mình (không phải là ndk), nhưng được cảnh báo rằng đây là rất nhiều công việc. Bạn chắc chắn sẽ muốn xây dựng một số dự án NDK mẫu và chắc chắn rằng bạn hiểu mọi thứ NDK đang làm với cờ biên dịch, vv .. (Chúng tôi không sử dụng công cụ NDK vì chúng tôi đang thực hiện nhiều bản dựng không phải android), sử dụng NDK cho android thậm chí còn hiệu quả hơn là sử dụng hệ thống xây dựng của riêng chúng tôi cho mọi thứ). –

0

Tôi sử dụng một tệp để tạo thư viện cho các mục tiêu khác nhau. Trong Application.mk thêm này "APP_ABI: = armeabi armeabi-v7a" nó hoạt động cho tôi.

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