NDK android setup
I. Android SDK Một cài đặt SDK Android đầy đủ (bao gồm tất cả phụ thuộc) là bắt buộc.Android 1.5 SDK hoặc phiên bản sau này là bắt buộc. Hệ điều hành được hỗ trợ Windows XP (32-bit) hoặc Vista (32 bit hoặc 64-bit) Mac OS X 10.4.8 hoặc mới hơn (x86 chỉ) Linux (32 hoặc 64-bit; Ubuntu 8.04, ...
I. Android SDK
Một cài đặt SDK Android đầy đủ (bao gồm tất cả phụ thuộc) là bắt buộc.Android 1.5 SDK hoặc phiên bản sau này là bắt buộc.
Hệ điều hành được hỗ trợ
Windows XP (32-bit) hoặc Vista (32 bit hoặc 64-bit) Mac OS X 10.4.8 hoặc mới hơn (x86 chỉ) Linux (32 hoặc 64-bit; Ubuntu 8.04, hoặc phân phối Linux khác sử dụng glibc 2.7 hoặc mới hơn)
Các công cụ phát triển cần thiết
Đối với tất cả các nền tảng phát triển, GNU Make 3,81 hoặc sau này là bắt buộc. Phiên bản trước của GNU Make thể làm việc nhưng chưa được kiểm tra. Một phiên bản mới của awk (hoặc GNU AWK hoặc Nawk) cũng được yêu cầu. Đối với Windows, Cygwin 1.7 hoặc cao hơn là bắt buộc. Các NDK sẽ không làm việc với Cygwin cài đặt 1.5.
Tương thích nền tảng Android
Các thư viện nguồn gốc tạo ra bởi NDK Android chỉ có thể được sử dụng trên các thiết bị chạy phiên bản nền tảng Android tối thiểu cụ thể. Các phiên bản nền tảng tối thiểu cần thiết phụ thuộc vào kiến trúc CPU của thiết bị mà bạn đang nhắm mục tiêu.Các chi tiết bảng sau đó phiên bản nền tảng Android tương thích với mã nguồn gốc được phát triển cho các kiến trúc CPU cụ thể. Native Code CPU kiến trúc sử dụng Tương thích Platform Android (s) ARM, ARM-NEON Android 1.5 (API Level 3) và cao hơn x86 Android 2.3 (API Level 9) và cao hơn MIPS Android 2.3 (API Level 9) và cao hơn Những yêu cầu này có nghĩa là bạn có thể sử dụng thư viện nguồn gốc sản xuất với NDK trong các ứng dụng mà có thể triển khai cho các thiết bị chạy Android 1.5 hoặc mới hơn ARM dựa trên. Nếu bạn đang triển khai các thư viện nguồn gốc x86 và các thiết bị dựa trên MIPS, ứng dụng của bạn phải nhắm đến Android 2.3 hoặc mới hơn. Để đảm bảo khả năng tương thích, một ứng dụng bằng cách sử dụng một thư viện bản địa được sản xuất với NDK phải khai báo một <sử dụng-sdk> phần tử trong tập tin manifest của nó, với một android: minSdkVersion giá trị của "3" hoặc cao hơn thuộc tính. Ví dụ: <Manifest> <sử dụng-sdk android: minSdkVersion = "3" /> ... </ manifest> Nếu bạn sử dụng NDK này để tạo ra một thư viện bản địa sử dụng các API OpenGL ES, các ứng dụng có chứa các thư viện có thể được triển khai chỉ cho các thiết bị chạy phiên bản nền tảng tối thiểu được mô tả trong bảng dưới đây. Để đảm bảo khả năng tương thích, hãy chắc chắn rằng ứng dụng của bạn tuyên bố thích android: minSdkVersion giá trị thuộc tính, như thể hiện trong bảng dưới đây. OpenGL ES Version sử dụng Tương thích Platform Android (s) Sử dụng-sdk cần Attribute OpenGL ES 1.1 Android 1.6 (API Level 4) và cao hơn android: minSdkVersion = "4" OpenGL ES 2.0 Android 2.0 (API Level 5) và cao hơn android: minSdkVersion = "5" Để biết thêm thông tin về API Level và mối quan hệ của nó với các phiên bản nền tảng Android, xem Levels API Android . Ngoài ra, một ứng dụng bằng cách sử dụng API OpenGL ES nên khai báo một <sử dụng-feature> phần tử trong manifest của nó, với một android: glEsVersion thuộc tính chỉ định phiên bản OpenGL ES tối thiểu theo yêu cầu của các ứng dụng. Điều này đảm bảo rằng Google Play sẽ thấy ứng dụng của bạn chỉ để sử dụng mà các thiết bị có khả năng hỗ trợ các ứng dụng của bạn. Nếu bạn sử dụng NDK này để tạo ra một thư viện bản địa sử dụng các API để truy cập Android Bitmap đệm pixel hoặc sử dụng các hoạt động bản địa, các ứng dụng có chứa các thư viện có thể chỉ được triển khai đến các thiết bị chạy Android 2.2 (API cấp 8) hoặc cao hơn. Để đảm bảo khả năng tương thích, hãy chắc chắn rằng ứng dụng của bạn tuyên bố <sử dụng-sdk android: minSdkVersion = "8" /> giá trị thuộc tính trong biểu hiện của nó.
Cài đặt NDK
Cài đặt trên máy tính của NDK phát triển của bạn là đơn giản và bao gồm chiết xuất từ NDK gói tải về của nó. Trước khi bạn bắt đầu hãy chắc chắn rằng bạn đã tải về mới nhất Android SDK và nâng cấp các ứng dụng của bạn và môi trường khi cần thiết. Các NDK là tương thích với các phiên bản nền tảng cũ, nhưng phiên bản cũ hơn không các công cụ SDK. Ngoài ra, có một chút thời gian để xem xét các hệ thống và phần mềm Yêu cầu cho NDK, nếu bạn chưa có. Để cài đặt NDK, đầu tiên tải về các gói thích hợp từ bảng ở trên cùng của trang này. Sau đó, hãy làm theo các thủ tục cho nền tảng phát triển của bạn:
-
Trên Linux và Mac OS X (Darwin): Tải về các gói thích hợp từ trang https://developer.android.com/tools/sdk/ndk/index.html. Mở một cửa sổ terminal. Chuyển đến thư mục mà bạn đã tải về các gói phần mềm. Chạy chmod a + x trên các gói đã tải về. Thi công gói. Ví dụ: ndk chmoda+xandroid−ndk−r10c−darwin−x8664.binndk chmod a + x android - ndk - r10c - darwin - x86_64 . bin ndk chmoda+xandroid−ndk−r10c−darwin−x8664.binndk ./ android - ndk - r10c - darwin - x86_64 . bin
Các thư mục có chứa các chất chiết xuất từ NDK chính nó. Lưu ý rằng bạn cũng có thể sử dụng một chương trình như 7z để giải nén gói.
-
**Trên Windows: ** Tải về các gói thích hợp từ trang này. Điều hướng đến thư mục mà bạn đã tải về các gói phần mềm. Double-click vào tập tin tải về. Các thư mục có chứa các chất chiết xuất từ NDK chính nó. Khi không nén, các tập tin NDK được chứa trong một thư mục được gọi là android-ndk- <phiên bản> . Bạn có thể đổi tên thư mục NDK nếu cần thiết và bạn có thể di chuyển nó đến vị trí bất kỳ trên máy tính của bạn. Tài liệu này đề cập đến các thư mục NDK như <ndk> . Bạn đã sẵn sàng để bắt đầu làm việc với NDK.
II. **Giới thiệu về Android.mk file: **
Tài liệu này mô tả cú pháp của Android.mk xây dựng tập tin bằng văn bản để mô tả C và C ++ nguồn tập tin vào Android NDK. Để hiểu được những gì sau, nó được giả định rằng bạn đã đọc các tập tin tài liệu / OVERVIEW.TXT giải thích vai trò của họ và cách sử dụng.
**Tổng quan: **
Một file Android.mk được viết để mô tả nguồn của bạn để xây dựng hệ thống. Cụ thể hơn:
-
Các tập tin thực sự là một mảnh nhỏ GNU Makefile sẽ được phân tích một hoặc nhiều lần bằng cách xây dựng hệ thống. Như vậy, bạn nên cố gắng giảm thiểu các biến bạn khai báo ở đó và không cho rằng mọi thứ không được định nghĩa trong phân tích.
-
Các cú pháp tập tin được thiết kế để cho phép bạn nhóm các bạn nguồn vào 'module'. Module là một trong những điều sau đây:
- một thư viện tĩnh
- một thư viện chia sẻ
thư viện Chỉ được chia sẻ sẽ được cài đặt / sao chép vào bạn gói ứng dụng. Thư viện tĩnh có thể được sử dụng để tạo ra các thư viện chia sẻ mặc dù.
Bạn có thể xác định một hay nhiều mô-đun trong mỗi tập tin Android.mk, và bạn có thể sử dụng các tập tin mã nguồn ở một số mô-đun.
-
Hệ thống xử lý xây dựng nhiều chi tiết cho bạn. Ví dụ, bạn không cần phải liệt kê các file header hoặc phụ thuộc rõ ràng giữa các tập tin được tạo ra trong Android.mk của bạn. Các NDK xây dựng hệ thống sẽ tính toán các tự động cho bạn.
Điều này cũng có nghĩa rằng, khi cập nhật lên phiên bản mới hơn của NDK, bạn sẽ có thể được hưởng lợi từ sự hỗ trợ toolchain / nền tảng mới mà không cần phải chạm vào các file Android.mk của bạn.
Lưu ý rằng Cú pháp là * rất * gần một được sử dụng trong các tập tin Android.mk phân phối với các mã nguồn mở nguồn nền tảng Android đầy đủ. Trong khi thực hiện xây dựng hệ thống có sử dụng chúng là khác nhau, đây là một quyết định thiết kế có chủ ý thực hiện để cho phép tái sử dụng 'bên ngoài' thư viện ' mã nguồn dễ dàng hơn cho các nhà phát triển ứng dụng.
**Ví dụ đơn giản: **
Trước khi mô tả cú pháp chi tiết, hãy xem xét việc đơn giản "hello JNI" Ví dụ, tức là các tập tin theo:
apps / hello-JNI / dự án
Ở đây, chúng ta có thể thấy:
-
Các thư mục 'src' có chứa các nguồn Java cho các mẫu dự án Android.
-
Các thư mục 'JNI' có chứa nguồn gốc cho mẫu, tức là 'JNI / hello-jni.c'
tập tin nguồn này thực hiện một thư viện chia sẻ đơn giản mà thực hiện một phương pháp bản địa mà trả về một chuỗi các ứng dụng máy ảo.
-
Các 'JNI / Android.mk' file mô tả các thư viện chia sẻ để xây dựng hệ thống NDK. Nội dung của nó là:
LOCAL_PATH: = $ (gọi my-dir) bao gồm $ (CLEAR_VARS) LOCAL_MODULE : = hello-JNI LOCAL_SRC_FILES: = hello-jni.c bao gồm $ (BUILD_SHARED_LIBRARY)
Bây giờ, hãy giải thích những dòng này:
_LOCAL_PATH: = $$(gọi my-dir) _
Một tập tin Android.mk phải bắt đầu với định nghĩa của biến LOCAL_PATH. Nó được sử dụng để xác định vị trí các tập tin nguồn trong cây phát triển. Trong ví dụ này, các chức năng vĩ mô 'my-dir', được cung cấp bởi các hệ thống xây dựng, được sử dụng để trả lại đường dẫn của thư mục hiện hành (tức là thư mục chứa các tập tin Android.mk chính nó).
_ include $$(CLEAR_VARS) _
Biến CLEAR_VARS được cung cấp bởi hệ thống xây dựng và các điểm đến một GNU Makefile đặc biệt mà sẽ xóa nhiều biến LOCAL_XXX cho bạn (ví dụ như LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, vv ...), với ngoại lệ của LOCAL_PATH. Điều này là cần thiết bởi vì tất cả xây dựng tập tin điều khiển được phân tích trong một GNU Make bối cảnh thực hiện duy nhất mà tất cả các biến là toàn cầu.
_ LOCAL_MODULE: = hello-JNI _
Biến LOCAL_MODULE phải được xác định để xác định mỗi module bạn mô tả trong Android.mk của bạn. Tên phải khác * * với các lib có sẵn và không chứa ác dấu cách. Lưu ý rằng xây dựng hệ thống sẽ tự động thêm thích hợp tiền tố và hậu tố để các tập tin được tạo ra tương ứng. Nói cách khác, một module thư viện chia sẻ mang tên 'foo' sẽ tạo ra 'libfoo.so'.
LƯU Ý QUAN TRỌNG: Nếu bạn đặt tên modul của bạn 'libfoo', xây dựng hệ thống sẽ không bổ sung thêm tiền tố "lib" và sẽ tạo ra libfoo.so để hỗ trợ các tập tin Android.mk có nguồn gốc từ các nguồn nền tảng Android.
LOCAL_SRC_FILES: = hello-jni.c
Các biến LOCAL_SRC_FILES phải chứa một danh sách các C và/hoặc C ++ nguồn tập tin mà sẽ được xây dựng và lắp ráp thành một module. Lưu ý rằng bạn nên không liệt kê tiêu đề và bao gồm các tập tin ở đây, bởi vì xây dựng hệ thống sẽ tính toán phụ thuộc tự động cho bạn; chỉ là danh sách các tập tin mã nguồn này sẽ được chuyển trực tiếp vào trình biên dịch, và bạn sẽ được tốt.
Lưu ý rằng phần mở rộng mặc định cho các tập tin mã nguồn C ++ là 'cpp'. Đó là tuy nhiên có thể xác định một trong những khác nhau bằng cách định nghĩa các biến LOCAL_DEFAULT_CPP_EXTENSION. Đừng quên dấu chấm ban đầu (tức là '.cxx' sẽ làm việc, nhưng không 'cxx').
_include (BUILD_SHARED_LIBRARY) _ Các BUILD_SHARED_LIBRARY là một biến được cung cấp bởi các hệ thống xây dựng mà chỉ cho một kịch bản GNU Makefile đó là phụ trách thu thập tất cả các thông tin mà bạn định nghĩa trong biến LOCAL_XXX từ mới nhất 'include (CLEAR_VARS) và xác định những gì để xây dựng, và làm thế nào để làm điều đó một cách chính xác. Ngoài ra còn có BUILD_STATIC_LIBRARY để tạo ra một thư viện tĩnh.
Có những ví dụ phức tạp hơn trong các ứng dụng /, với nhận xét file Android.mk mà bạn có thể nhìn vào.
**Tham khảo: **
Đây là danh sách các biến bạn hoặc là phải dựa vào hoặc xác định trong một Android.mk. Bạn có thể xác định các biến khác để sử dụng riêng của mình, nhưng các NDK xây dựng hệ thống bảo lưu tên sau biến:
- tên bắt đầu bằng LOCAL_ (ví dụ LOCAL_MODULE)
- tên bắt đầu bằng PRIVATE_, NDK_ hoặc APP_ (được sử dụng trong nội bộ)
- tên chữ thường (được sử dụng trong nội bộ, ví dụ như "-dir của tôi ')
Nếu bạn cần phải xác định các biến thuận tiện của riêng bạn trong một Android.mk tập tin, chúng tôi khuyên bạn nên sử dụng các tiền tố MY_, cho một ví dụ nhỏ:
MY_SOURCES: = foo.c ifneq ($ (MY_CONFIG_BAR),) MY_SOURCES + = bar.c endif LOCAL_SRC_FILES + = $ (MY_SOURCES)
biến NDK cung cấp:
Những GNU Hãy biến được xác định bởi các hệ thống xây dựng trước khi tập tin Android.mk của bạn được phân tách. Lưu ý rằng trong một số trường hợp có thể phân tích các NDK Android.mk vài lần, mỗi khác nhau định nghĩa cho một số các biến này.
CLEAR_VARS điểm để xây dựng một kịch bản mà undefines gần như tất cả các biến LOCAL_XXX được liệt kê trong "Module mô tả" phần dưới đây. Bạn phải bao gồm các kịch bản trước khi bắt đầu một mô-đun mới, ví dụ như:
include $ (CLEAR_VARS)
BUILD_SHARED_LIBRARY điểm để xây dựng một kịch bản mà thu thập tất cả các thông tin về các mô-đun mà bạn cung cấp trong các biến LOCAL_XXX và xác định làm thế nào để xây dựng một thư viện chia sẻ mục tiêu từ các nguồn mà bạn được liệt kê. Lưu ý rằng bạn phải có LOCAL_MODULE và LOCAL_SRC_FILES xác định, ở mức tối thiểu trước khi bao gồm cả tập tin này. Ví dụ sử dụng:
include $ (BUILD_SHARED_LIBRARY) lưu ý rằng điều này sẽ tạo ra một tập tin có tên là $ lib (LOCAL_MODULE) .so
BUILD_STATIC_LIBRARY Một biến thể của BUILD_SHARED_LIBRARY được sử dụng để xây dựng một mục tiêu tĩnh thư viện thay thế. Thư viện tĩnh không được sao chép vào của bạn dự án / gói nhưng có thể được sử dụng để xây dựng các thư viện chia sẻ (xem LOCAL_STATIC_LIBRARIES và LOCAL_STATIC_WHOLE_LIBRARIES mô tả dưới đây). Ví dụ cách sử:
include $ (BUILD_STATIC_LIBRARY) Lưu ý rằng điều này sẽ tạo ra một tập tin có tên là $ lib (LOCAL_MODULE) .a
TARGET_ARCH Tên của kiến trúc đích CPU vì nó được xác định bởi các đầy đủ Android mã nguồn mở xây dựng. Đây là 'cánh tay' cho bất kỳ ARM tương thích build, độc lập với các phiên bản kiến trúc CPU.
TARGET_PLATFORM Tên của mục tiêu nền tảng Android khi Android.mk này được phân tích cú pháp. Còn bây giờ, chỉ có 'android-3' được hỗ trợ, tương ứng với các . Android 1.5 nền tảng
TARGET_ARCH_ABI . Tên của CPU mục tiêu + ABI khi Android.mk này được phân tách Còn bây giờ, chỉ có 'cánh tay' được hỗ trợ, mà thực sự có nghĩa như sau:
ARMv5TE hoặc CPU cao hơn, với 'softfloat' nổi điểm hỗ trợ mục tiêu khác Abis sẽ được giới thiệu trong phiên bản tương lai của NDK và sẽ có một tên khác nhau. Lưu ý rằng tất cả dựa trên ARM Abis sẽ có 'TARGET_ARCH' định nghĩa 'cánh tay', nhưng có thể có khác nhau 'TARGET_ARCH_ABI'
TARGET_ABI Các nối của nền tảng mục tiêu và abi, nó thực sự được định nghĩa như (TARGETPLATFORM)− (TARGET_PLATFORM) - (TARGETPLATFORM)− (TARGET_ARCH_ABI) và là hữu ích khi bạn muốn . để kiểm tra đối với một hệ thống hình ảnh mục tiêu cụ thể cho một thiết bị thực
Theo mặc định, đây sẽ là "android-3-arm'
**NDK-cung cấp các macro chức năng: **
Sau đây là GNU Make macro 'chức năng', và phải được đánh giá bằng cách sử dụng '$$(call <chức năng>)'. Họ trở về thông tin văn bản.
_my-dir _: Trả về đường dẫn của thư mục Android.mk hiện tại, tương đối để đầu xây dựng hệ thống NDK. Điều này rất hữu ích để xác định LOCAL_PATH vào đầu Android.mk của bạn như với:
LOCAL_PATH: = $ (call my-dir)
_all-subdir-makefiles _: Trả về một danh sách các Android.mk nằm trong tất cả các thư mục con của các hiện 'của tôi đường -dir '. Ví dụ, hãy xem xét những điều sau đây hệ thống phân cấp:
sources / foo / Android.mk sources / foo / lib1 / Android.mk sources / foo / lib2 / Android.mk Nếu nguồn / foo / Android.mk chứa các dòng duy nhất: include $ (call all-subdir-makefiles) Sau đó, nó sẽ tự động bao gồm Nguồn / foo / lib1 / Android.mk và nguồn / foo / lib2 / Android.mk Chức năng này có thể được sử dụng để cung cấp sâu lồng nhau thư mục nguồn phân cấp để xây dựng hệ thống. Lưu ý rằng theo mặc định, các NDK sẽ chỉ tìm các tập tin trong các nguồn / * / Android.mk
this-makefile: Trả về đường dẫn của Makefile hiện tại (tức là nơi mà các chức năng được gọi là).
parent-makefile: Trả về đường dẫn của cha mẹ trong Makefile cây thu nhận, tức là đường dẫn của Makefile bao gồm việc hiện tại.
**biến mô-đun-Mô tả: **
Các biến sau đây sử dụng để mô tả mô-đun của bạn để xây dựng hệ thống. Bạn nên xác định một số trong số họ giữa một 'bao gồm (CLEAR_VARS)' và một 'bao gồm (BUILD_XXXXX)'. Theo văn bản trước đây, $$(CLEAR_VARS) là một kịch bản mà sẽ undefine / rõ ràng tất cả các biến này, trừ khi explicitely lưu ý trong mô tả của họ.
LOCAL_PATH: biến này được sử dụng để cung cấp cho các đường dẫn của file hiện tại. Bạn phải định nghĩa nó vào đầu Android.mk của bạn, mà có thể được thực hiện với:
LOCAL_PATH: = $ (call my-dir) Biến này là * không * xóa bởi $ (CLEAR_VARS) nên chỉ có một định nghĩa cho mỗi Android.mk là cần thiết (trong trường hợp bạn xác định một số mô-đun trong một tập tin duy nhất).
_LOCAL_MODULE _ Đây là tên của module của bạn. Nó phải là duy nhất trong số tất cả các tên module, và không chứa bất kỳ không gian. Bạn phải xác định nó trước bao gồm bất kỳ $$(BUILD_XXXX) kịch bản.
Các tên module xác định tên của các tập tin được tạo ra,ví dụ như lib <foo> .so với một mô-đun thư viện chia sẻ mang tên <foo>. Tuy nhiên bạn chỉ nên tham khảo đến các module khác với "bình thường" của họ tên (ví dụ: <foo>) trong NDK bạn xây dựng các tập tin (hoặc Android.mk hoặc Application.mk)
_LOCAL_SRC_FILES _: Đây là một danh sách các file nguồn sẽ được xây dựng cho các module của bạn . Chỉ có danh sách các tập tin mà sẽ được chuyển đến một trình biên dịch, kể từ khi xây dựng hệ thống tự động tính toán phụ thuộc cho bạn.
Lưu ý rằng các tập tin nguồn tên là tất cả liên quan đến LOCAL_PATH và bạn có thể sử dụng các thành phần đường dẫn, ví dụ như: LOCAL_SRC_FILES: = foo.c toto /bar.c Chú ý: Luôn luôn sử dụng Unix-style chéo ngược (/) trong xây dựng các tập tin. Windows theo phong cách back-slashes sẽ không được xử lý đúng cách.
LOCAL_CPP_EXTENSION: Đây là một biến số tùy chọn có thể được xác định để chỉ ra các phần mở rộng tập tin của C ++ nguồn file. Mặc định là 'cpp' nhưng bạn có thể thay đổi nó. Ví dụ:
LOCAL_CPP_EXTENSION: = .cxx
LOCAL_C_INCLUDES Một tùy chọn danh sách các đường dẫn, liên quan đến các NDK * gốc * thư mục, trong đó sẽ được nối vào đường dẫn tìm kiếm bao gồm khi biên dịch tất cả các nguồn (C, C ++ và Assembly). Ví dụ:
LOCAL_C_INCLUDES: = nguồn / foo Hoặc thậm chí: LOCAL_C_INCLUDES: = $ (LOCAL_PATH) /../ foo Chúng được đặt trước khi đưa cờ tương ứng trong LOCAL_CFLAGS / LOCAL_CPPFLAGS
_LOCAL_CFLAGS _: Một thiết lập tùy chọn của cờ biên dịch sẽ được thông qua khi xây dựng C . * và * C ++ file mã nguồn này có thể hữu ích để xác định nghĩa macro hoặc thêm vào một số tùy chọn biên dịch.
QUAN TRỌNG: Cố gắng không thay đổi tối ưu hóa / cấp độ gỡ lỗi trong Android.mk của bạn, điều này có thể được xử lý tự động cho bạn bằng cách xác định các thông tin thích hợp trong Application.mk của bạn, và sẽ cho phép các NDK tạo ra các tập tin dữ liệu hữu ích được sử dụng trong quá trình gỡ lỗi. Chú ý: Trong android-ndk-1.5_r1, những lá cờ tương ứng chỉ áp dụng cho các tập tin nguồn C, C ++ không người. Điều này đã được sửa chữa để phù hợp với Android hành vi đầy đủ xây dựng hệ thống.(Bạn có thể sử dụng để xác định LOCAL_CPPFLAGS cờ cho nguồn C ++ chỉ bây giờ).
_LOCAL_CXXFLAGS _: Một bí danh cho LOCAL_CPPFLAGS. Lưu ý rằng việc sử dụng lá cờ này là lỗi thời vì nó có thể biến mất trong phiên bản tương lai của NDK.
_LOCAL_CPPFLAGS _: Một thiết lập tùy chọn của cờ biên dịch sẽ được thông qua khi xây dựng C ++ file nguồn * chỉ *. Họ sẽ xuất hiện sau khi LOCAL_CFLAGS trên của trình biên dịch dòng lệnh.
Chú ý: Trong android-ndk-1.5_r1,những lá cờ tương ứng áp dụng cho cả C và C ++ nguồn. Điều này đã được sửa chữa để phù hợp với đầy đủ xây dựng hệ thống Android. (Bạn có thể sử dụng để xác định LOCAL_CFLAGS cờ cho cả C và C ++ nguồn bây giờ).
_LOCAL_STATIC_LIBRARIES _: Danh sách các thư viện tĩnh module (được xây dựng với BUILD_STATIC_LIBRARY) mà phải được liên kết với mô-đun này. Điều này chỉ có ý nghĩa trong module thư viện chia sẻ.
_LOCAL_SHARED_LIBRARIES _: Danh sách các thư viện chia sẻ * * module module này phụ thuộc vào thời gian chạy. Điều này là cần thiết trong thời gian liên kết và nhúng các thông tin tương ứng trong các tập tin được tạo ra.
Lưu ý rằng điều này không phụ thêm được liệt kê mô-đun để xây dựng đồ thị, nghĩa là bạn vẫn cần thêm chúng vào mô-đun cần ứng dụng của bạn trong Application.mk bạn
_LOCAL_LDLIBS _: Danh sách cờ mối liên kết bổ sung được sử dụng khi xây dựng của module. Điều này rất hữu ích để vượt qua tên của các thư viện hệ thống cụ thể với "l" tiền tố. Ví dụ, sau đây sẽ cho các mối liên kết để tạo ra một mô-đun mà liên kết đến /system/lib/libz.so tại thời gian tải:
LOCAL_LDLIBS: = -lz
Xem docs/STABLE-APIS.TXT cho danh sách các thư viện hệ thống tiếp xúc bạn có thể liên kết chống lại với bản phát hành NDK này.
_LOCAL_ALLOW_UNDEFINED_SYMBOLS _: Theo mặc định, bất kỳ tài liệu tham khảo không xác định gặp phải khi cố gắng xây dựng một thư viện chia sẻ sẽ dẫn đến một "biểu tượng xác định" lỗi. Đây là một trợ giúp tuyệt vời để bắt lỗi trong mã nguồn của bạn.
Tuy nhiên, nếu vì một lý do bạn cần phải vô hiệu hóa việc kiểm tra này, thiết lập này để biến 'true'. Lưu ý rằng các thư viện chia sẻ tương ứng có thể thất bại để nạp lúc runtime.
_LOCAL_ARM_MODE _: Theo mặc định, chương trình mục tiêu ARM sẽ được tạo ra trong 'ngón tay cái' chế độ, nơi mà mỗi lệnh là rộng 16-bit. Bạn có thể định nghĩa biến này để 'cánh tay' nếu bạn muốn ép buộc các thế hệ của các đối tượng tập tin của module trong 'cánh tay' (hướng dẫn 32-bit) chế độ. Ví dụ:
LOCAL_ARM_MODE: = arm Lưu ý rằng bạn cũng có thể hướng dẫn xây dựng hệ thống chỉ xây dựng cụ thể các nguồn ở chế độ tay bằng cách thêm một '.arm' hậu tố vào tập tin nguồn của nó tên. Ví dụ, với: LOCAL_SRC_FILES: = foo.c bar.c.arm Nói với các hệ thống xây dựng để luôn biên dịch 'bar.c' trong chế độ cánh tay và để xây dựng foo.c theo giá trị của LOCAL_ARM_MODE.
Chú ý: Thiết lập để APP_OPTIM "debug" trong Application.mk của bạn cũng sẽ buộc các thế hệ của các tập tin nhị phân ARM là tốt. Điều này là do lỗi trong trình gỡ lỗi toolchain mà không xử quá tốt với arm.
Lưu ý rằng tất cả dựa trên ARM Abis sẽ có'TARGET_ARCH ' định nghĩa 'arm', nhưng có thể có khác nhau 'TARGET_ARCH_ABI' TARGET_ABI Các nối của nền tảng mục tiêu và abi, nó thực sự được định nghĩa như: (TARGETPLATFORM)− (TARGET_PLATFORM) - (TARGETPLATFORM)− (TARGET_ARCH_ABI)
PS: Bài tiếp theo sẽ hướng dẫn code android ndk và cách gọi 1 function từ C sang java.