반응형
Assets 폴더를 만들고 자료를 넣었으면 이를 활용하기 위한 Assets 관련 소스를 import하겠습니다.
1. 프로젝트의 cpp 폴더에 다음과 같은 소스파일을 넣습니다.
- android_fopne.cpp
#include <stdio.h>
#include "android_fopen.h"
#include <errno.h>
#include <android/asset_manager.h>
static int android_read(void *cookie, char *buf, int size) {
return AAsset_read((AAsset *) cookie, buf, size);
}
static int android_write(void *cookie, const char *buf, int size) {
return EACCES; // can't provide write access to the apk
}
static fpos_t android_seek(void *cookie, fpos_t offset, int whence) {
return AAsset_seek((AAsset *) cookie, offset, whence);
}
static int android_close(void *cookie) {
AAsset_close((AAsset *) cookie);
return 0;
}
// must be established by someone else...
AAssetManager *android_asset_manager;
void android_fopen_set_asset_manager(AAssetManager *manager) {
android_asset_manager = manager;
}
FILE *android_fopen(const char *fname, const char *mode) {
if (mode[0] == 'w') return NULL;
AAsset *asset = AAssetManager_open(android_asset_manager, fname, 0);
if (!asset) return NULL;
return funopen(asset, android_read, android_write, android_seek, android_close);
}
- android_fopen.h
#ifndef SAMPLEPROJECT_ANDROID_FOPNE_H
#define SAMPLEPROJECT_ANDROID_FOPNE_H
#include <stdio.h>
#include <android/asset_manager.h>
void android_fopen_set_asset_manager(AAssetManager* manager);
#ifdef __cplusplus
extern "C"{
#endif
FILE *android_fopen(const char *fname, const char *mode);
#ifdef __cplusplus
}
#endif
#define assets_fopen(name, mode) android_fopen(name, mode)
#endif //SAMPLEPROJECT_ANDROID_FOPNE_H
그리고 동기화를 진행합니다.
2. 프로젝트에 NDK 경로를 추가합니다.
local.properties를 클릭하고 아래를 추가합니다.
ndk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\Sdk\\ndk-bundle
빌드 후 File에서 Project Structure...를 클릭합니다.
정상적으로 경로가 추가되었음을 확인 할 수 있습니다.
3. CMakeLists.txt에 새로 추가한 android_fopen.cpp와 android_fopen.h를 추가합니다. 그 후 빌드하고 동기화를 진행합니다.
동기화를 진행하면 에러가 사라진다.
반응형
'Android' 카테고리의 다른 글
[Native C++] 응용1. Assets을 이용한 aar 만들기 (3) (0) | 2022.10.30 |
---|---|
[Native C++] 응용1. Assets을 이용한 aar 만들기 (1) (0) | 2022.10.29 |
[Native C++] 6. aar 배포용 샘플 프로젝트 만들기(또는 aar파일을 프로젝트에 포함시키는 방법) (0) | 2022.10.28 |
[Native C++] 5. 라이브러리 동작 확인하고 aar 파일 만들기 (0) | 2022.10.28 |
[Native C++] 4. Java클래스 생성과 C소스 연결하기 (0) | 2022.10.27 |