<OBB파일 Mount 방법>
OBB파일을 압축해제하지 않고 바로 Cocos2d-x에서 로드하려고 찾다가 발견했다.
아직 Cocos2d-x 에서는 접근되는지 확인은 안했지만, 아마도 될거같다.
이게 안되면 예전처럼 Cocos2d-x 엔진소스 분석해서 OBB에서 바로 읽도록 수정해야 한다.
이 작업을 v2.0.4에서 했었는데, 이번에 v3.3 으로 업글하려고 진행 중인 상황에서
부가적인 작업까지 해야하는건 좀 가혹하다. ㅡ.ㅡ;
-> Cocos2d-x에서 mount된 경로(/mnt/obb/xxxxx)에 바로 접근이 가능하다.
I. Jobb를 이용한 OBB 파일 생성
1. sdk/tools/jobb.bat 를 path로 걸어준다.
2. 커맨드창에서 아래와 같이 입력한다.
d:\>jobb -d /Resources -o /Resources_test.obb -pn com.gonghee.exobb -pv 1
중요! 패키지명을 맞추지 않으면 퍼미션 디나이드! ㅡ.ㅡ; (버전은 안맞아도 된다)
자세한 내용은 구글 개발자페이지 참고.
링크: http://developer.android.com/intl/ko/tools/help/jobb.html
II.Android 에서 Mount 하는 방법
ERROR_INTERNAL 때문에 한참 고생했는데, JOBB로 obb 파일을 만드니까 잘 된다. 기존에 zip tool로 만들어뒀던 obb파일들은 재사용이 불가능.
public class AppActivity extends Cocos2dxActivity {
private StorageManager mgr = null;
private String mMountPath = "";
private String mObbFile = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
mountObbFile();
super.onCreate(savedInstanceState);
}
public void mountObbFile() {
mObbFile = Environment.getExternalStorageDirectory() + "/Resources_test.obb";
final File obbFile = new File(mObbFile);
if (obbFile.exists()) {
Log.d("OBB", "FILE: " + mObbFile + " Exists");
} else {
Log.d("OBB", "FILE: " + mObbFile + " DOESNT EXIST");
}
// mgr is a member varible of my main activity
mgr = (StorageManager)getSystemService(Context.STORAGE_SERVICE);
if(mgr.isObbMounted(mObbFile)) {
Log.i("OBB", "*********** Already mounted **********");
return;
}
if (mgr.mountObb(mObbFile, null, listener)) {
Log.i("OBB", "Attempting to mount");
} else {
Log.i("OBB", "Mount failed"); // this isn't happening
}
}
OnObbStateChangeListener listener = new OnObbStateChangeListener() {
@Override
public void onObbStateChange(String path, int state) {
Log.i("OBB", String.format("onObbStateChange:Path [%s] State=%d", path, state));
if (state == OnObbStateChangeListener.MOUNTED) {
Log.i("OBB", "Mounted! According to the listener");
mMountPath = mgr.getMountedObbPath(path);
Log.i("OBB", String.format("mountedPath:[%s]", mMountPath));
if (mgr.isObbMounted(mObbFile)) {
Log.i("OBB", "Efectively mounted!");
Toast.makeText(getApplicationContext(), mMountPath, Toast.LENGTH_LONG).show();
} else {
Log.i("OBB", "Not really :(");
}
} else if (state == OnObbStateChangeListener.ERROR_COULD_NOT_MOUNT) {
Log.e("OBB", "ERROR_COULD_NOT_MOUNT");
} else {
Log.e("OBB", "NOT mounted according to the listener");
}
}
};
III. Cocos2d-x에서 Resources 경로 지정방법
- 해보고 내용추가 예정.
FileUtils API에 리소스 경로 지정하는게 있던것 같다.
'Android' 카테고리의 다른 글
코드 스타일 지정 - formatting (0) | 2015.06.12 |
---|---|
GCM 사용방법 (0) | 2015.05.27 |
[JNI] Types (0) | 2014.10.28 |
Activity theme를 이용한 Popup(Dialog)창 만들기~! (0) | 2014.10.17 |
ADB shell 을 이용하여 동영상 녹화하기 (킷켓 이상) (0) | 2014.08.13 |