2016-06-30 2 views
1

android 용 다른 아키텍처 용 네이티브 코드를 크로스 컴파일하고 해당 jni 래퍼 클래스를 Android Studio에서 작동하도록했습니다. 이제는 라이브러리로 사용할 수있게하려고합니다.android 용 네이티브 코드와 순수 자바를 포함하는 라이브러리를 만드는 방법

1) .so 파일과 jni 파일을 jar 파일로 변환 할 수 있습니까? (.aar가 아닙니다. 내 라이브러리에는 순수한 자바와 원시 코드 만 포함되어 있으며, Android와 관련없는 것들이 포함되어 있지 않기 때문입니다. xml, res, etc.) 그렇다면 구조가 무엇이어야 하는가?

2) .jar 파일을 만들 수 없으면 .aar 파일을 만드는 것만 남았습니다. 그것은 android studio의 사용을 포함 할 것입니다. 안드로이드 스튜디오가 없어도 될까요?

편집 1 : 파일을 jar 파일로 압축하면 .so를 추출한 다음 사용하고 싶지 않습니다. 만약 파일을 jar 파일로 만든 다음 (jar) 내 프로젝트에 종속 파일로 추가하면 jni가 찾을 수 있도록 apso의 libs/jni 폴더에 .so가 자동으로 추가됩니다. 질문은 어떻게합니까? (가능한 경우)

+0

.so 파일과 Java 파일을 라이브러리에 추가 할 수 있어야한다고 생각합니다. 그러나 항아리에서 .so 파일을 사용하려면 장치의 위치에서 라이브러리로드까지 압축을 풀어야합니다. 아직 테스트하지는 않았지만 제대로 작동하는지 확인할 기회가 있으면 답변을 게시 할 것입니다. –

+0

이 https://www.adamheinrich.com/blog/2012/12/how-to-load-native-jni-library-from-jar/에 대해 이야기하고 있습니까? 나는 그것을하고 싶지 않다. 파일을 jar 파일로 만든 다음 프로젝트의 종속 파일로 추가 한 다음 jni가 찾을 수 있도록 .so를 libs에 자동으로 넣어야합니다. – Tejas

답변

1

다행히도 방법을 발견했습니다. .aar는 그 자체로 지정된 here과 같은 구조를 가진 간단한 zip 파일입니다. 내가 한 것은 모든 .class 파일 (적절한 패키지 폴더 내부)을 classes.jar로 만들고, 빈 폴더 "res"를 만들고, 모든 .so 파일을 적절한 아키텍처의 jni 폴더에 넣고 간단한 AndroidManifest를 만들었습니다. 기본 태그가 포함 된 xml 그런 다음 확장자 .aar (mylib.aar 등)로 파일을 jar 파일로 압축합니다. 다른 프로젝트의 libs 폴더에 .aar를 복사하고 응용 프로그램의 build.gradle (예 : compile(name:'mylib',ext:'aar'))에 종속성을 적용하여 테스트했습니다. 그리고 그것은 훌륭하게 작동합니다.

관련 문제