현재 위치 - 인적 자원 플랫폼망 - 미니프로그램 자료 - 안드로이드의 so 파일을 동적으로 로드하는 방법, apk 크기를 압축하는 방법 ?
안드로이드의 so 파일을 동적으로 로드하는 방법, apk 크기를 압축하는 방법 ?
안녕하세요, 당신의 질문에 대답하게 되어 기쁩니다.

1. 키트 소개 (프로젝트 주소:/liyu Ming1978/nativelibcompression)

Android 압축 도구 세트는 Android 원시 Zip 보다 더 높은 압축비 so 파일 (향후 버전에서는 동적으로 로드된 jar 패키지 및 게임 리소스 파일의 압축도 지원됨) 을 응용 프로그램에 저장할 수 있는 매우 간단한 방법을 제공합니다. 또한 응용 프로그램 내 네트워크에서 다운로드 압축 파일을 업데이트하여 클라우드 스토리지의 일부 so 를 클라우드에 저장할 수 있도록 하여 응용 프로그램 크기를 줄일 수 있습니다.

압축 원칙: 압축 도구는 LZMA 알고리즘을 사용하여 모든 so 를 assert 디렉토리로 압축하고, 처음 시작할 때 응용 프로그램의 개인 디렉토리에 압축을 풉니다.

둘째, 도구 세트 구성

도구 세트는 설치 프로그램이므로 기본 경로에 설치하는 것이 좋습니다. Program files 에 설치하는 경우 windows win7 에 읽기 및 쓰기 권한이 있을 수 있는 문제로 인해 예외가 발생할 수 있습니다.

설치 후 소스 코드가 포함된 네 개의 디렉토리를 볼 수 있습니다.

설치 후 네 개의 디렉토리는 다음과 같습니다

여기서 ApkLibComrepss 는 Java 명령행 프로그램의 소스 코드입니다. 이 디렉토리의 bin 하위 디렉토리에서 일반 apk 파일을 압축된 apk 파일로 변환하는 데 사용할 수 있는 ApkCompress.jar 을 찾을 수 있습니다.

CompressDemo 는 압축된 SDK 를 통합하는 방법에 대해 참조할 수 있는 샘플 코드입니다.

DecRawso 는 압축된 SDK 입니다. 개발 프로젝트에서는 이 SDK 를 참조하여 소스 코드를 수정하여 압축 기능을 통합해야 합니다.

RawsoCreator 는 windows 의 변환 도구이며 일반적으로 필요하지 않으며 압축된 SDK 를 디버깅하고 2 차 개발할 때만 사용됩니다.

셋째, 압축된 SDK 를 통합하는 방법

Compression Demo 를 열면 이 프로젝트를 예로 들어 compression SDK 를 통합하는 방법을 설명하겠습니다.

1. 먼저 DecRawso 프로젝트를 소개해야 합니다.

2. 그럼 DecRawso 에 전화해야 합니다. NewInstance 는 프로젝트의 초기 위치에 배치됩니다. 이 데모에서는 MainActivity.java 의 OnCreate 에서 이 메서드가 호출되어 압축을 푸는 유일한 인스턴스를 만듭니다. 참고: 이 방법은 비동기적이므로 처리기가 비동기 디코딩을 수락한다는 메시지를 전달할 수 있습니다. 매개 변수 showProgress=true 도 전달되면 SDK 에 진행 대화 상자가 생성되어 주 프로세스를 차단합니다. Decrawso.newinstance (mcontext, null, false) 를 사용하지 않는 것이 좋습니다. 이렇게 하면 어떤 메시지도 받아들이지 않고 진행 대화상자도 없다. 압축을 풀면 백그라운드에서 자동으로 완료되며 첫 번째 load so 를 적용할 때 백그라운드 압축 해제가 완료될 때까지 차단됩니다. 따라서 차단 시간이 너무 길면 응용 프로그램이 응답하지 않을 수 있습니다.

