2013-06-29 47 views
8

Tôi muốn đóng gói ứng dụng dòng lệnh gốc của Android vào một gói ứng dụng. Tôi có ứng dụng xây dựng với ndk-build sử dụng jni/Android.mk. Đầu ra nằm trong libs/armeabi/<MyApp>. Tôi cũng có tòa nhà apk với kiến. Tuy nhiên, các gói ứng dụng dường như không nhận được ứng dụng dòng lệnh. Nếu tôi giải nén apk, ứng dụng không có trong đó.Cách gói ứng dụng dòng lệnh gốc trong apk?

Tôi cần làm gì để nhận kiến ​​bao gồm ứng dụng dòng lệnh được tạo sẵn?

Ngoài ra, tôi cần làm gì để kiến ​​chạy ndk-build? (Điều này đã được trả lời: Android NDK build with ANT script)

Trả lời

10

Xem Android NDK build with ANT script.

Bạn có thể thêm tệp nhị phân vào APK bằng cách sử dụng aapt nếu Ant không tự động sao chép từ libs/armeabi, xem Documentation for aapt element in Ant script.

Tôi tin rằng tệp sẽ được trích xuất chính xác thành /data/data/your.package.full.name/lib, với quyền thực thi.

Ant xây dựng liên quan đến một bước gọi là "ApkBuilder", mà chỉ cho biết thêm tập tin từ libs/armeabi rằng mô hình phù hợp ^.+\.so$ hoặc gdbserver - sau này chỉ debug xây dựng.

Nhưng không đủ để đổi tên tệp thực thi thành "myexecutable.so": tệp này sẽ không được trình cài đặt APK trích xuất trên thiết bị.

Nó là đủ để đổi tên tập tin thực thi để "lib myexecutable .so": tập tin này sẽ được trích xuất bởi APK cài đặt Package Manager trên thiết bị để /data/data/your.package.full.name/lib, với các điều khoản thực thi.

Cá nhân tôi muốn cung cấp cho một số tên đặc biệt không thực sự là thư viện này, ví dụ: lib...ffmpeg...so.

+0

Tôi đã làm điều này, chắc chắn tôi có thể thêm một nhiệm vụ kiến ​​để chạy ndk-build và nó hoạt động. Ant không tự động sao chép tệp thực thi. Tôi cũng có thể thêm nhị phân với aapt (hoặc từ commandline hoặc ant). Thật không may, gói ứng dụng kết quả không cài đặt? (Lỗi biểu hiện của một số loại) Tệp thực thi chắc chắn là trong apk, vì có thể được kiểm tra bằng giải nén. Điều này là hữu ích nhưng không hoàn toàn thực hiện công việc, bạn có nhiều đề xuất hơn không? –

+0

@Alex lỗi nào biểu hiện? Bạn có thể cụ thể hơn không? –

+0

OK, đây là một cách để ăn gian: gọi "gdbserver" thực thi của bạn và nó sẽ được đóng gói chính xác vào thư mục 'lib/armeabi' trong APK và được cài đặt vào' /data/data/your.package.name/lib' thư mục trên thiết bị. Như bạn thấy, có hai chướng ngại vật. Một, thêm nhị phân vào APK, có thể được thực hiện như một bước ANT tùy chỉnh, nhưng bạn nên cẩn thận để có nó ở đó trước khi APK được ký kết. Bước thứ hai, trên thiết bị, có thể phức tạp hơn. –

2

Nói chung, bạn nên đặt ứng dụng dòng lệnh của bạn vào Assets thư mục, sau đó sử dụng AssetManager để trích xuất tài sản của bạn (đừng quên chmod nó sau khi khai thác!). Nhưng sẽ có một vấn đề cần giải nén nó, bởi vì không phải mọi thư mục trong Android đều có thể lưu trữ các tệp nhị phân thực thi. Trên Android 2.2, tôi đã thử sử dụng /cache và nó hoạt động. Không thể nói cho Android mới hơn. Rất tiếc, không thể đưa ra đề xuất nào về kiến.

+0

Tôi đang cố gắng thực hiện việc này cho android 4.0/4.1/4.2. Các tệp nhị phân có thể thực thi trong/data/local work. –

+3

/data/local được viết (và cũng có thể đọc) bị hạn chế trên nhiều bản phát hành android. Có lẽ nơi tốt nhất để đặt nó là trong kho lưu trữ riêng tư của một ứng dụng, nhưng đặt quyền trên tệp để có thể đọc và thực thi trên toàn cầu nếu ý định chia sẻ tệp với các ứng dụng khác hoặc trình bao adb. –

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