Viết ứng dụng bằng C hoặc C ++ cho Android? [đóng cửa]


286

Tôi đang cố gắng phát triển / chuyển một trò chơi sang Android, nhưng đó là C và Android hỗ trợ Java, nhưng tôi chắc chắn phải có cách để có ứng dụng C trên đó, có ai biết cách nào để thực hiện điều này không?


chỉ khi bạn bẻ khóa điện thoại AFAIK.
Cogsy

64
Không phải là bẻ khóa cho iPhone?
Robert Gould

1
G1 không cho phép truy cập root theo mặc định và có rất nhiều hạn chế liên quan đến những gì có thể được thực thi bên ngoài môi trường 'Android'. Tôi sẽ không có nhiều hy vọng tìm ra cách để thực thi mã gốc từ bên trong Android.
Cogsy

2
nhưng tôi đã tải xuống DOOM cho Android từ thị trường. Vì vậy, nó nên được thực hiện
Robert Gould

4
DOOM cho Android được viết bằng Java code.google.com/p/doom-for-android/source/browse/#svn/trunk
Marco Mustapic

Câu trả lời:


247

Đối với bất kỳ ai đến với điều này thông qua Google, lưu ý rằng bắt đầu từ SDK 1.6 Android hiện đã có SDK gốc chính thức.

Bạn có thể tải xuống Android NDK (Bộ công cụ phát triển bản địa) từ đây: https://developer.android.com/ndk/doads/index.html

Ngoài ra còn có một bài đăng trên blog về NDK: http://android-developers.blogspot.com/2009/06/int Giới thiệu- android-15-ndk-release-1.html


5
OK, vậy bây giờ thì thế nào về C # và .Net? -)
Avi

4
Không thể thấy hỗ trợ .net từng xảy ra
vickirk


2
Vui lòng tham khảo liên kết này androidsnippets.wordpress.com/2012/08/30/iêu
KK_07k11A0585

2
để biết mã .net / c # và android, hãy xem xamarin
bbqchickenrobot

41

Các Android NDK là một bộ công cụ cho phép bạn thực hiện các bộ phận của ứng dụng của bạn trong mã nguồn gốc, sử dụng ngôn ngữ như C và C ++. Đối với một số loại ứng dụng nhất định, điều này có thể giúp bạn sử dụng lại các thư viện mã được viết bằng các ngôn ngữ đó.

Để biết thêm thông tin về cách bắt đầu với phát triển bản địa, hãy theo liên kết này .

Các ứng dụng mẫu có thể được tìm thấy ở đây .


1
hoặc 2009, 2010, 2011, 2012 hoặc 2013
Christopher Berman

19

Thông thường, bạn phải:

  1. Cài đặt Google Android NDK. Nó chứa libs, tiêu đề, ví dụ makfile và chuỗi công cụ gcc
  2. Xây dựng một tệp thực thi từ mã C của bạn cho ARM, tối ưu hóa và liên kết nó với các lib được cung cấp nếu được yêu cầu
  3. Kết nối với điện thoại bằng giao diện adb được cung cấp và kiểm tra khả năng thực thi của bạn

Nếu bạn đang muốn bán một ứng dụng:

  1. Xây dựng thư viện từ mã C của bạn
  2. Tạo mã Java đơn giản sẽ sử dụng thư viện này
  3. Nhúng thư viện này vào tập tin gói ứng dụng
  4. Kiểm tra ứng dụng của bạn
  5. Bán hoặc phân phối miễn phí

Tôi là người mới trong NDK và tôi muốn chạy C lan trong Android. Có liên kết ref nào không?
Parag Chauhan

14

