32 비트 및 64 비트 .so 파일을 응용 프로그램에서 혼합하는 방법

Carmelo M 09/15/2017. 1 answers, 84 views
java android android linux android-ndk android-ndk ndk-build

첫째, 응용 프로그램에서 .so 파일의 다른 아키텍처를 혼합하여 사용할 수 없다는 것을 알고 있습니다 (파트는 32 개만 사용하고 다른 파트는 64 개만 사용함)

그래서 동적으로 64, 32 비트 파일을로드하는 새로운 프로세스를 열려고 시도했지만 System.load() 가 오류를 발생시키고 응용 프로그램이 다운되었습니다! 여러 프로세스를 통해이 문제를 해결하는 방법은 무엇입니까? 아니면 이것을 해결할 다른 방법이 있습니까?

5 Comments
Markus 07/27/2017
SO에 오신 것을 환영합니다! 도움말 페이지 , 특히 "여기에 대해 어떤 주제가 있습니까?" 라는 제목 의 섹션을 읽으 십시오. 그리고 "어떤 종류의 질문을하지 말아야합니까?" . 또한 투어 를 가져 가서 좋은 질문을하는 방법에 대해 읽어보십시오. 마지막으로 Minimal, Complete 및 Verifiable Example 을 만드는 방법을 배우십시오. 오류에 대한 자세한 내용은 많은 도움이됩니다.
Alex Cohn 07/27/2017
멋진 아이디어입니다! 그러나 어떤 종류의 자녀 과정을 시작하고 싶습니까? 서비스? 시스템이 APK 분석을 기반으로 32 비트 모드를 활성화할지 여부를 결정하기 때문에이 방법이 효과가 있다고 생각하지 않습니다. 따라서 JVM이 적절하게 설정됩니다.
Alex Cohn 07/27/2017
stackoverflow.com/a/31879900/192373을보십시오 : pm 은 앱을 설치하는 동안 ABI를 강제 할 수 있습니다.
Carmelo M 07/28/2017
@AlexCohn 감사합니다! 나는 동의한다. 자식 프로세스 (Activity)는이 문제를 해결할 수 없다. 함수의 일부가 32 비트 .so를 사용하기를 원하기 때문에. 함수는 동일한 응용 프로그램에서 64 비트 .so를 사용합니다.
Carmelo M 07/28/2017
@AlexCohn 다른 아이디어가 있습니까? 석사

1 Answers


Alex Cohn 07/30/2017.

글쎄, 해봤 어. 이것에 직면하면, arm64-v8a armeabi 공유 라이브러리를 사용하고 Runtime.exec ()를 사용하여 Java에서 arm64-v8a 실행 파일을 실행하거나 system ()을 사용 하여 C에서 arm64-v8a 실행 파일을 실행합니다.

실행 파일을 자산에 넣고 수동으로 압축을 풀거나 속임수 를 쓰고 이름을 바꿔 lib 시작하고 .so 끝나도록 할 수 있습니다. 이제이 파일을 jniLibs/armeabi 디렉토리에 넣을 수 있습니다.

반대로도 작동합니다 : 64 비트 응용 프로그램에서 32 비트 실행 파일 ( -fPIE )을 실행하십시오.

라이브러리 검색 경로가 충돌하지 않는지 확인하십시오.

2 comments
Carmelo M 08/04/2017
멋진 아이디어입니다 !!! 내 프로젝트는 비디오 트랜스 코딩 백그라운드 작업과 유사하지는 않지만 사용자 제스처와 상호 작용하기 위해 SurfaceView를 통해 3 차원 그래픽을로드해야합니다. 이러한 UI 상호 작용을 처리하는 방법은 큰 문제이며, 나에게 아이디어를 줄 수 있기를 바랍니다. 감사합니다.
Alex Cohn 08/04/2017
나는 당신이 UI를 처리하거나 프로세스 간 통신을 통해 라이브 그래픽을 수행 할 수 있다고 생각하지 않는다.

Related questions

Hot questions

Language

Popular Tags