2016-03-23 14 views
8

私はアンドロイドアプリケーションのassetsフォルダにいくつかのファイルを保管しています。JNIでfopen Cコードがアンドロイドアプリケーションのassetsフォルダに置かれたファイルに対して失敗しました

私はそのアプリケーションをコンパイルし、apkを入手します。 [私はAPK私のファイルは、資産フォルダにあることを取り出すとき]

は、今私は、モバイルデバイス

で、そのアプリケーション内のapkがJNIインタフェースを持つCプログラミングにおけるいくつかのコードを持っていることをインストールします。

今度は私のfopen()呼び出しで、そのファイルのプログラミングが失敗します。

fopen("myfile","r"); 

/data/data/com.packagename/something

にAPKアンドロイドコピー資産のファイルをインストールしている間、私は知っているので、誰もがそのパスはので、私はfopen()

にそれを与えることができます知っているかで、そのファイルを開くために、他の方法がありませんCプログラミング。


私はfopen("/sdcard/myfile","r");のようにSDカードのフォルダとアクセスにこれらのファイルを保存する場合、それはファイルを動作します。しかし、私はそれらのファイルを資産フォルダにだけ残したい

+4

「私は、/data/data/com.packagename/somethingにapk android copy assetsファイルをインストール中に知っています。 AFAIK、資産はデバイス上のファイルではなく、APKにパッケージされたままです。 – CommonsWare

答えて

6

資産マネージャを使ってJNIコードのアセットにアクセスすることができます。それはNDKの一部です。

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

ような何か:

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, ...); 
} 

そしてJavaで何かのように:私が見つけた

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

一つの方法は、コードのテストラインを書くことで、何かlike:

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

あなたの資産がAndroidによってどこに格納されているかを知っていれば、例えば/data/data/com.packagename/assets/file.pngとすると、資産へのリフェラルまたは絶対パスがわかります。これはあなたのために働くことを願って、それは私を助けた!

関連する問題