Google đã phát hành Bộ công cụ phát triển bản địa (NDK) (theo http://www.youtube.com/watch?v=Z5whfaLH1-E lúc 00:07:30).

Hy vọng thông tin sẽ được cập nhật trên trang nhóm Google ( http://groups.google.com/group/android-ndk ), vì nó cho biết nó chưa được phát hành.

Tôi không chắc chắn nơi để tải xuống đơn giản cho nó, nhưng tôi đã nghe nói rằng bạn có thể lấy một bản sao của NDK từ kho lưu trữ Git của Google dưới nhánh bánh rán.


12

Vị trí chính thức dường như là đây không phải là điều bạn từng "muốn làm". Xem chủ đề này trên danh sách Nhà phát triển Android. Google dự tính android chạy trên nhiều thiết bị khác nhau (CPU, màn hình, v.v.). Do đó, cách tốt nhất để cho phép phát triển là sử dụng mã được quản lý (di động) nhắm vào máy ảo Dalvik. Vì lý do này, SDK Android không hỗ trợ C / C ++.

NHƯNG, hãy xem trang này :

Android bao gồm một tập hợp các thư viện C / C ++ được sử dụng bởi các thành phần khác nhau của hệ thống Android. Những khả năng này được tiếp xúc với các nhà phát triển thông qua khung ứng dụng Android.

Khung ứng dụng được quản lý dường như được xếp chồng lên trên các thư viện này. Trang tiếp tục liệt kê các lib C / C ++: thư viện C tiêu chuẩn, phương tiện, 3D, SQL lite và các trang khác.

Vì vậy, tất cả những gì bạn cần là một chuỗi trình biên dịch sẽ biên dịch C / C ++ sang CPU thích hợp (ARM, trong trường hợp G1). Một số hướng dẫn ngắn gọn về cách làm điều này là ở đây .

Điều tôi không biết là nơi tìm mô tả về các API mà các thư viện này cung cấp. Tôi đoán có thể có các tệp tiêu đề được chôn trong SDK ở đâu đó, nhưng tài liệu có thể còn sơ sài / thiếu. Nhưng tôi nghĩ rằng nó có thể được thực hiện!

Hy vọng rằng đó là hữu ích. Để ghi lại, tôi chưa viết bất kỳ ứng dụng Android gốc nào - chỉ một vài ứng dụng được quản lý đơn giản.

Andy


4
Hạ cấp. NDK dường như là một trình biên dịch chính thức cho mã gốc Android. Làm cho câu trả lời này trở nên lỗi thời.
unixman83

8

Bạn có thể sử dụng Nestedvm để dịch C (hoặc các ngôn ngữ GCC khác) sang mã byte Java và sử dụng nó làm cơ sở cho cổng của bạn. Ví dụ: xem cổng Android của bộ sưu tập câu đố di động Simon Tathams .

Tôi hy vọng phương pháp này đã bị NDK làm cho lỗi thời, nhưng nó có thể không tồn tại nếu một số mạng hoặc thứ gì đó không cho phép mọi người nâng cấp điện thoại của họ.


1
+1 cho một thay thế cho NDK, mặc dù NDK làm cho nó trở nên lỗi thời.
tobsen

Không lồng nhau tương thích với nhiều thiết bị hơn?
charo

8

Google đã ra mắt Google I / O 2011: Đưa các trò chơi C và C ++ lên phiên Android có sẵn tại http://www.youtube.com/watch?v=5yorhsSPFG4

Điều này là tốt để hiểu việc sử dụng NDK để viết ứng dụng trong c và c ++ cho Android.

Nếu bạn chỉ muốn biên dịch chéo bất kỳ trò chơi gốc dựa trên bảng điều khiển nào và chạy chúng trên Android thì Bài viết này đã chỉ ra 3 phương pháp cho cùng.

1: Biên dịch tĩnh bằng cách sử dụng chuỗi công cụ độc lập

2: Biên dịch chéo bằng cách sử dụng chuỗi công cụ của Android NDK

3: Biên dịch chéo bằng mã nguồn AOSP


7

Có lẽ bạn đang tìm kiếm điều này?

http://www.mosync.com/

Nó là một lớp giữa để phát triển cho một số nền tảng di động sử dụng c ++.


2
liên kết là 404 không tìm thấy. Luôn luôn là một ý tưởng tốt để đưa một số nội dung từ bài đăng gốc vào câu trả lời trong trường hợp chủ sở hữu trang web trúng xổ số, ly dị vợ và chuyển đến Bahamas.
Zuzlx

7

Nhìn vào điều này có vẻ như nó có thể:

"thực tế chỉ có ngôn ngữ Java được hỗ trợ không có nghĩa là bạn không thể phát triển ứng dụng bằng các ngôn ngữ khác. Điều này đã được chứng minh bởi nhiều nhà phát triển, tin tặc và chuyên gia phát triển ứng dụng cho thiết bị di động. Những kẻ ở Elements Interactive BV, công ty đứng sau Edgelib thư viện, đã thành công khi chạy các ứng dụng C ++ bản địa trên nền tảng Android, thậm chí vào thời điểm này vẫn còn nhiều vấn đề về hiển thị và âm thanh, v.v. Điều này bao gồm trò chơi S-Tris2 và bản demo hoạt hình 3D của Edgelib. "


6

Từ năm 2009 có một sự phát triển về vấn đề này.
NESEitas - Qt (khung C ++) cho Android
Bắt đầu video .


Điểm tốt. Cũng như một ghi chú thêm, NESEitas sử dụng NDK của Android.
Jaime Ivan Cervantes





2

Tôi không biết hướng dẫn nhưng một công cụ phát triển tốt: Airplay SDK từ Ideaworks Labs. (Gần đây đã đổi thương hiệu " Marmelade ") Sử dụng C / C ++, bạn có thể xây dựng các ứng dụng cho Windows Mobile, iPhone, Android. Thành phần duy nhất tôi không thích là trình soạn thảo GUI - một lỗi, nhưng bạn luôn có thể thay thế nó bằng Notepad.


2

Bạn có thể tải xuống c4droid và sau đó cài đặt plugin GCC và cài đặt vào SD của bạn. Từ shell tôi chỉ đi qua thư mục chứa nhị phân GCC và sau đó gọi nó để thực hiện trên tàu.

tìm / tên gcc

/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc

mèo> test.c

#include<stdio.h>
int main(){ 
 printf("hello arm!\n");
return 0;
}

./arm-linux-androideabi-gcc test.c -o test

./kiểm tra

xin chào cánh tay!



2

Các tệp C / c ++ gốc libstdc ++. * Từ Ubuntu của bạn là các nhị phân x86 (hoặc x86_64) nhưng các thiết bị và trình giả lập Android là ARM. Tất nhiên, dù sao thì điều này cũng không hoạt động, ngay cả khi bạn đặt đúng soname. Đây là cách rất ngây thơ mà không dẫn đến đâu. Android có hỗ trợ rất hạn chế về C ++, nghĩa là không có ngoại lệ, thư viện C ++ tiêu chuẩn (bao gồm STL) và RTTI. Nếu bạn cần chức năng như vậy, hãy sử dụng phân phối NDK tùy chỉnh của tôi từ

http://crystax.net/android/ndk.php - nó hỗ trợ đầy đủ các tính năng C ++ được liệt kê ở trên.

Tại sao có lỗi: tham chiếu không xác định đến lỗi liên kết '__cxa_end_cleanup'. Android stlport

thời gian. Bởi vì không có liên kết đến libstdc + +. A. Sai rồi.

Bởi vì nó sử dụng một số thư viện tĩnh, nên cần phải liên kết đầy đủ libstdc + +. Một lon

http://crystax.net/android/ndk.php tại đây để tải gói

thư mục \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi.

Android trên hỗ trợ libstdc + + của riêng nó bị hạn chế, nó phải được liên kết với libstdc + + hoàn chỉnh. Một công việc.

Thêm tệp trong Android.mk LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \

 $ (LOCAL_PATH) / libs / liblua.a \
 `$ (LOCAL_PATH) / libs / libstdc + +. A`  

LOCAL_CPPFLAGS + =-lstdc + +-fexceptionscó thể được biên dịch


1

Có một kế hoạch cho phép các thư viện C / C ++ trong phiên bản SDK tiếp theo của Android (Codename Eclair?) Cho đến nay, không thể thông qua SDK Java của Android. Tuy nhiên, bạn có thể lấy dự án nguồn mở HUGE, cuộn các thư viện của riêng bạn và sau đó flash thiết bị của riêng bạn ... nhưng bất kỳ ai muốn sử dụng thư viện của bạn cũng sẽ phải flash bản dựng tùy chỉnh của bạn.


-7

Câu trả lời ngắn gọn: Bạn không thể.

@ Backslash17: Xem qua bài viết và liên kết sau với hướng dẫn cài đặt, tất cả công ty đã làm việc là khởi chạy một trình tự thực thi được biên dịch trên trình giả lập, bỏ qua khung công tác Android. Một khi bạn có trình giả lập, bạn có thể telnet và có shell linux. Chạy một chương trình linux là chuyện nhỏ. Nhưng điều đó không hoạt động cho điện thoại mà không cần bẻ khóa (còn gọi là quyền truy cập root) và không thể cung cấp trên thị trường.

Trừ khi Google mở ra các cơ hội khác hoặc ai đó viết trình biên dịch tùy chỉnh biên dịch Ngôn ngữ X thành mã byte Dalvik (Dalvik là VM chạy các chương trình Android), bạn sẽ không thể viết mã gốc.


Phải, đó là lý do tại sao tôi viết "Có vẻ như ...". Xem để tin!
dấu gạch chéo17
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.