서적에 관한 질문 및 오류 등을 문의 할 수 있으며, 저자로부터 직접 답변을 받을 수 있습니다.
안드로이드 소스를 컴파일 해서
libcrypto.so, libssl.so 을 이용해서
testssl.so 를 만들었습니다.
그리고 안드로이드 프로젝트를 만들고 libs 폴더안에 복사하였습니다.
애뮬레이터로 빌드하고 실행 하면 아래와 같은 에러가 발생합니다.
Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/test/tcp/socket;
...
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libcrypto: findLibrary returned null
로드 중 에러 입니다.
뭐가 문제인지 확인 좀 부탁드립니다.
감사합니다.
제가 적용한 방법을 설명 드리겠습니다. 어느 부분이 잘 못되었는지 체크 해 주시면 감사하겠습니다.
우분투에서 안드로이드 전체 소스를 ndk-build 하면 openssl에 관련파일 libcrypto.so, libssl.so 이렇게 2가지 파일이
생성됩니다. 아래와같은 방법으로 적용 합니다.
1. 같은 이을의 프로젝트를 두개 생성
2. 첫번째 프로젝트에 libcrypto.so, libssl.so 두 파일을 libs 폴더에 넣는다.
3. 실제 적용 할 프로젝트에 맞게 중간 역할을 할 so 파일을 만들기 위해 JNI 폴더안에 *.c 파일 및 Android.mk 를 생성
4. ndk-build 해서 libtestssl.so 생성
5. 또 다른 같은 이름을 가진 실제 프로젝트에 libs 폴더를 생성하고 libcrypto.so, libssl.so, libtestssl.so 넣는다.
6. static{
System.loadLibrary("libcrypto.so");
System.loadLibrary("libssl.so");
System.loadLibrary("libtestssl.so");
}
기타 필요한 코드를 작성
7. 이렇게 해서 빌드를 하면 System.loadLibrary("libcrypto.so"); 여기서 부터 에러가 발생 합니다.
답변 감사 드립니다.
생각보다 어렵군요 ㅜㅜ
글로 설명하기가 힘들어서요 테스트 중인 소스 코드를 첨부해 드립니다.
android full source build 환경
: 우분투 12, jdk6, eclipse juno, ndk 8
방법 설명:
1. 우분투에서 android full source를 책에 있는 방법대로 전체 빌드함.
2. 빌드 후 생성된 libcypto.so, libssl.so를 윈도우로 옮겨 프로젝트에 적용 함.
첨부한 프로젝트에서 테스트 중입니다.
Android.mk 파일에 libssl.so, libcrypto.so를 지정 해 두었고
"com_test_ssl_mySSL.c" 파일에 include "penssl/ssl.h" 적용 했는데요
ndk-build 하면 ssl관련 함수를 못 찾아서 에러가 납니다.
그리고 ssl 관련 함수를 일단 모두 주석 처리하고 ndk-build해서
libmySSL.so를 만들어서 프로젝트에 로드해서 실행하면 에러가 납니다.
에러 내용을 "ndk_log.txt" 파일로 만들어 두었습니다.
행복한 주말 보내세요*^^*
hellojni 프로젝트를 하나 만들어서 .so를 만들고 이 놈을 새로 만든 프로젝트 testndk에 적용해보니
위와 같은에러가 발생합니다.
그래서 hellojni와 같은 package 이름으로 변경 후 테스트를 하니 정상적으로 잘 되는군요
그렇다면 android full source 중에서 openssl 만 가저다 쓰고 싶은데 어떻게 빌드를 해야 하는건지요?
같은 이름의 프로젝트를 만들고 그 곳에 JNI 폴더에 openssl 을 옮겨 놓고 ndk build를 해야 하는지요?