여기에서 나를 도울 수 있기를 바랍니다. 나는 네이티브 액티비티 프로젝트를 만들고 패키지했습니다. libs 폴더에는 네이티브 활동 내에서 동적으로로드되는 공유 라이브러리가 있습니다 (dlopen). 패키지 libs가 /data/data/packagename/lib 에 복사되었지만 dlopen을 사용하여 어떻게 액세스 할 수 있습니까? 그게 가능하니? 로컬 폴더 이름을 사용하여 액세스 할 수 있다고 생각했는데. : ./libMySharedLibrary는 모두 APK/libs 하위 폴더에 있기 때문에. 올바른 폴더 이름을 얻는 방법이나 공유 라이브러리에 액세스하는 방법을 알고 있습니까?APK 라이브러리 폴더에있는 공유 객체를 동적으로로드 중입니다.
1
A
답변
0
동적 링커는 이미 패키지 개인 라이브러리에 대해 알고 - 단지 기본 이름을 통과하고 모든 확인을해야한다 :
dlopen("libawesome.so", RTLD_LAZY);
P.S.을 놀라움을 피하려면 라이브러리 이름이 고유해야하고 시스템 이름과 충돌하지 않아야합니다 (이들은 /system/lib
및 /vendor/lib
에 있으며, 또한 64 비트 장치의 lib64
디렉토리를 확인하십시오).
내 패키지 이름은 ** com.android.example **입니다. 내가 할 때 : ** adb 쉘 com.android.example **로 실행하고 **/lib ** 폴더를 들여다. 내 공유 라이브러리를 볼 수 없다. .apk 파일에서 공유 라이브러리를 볼 수 있지만 ** ant installd **로 설치 한 후에는 해당 폴더에 없습니다. 공유 라이브러리가 해당 폴더에 복사됩니까? – yaakuro
@yaakuro AFAIK 기본 라이브러리는 ['nativeLibraryDir'] (https://developer.android.com/reference/android/content/pm/ApplicationInfo.html#nativeLibraryDir)에 복사됩니다. 그리고 항상 패키지'lib' 디렉토리가 아닌 것처럼 보입니다. 어쨌든 질문은 라이브러리 위치가 아니라 네이티브 코드로로드하는 올바른 방법에 관한 것이 었습니다. 라이브러리 basename과 함께'dlopen()'을 사용해 보셨습니까? – Sergio