안녕하세요.

애플리케이션 단에서 IPC 통신중 하나인 virtual memory mapping 기술인 AShmem을 이용하여 상용화가 가능한지 궁금해서 문의 드립니다.

Android SDK 에서는 android.os.MemoryFile 이라는 API를 제공하며 이를 통하여,

JNI를 통하여 ashmem_create_region() 및 mmap() api를 호출합니다.

하지만 Google에서 제공하는 SDK의 android.os.MemoryFile API는 생성은 가능하지만, 다른 프로세스에서 File Descriptor 이용하여 공유하기 위한

    public MemoryFile(FileDescriptor fd, int length, String mode) throws IOException {
        if (fd == null) {
            throw new NullPointerException("File descriptor is null.");
        }
        if (!isMemoryFile(fd)) {
            throw new IllegalArgumentException("Not a memory file.");
        }
        mLength = length;
        mFD = fd;
        mAddress = native_mmap(mFD, length, modeToProt(mode));
        mOwnsRegion = false;
    }



생성한 FileDescriptor를 읽어 올수 있는

  public FileDescriptor getFileDescriptor() throws IOException {
        return mFD;
    }

등이 막혀 있습니다.

구글에서 의도적으로 아직 SDK에서는 invisible 상태로 유지 하는것으로 보입니다.

저는 이를 PDK에 있는 libcutils / libutils 등을 NDK의 Android.mk에 넣어서 빌드를 할경우,

A.so에서 저장한 data가 B.so에서 File Descriptor와 address lenght를 맞춰서 read해 올경우 메모리가 공유되는 것을 확인할 수 있었습니다.

문제는 이를 상용화 레벨에 적용해도 궁금한지 문의 드립니다.


안드로메다와 아이뽕 분석 하는중~

공간 측위 관련과 Open GL 공부중... >..<