2011-04-22 4 views
2

저는 Android NDK로 빌드 한 공유 라이브러리가 있습니다.이 공유 라이브러리는 80MB입니다 (예, 거대한 것입니다). 나는 그것을 절대적으로 축소시킬 수 없다. 문제는 안드로이드 애플리케이션이 설치 될 때 300K 만 무료이기 때문에 공유 라이브러리가 내 전화기의/시스템에 맞지 않는다는 것입니다. 그래서 응용 프로그램이 실행을 시도 할 때 모든 라이브러리가 존재하지 않기 때문에 SIGBUS 오류로 인해 충돌합니다./system에서 더 이상 공간을 확보하는 것은 불가능할 가능성이 거의 없습니다.공유 라이브러리가/시스템에 맞지 않아서 Android 앱이 충돌합니다.

150MB의 여유 공간이있는/data와 같은 다른 파티션에이 라이브러리를 연결하는 다른 방법이 있는지 궁금합니다. 아무도 이것에 대한 아이디어가 있습니까? 나는 그것을 경험을 가지고 있지 않기 때문에

+0

+1 와우 .. 감동했습니다. 그것이 모든 코드 (다른 종류의 리소스와 비교)라면 솔직히 감명받습니다. 쉽지 않습니다. – BonanzaDriver

+0

그것은 wireshark입니다 :) 패킷을 파싱하기위한 그들의 "해부학자"코드는 엄청납니다. – gnychis

+0

나는이 툴에 대해 들어 봤지만, 그럴 수는 없다는 것을 전혀 몰랐습니다. 솔직히, 나는 그들이 TCP/IP/Socket/Frame 기반 코딩에서 80 megs를 어떻게 채웠는지 조금 어이가있다. 나는 나 자신들이 전 해주는 충고를한다. 80은 배당된다. – BonanzaDriver

답변

1

당신은,하지만, 그것을 어떻게 조회 /data/data/YOURPACKAGE/lib/

당신은해야에도 파일을 .so를 설치할 수 있습니다.

편집 :이 게시물을 살펴 : 150메가바이트 무료이/데이터와 같은 다른 파티션에 넣어이 라이브러리에 연결하는 또 다른 방법이 있는지 http://www.aton.com/android-native-libraries-for-java-applications/

+0

흥미 롭습니다, 나는 지금 거기에 나의 도서관을 본다! libs/armeabi/*에있는 안드로이드 소스 코드의 모든 것이 여기에 설치되어있는 것처럼 보입니다. 그래서, 내 전체 도서관이 거기에 적합합니다. 흥미로운 점은 System.LoadLibrary (blah)를 실행하려고 할 때/system/lib에 복사하려고 시도 할 때 오류가 발생한다는 것입니다. – gnychis

+0

따라서이 작업은 자동으로 수행되며 여기에서 직접로드됩니다./system/lib에 설치하지 않기 때문에 (루트 폰에서만 가능하다.) – gnychis

0

그래서 궁금했다.

자신 만의 펌웨어를 작성할 수 있습니다.

그렇지 않으면 이런 일이 일어날 수 없습니다.

+0

예를 들어, 리눅스는 여분의 라이브러리 경로를 추가하기 위해 ld.so.conf 파일을 가지고있다. 비록, 안드로이드는이 또는 ldconfig가 없습니다. 라이브러리 경로를 추가하는 시스템 변수가있을 수도 있습니다. – gnychis

+0

@ gnychis : 뿌리깊은 전화기에는 해결책이있을 수 있습니다. 리눅스에서 수퍼 유저 권한 없이는 주석에있는 내용을 변경할 수 없습니다. 별도로 지정하지 않았으므로 임의의 장치에 배포 할 표준 SDK 응용 프로그램으로이 작업을 수행하려고한다고 가정합니다. SDK 응용 프로그램을 임의의 장치에 배포하려면 사용자가 추구하는 것이 불가능하다는 사실을 절대적으로 말할 수 있습니다. – CommonsWare

관련 문제