3. load so 파일을 수정하는 방법: 모든 System.loadlibrary(***) 를? System.load(DecRawso. GetInstance () 를 사용합니다. Getpath ("* * *");

새 버전의 경우 이 단계를 생략할 수 있으며 SDK 는 시스템의 라이브러리 로드 경로를 수정합니다. 일반적으로 시스템 업그레이드에는 문제가 없습니다 (코드가 표준화되지 않아 안드로이드 업그레이드와 함께 새 코드를 수정할 가능성이 거의 없음). 편리하다면, 우리는 여전히 시스템을 사용한다. 로드 (declawso). Getinstance () 를 사용합니다. Getpath ("* * *)).

이러한 간단한 단계를 거쳐 압축된 SDK 가 프로젝트에 통합되었습니다.

넷째, 게시 APK 를 압축하는 방법

ApkCompress.jar 을 사용하여 APK 를 압축 및 게시합니다. 이 도구는 명령줄 도구입니다. 이 명령의 일반적인 용도는 compressapk.jar-a c:/my/test.apk-k c:/key * * # # alias-x86 (Java-도 실행할 수 있습니다

-a 다음에 apk 경로 이름이 옵니다. 전체 경로가 아닐 수도 있습니다.

-k 뒤에는 서명 파일 [key storepass alias] 이 옵니다. 키는 전체 경로 이름이 아닐 수 있습니다 (쓰기 이름이 없으면 기본값은 CERT 임).

-x86 은 x86 라이브러리 파일을 클라우드에 저장해야 하며 그 뒤에 /cloudrawso_x86 이 와야 함을 나타냅니다.

명령 실행 후 test _ Compressialign. Apk 가 생성됩니다. 이 apk 는 압축된 apk 입니다.

동사 (verb 의 약어) 개발 모드 및 압축 모드

개발을 용이하게 하기 위해 개발 프로세스 중 (소스 코드 지원 압축 수정 후) 압축을 풀고 apk 를 정상적으로 실행할 수 있습니다. 압축 패키지 SDK 는 압축 패키지가 있는지 자동으로 확인합니다. 압축된 패키지가 없으면 로드된 경로가 안드로이드의 기본 경로로 복원됩니다. 그래서 가장 편리한 개발은 먼저 코드를 통합하고, 예전처럼 개발하고 (압축하지 않음), 발표할 때 apk 를 압축하는 것이다.

자동사 X86 과 암 라이브러리의 혼합 호출

구현 및 개발 과정에서 x86 버전이 없는 타사 라이브러리가 있을 수 있습니다. 일반적으로 ISV 는 arm 의 타사 라이브러리를 x86 디렉토리에 배치하지 않으며 실제 작업에서 라이브러리 부족 현상이 발생합니다. 라이브러리가 부족한 경우 압축된 SDK 는 x86 디바이스의 arm 압축 패키지를 자동으로 압축 해제하여 라이브러리 부족을 방지합니다. (실제로 로드된 라이브러리는 누락된 라이브러리일 뿐, 일관되지 않은 라이브러리 파일은 누락된 라이브러리가 아닐 수도 있습니다. ) 을 참조하십시오

그러나 분명히, 이것은 비효율적으로 이어질 수 있다. 제 3 자 so 와 x86 의 라이브러리가 전혀 상호 참조되지 않는 경우 (즉, 이러한 라이브러리는 모두 Java 계층에서 호출되고 네이티브 레이어에서는 호출되지 않는 경우) arm 의 제 3 자 라이브러리를 x86 디렉토리로 복사하여 라이브러리가 부족하지 않도록 할 수 있습니다. 물론, 이로 인해 arm 라이브러리의 복제본 중복이 발생할 수 있습니다. 이전 zip 압축에서는 압축 패킷이 커지지만, 새로운 LZMA 압축에서는 라이브러리 크기가 전혀 늘어나지 않습니다. LZMA 압축은 사전이 크기 때문에 관련 파일 몇 개를 최대한 압축할 수 있기 때문입니다. 파일이 정확히 같은 경우 LZMA 압축은 기본적으로 단일 파일과 동일합니다.

마음에 드시면 오른쪽을 클릭하여 답을 받아주세요. 궁금한 게 있으면 클릭하여 질문하세요.

내 대답이 너에게 도움이 되었으면 좋겠어, 받아들여지길 바래!

~ O(∩_∩)O~