2016-03-23 11 views
8

Tôi đã lưu giữ một số tệp trong thư mục nội dung của ứng dụng Android.fopen trong mã JNI C bị lỗi đối với tệp được đặt trong thư mục nội dung trong ứng dụng android

Bây giờ tôi biên dịch ứng dụng đó và tải apk. [Khi tôi trích rằng apk file tôi đang có trong thư mục tài sản]

Bây giờ tôi cài đặt mà apk trong thiết bị di động

và trong ứng dụng đó có một số mã trong c lập trình với giao diện JNI.

Bây giờ, gọi fopen() gọi lập trình c để tệp đó bị lỗi.

fopen("myfile","r"); 

Tôi biết khi cài đặt gói ứng dụng android tài sản sao chép tập tin để /data/data/com.packagename/something

Vì vậy, không ai biết con đường đó vì vậy tôi có thể cung cấp cho nó trong fopen()

hoặc là có bất kỳ phương pháp nào khác để mở tập tin đó trong Lập trình C.


Nếu tôi giữ các tệp đó trong thư mục sdcard và truy cập như fopen("/sdcard/myfile","r"); thì tệp sẽ hoạt động. Nhưng tôi muốn giữ các tệp đó trong thư mục nội dung chỉ

+4

"Tôi biết trong khi cài đặt apk tập tin bản sao android tập tin vào /data/data/com.packagename/something" - và bằng chứng của bạn về điều này là, những gì, chính xác? AFAIK, nội dung không phải là tệp trên thiết bị nhưng vẫn được đóng gói trong APK. – CommonsWare

Trả lời

6

Bạn có thể sử dụng trình quản lý nội dung để truy cập nội dung trong mã JNI. Đó là một phần của NDK.

http://developer.android.com/ndk/reference/group___asset.html

Cái gì như:

EXPORT_API void LoadAsset(char* filename, jobject assetManager){ 
    AAssetManager* mgr = AAssetManager_fromJava(env, assetManager); 
    AAsset* asset = AAssetManager_open(mgr, filename, AASSET_MODE_BUFFER); 
    AAsset_read(asset, ...); 
} 

Và sau đó trong Java gì đó như:

LoadAsset("myfile", getContext().getAssetManager()); 
0

Một cách tôi đã tìm thấy là viết một dòng thử nghiệm trong các mã, một cái gì đó như:

System.out.println("Working Directory = " + 
       System.getProperty("user.dir")); 

Bây giờ, nếu bạn biết nơi lưu trữ nội dung của mình bằng Android, ví dụ: /data/data/com.packagename/assets/file.png, thì bạn sẽ biết đường dẫn tuyệt đối hoặc có tính di chuyển đối với nội dung. Tôi hy vọng điều này làm việc cho bạn, nó đã giúp tôi!

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