본문 바로가기

개발 관련 지식/안드로이드(Android)

[안드로이드] Linphone 오픈소스 컴파일 시도~!

* Linphone 오픈소스 컴파일 준비

: Linphone 오픈 소스를 다운 받았다면, 이제 이 오픈소스를 컴파일해보자~!!

 

컴파일을 하기 전에 먼저 필요한 것이 있다.

 

1. 시그윈(Cygwin)

2. Android sdk(at least API 16 이상)

3. Android ndk(>=r8b)

4. Autotools(autoconf, automake, aclocal, libtoolize, pkgconfig)

 

[참고]

1. 시그윈 설치는 UTILL 관련 지식에서 설치 방법을 참고하면 된다.

2. Android sdk는 http://developer.android.com/sdk/index.html 접속하여 sdk를 다운 받는다.

(http://developer.android.com/intl/ko/sdk/exploring.html)

3. Android ndk 역시 2번의 사이트에 접속하여 ndk를 다운 받는다.

(http://developer.android.com/intl/ko/tools/sdk/ndk/index.html)

4. Autotools 는 아래의 정보들을 이용해 다운 받아 설치한다.

sudo apt-get install autoconf

sudo apt-get install automake

sudo apt-get install m4

sudo apt-get install libtool

sudo apt-get install pkg-config

 

 autoconf

 root@wl ~ # wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
 root@wl ~ # tar xvfz autoconf-2.69.tar.gz
 root@wl ~ # cd autoconf-2.69
 root@wl ~/autoconf-2.69 # ./configure
 root@wl ~/autoconf-2.69 # make
 root@wl ~/autoconf-2.69 # make install

 pkt-config

 http://pkgconfig.freedesktop.org/releases/

 automake

 root@wl ~ # wget http://ftp.gnu.org/gnu/automake/automake-1.13.3.tar.gz
 root@wl ~ # tar xvfz automake-1.13.3.tar.gz
 root@wl ~ # cd automake-1.13.3
 root@wl ~/automake-1.13.3 # ./configure
 root@wl ~/automake-1.13.3 # make
 root@wl ~/automake-1.13.3 # make install

 libtool

 root@wl ~ # wget http://ftpmirror.gnu.org/libtool/libtool-2.4.2.tar.gz
 root@wl ~ # tar xvfz libtool-2.4.2.tar.gz
 root@wl ~ # cd libtool-2.4.2
 root@wl ~/libtool-2.4.2 # ./configure
 root@wl ~/libtool-2.4.2 # LANG=C make 1)
 root@wl ~/libtool-2.4.2 # LANG=C make install

 M4

 ※ 소스 설치
 # wget http://ftp.gnu.org/gnu/m4/m4-1.4.17.tar.bz2
 # tar xvfj m4-1.4.17.tar.bz2
 # cd m4-1.4.17
 # ./configure
 # make
 # make install

 ※ 패키지 설치(솔라리스 11이상)
 # pkg install gnu-m4
 # gm4 --version
 m4 (GNU M4) 1.4.12

 

[참고 사이트] http://www.solanara.net/solanara/autotools#head_autotools_inst_autoconf

 

* Linphone 오픈소스 컴파일 과정

 

1. 일단 Eclipse를 통해 다운받은 오픈소스를 import하여 보기 편하게 정리한다.

 

 

2. import를 하고 나면 서브모듈 디렉토리가 빨간색으로 경고 표시가 뜰것이다.

이는 package org.linphone.mediastream.video.capture.hwconf 에 Hacks.java 파일을 찾을 수 없다는 경고 문구인데, 이는 Hacks.jav로 파일명이 잘못 되어 있기 때문이다. 이를 Hacks.java로 변경해주면 경고 문구가 사라지는 것을 확인할 수 있다.

=> 최신 버전의 오픈 소스를 받으니 해당 오류가 해결되어 있었다~!!(13-11-13 download)

 

 

3. 소스 디렉토리에도 빨간 경고창을 확인할 수 있는데 이 부분은 간단히 주석처리로 막아버렸다.

(org.linphone/LinphoneManager.java 파일 내에 R.raw.rootca 를 찾을 수 없기 때문인듯..?)

 

 

4. 해당 오픈소스에 root 디렉토리에 존재하는 README 파일을 확인해보면 컴파일 하기 위한 방법에 대해 영어로 친절히(?) 적혀있다.

 To build liblinphone for Android, you must:
0) download the Android sdk with platform-tools and tools updated to latest revision (at least API 16 is needed), then add both 'tools' and 'platform-tools' folders in your path.
1) download the Android ndk (>=r9) from google and add it to your path.
2) install yasm, curl, ant and the autotools: autoconf, automake, aclocal, libtoolize, pkgconfig
On 64 bits linux systems you'll need the ia32-libs package
3) run the Makefile script in the top level directory. This will download iLBC source files and convert some assembly files in VP8 project.
$ make
4) To install the generated apk into a plugged device, run
$ make install
5) (Optional) To generate a liblinphone SDK zip containing a full jar and native libraries, run
$ make linphone-sdk
6) (Optional) To generate a libmediastreamer2 SDK zip containing a full jar and native libraries, run
$ make mediastreamer2-sdk 

 

5. 위의 README 파일을 읽어보면, 컴파일에 필요한 sdk, ndk, autotools를 설치하라는 말과 함께 path를 잡아주라고 적혀있다. 일단, ndk, sdk, sdk-tools path를 잡아주면 된다.

 

 

6. 이 상태로 바로 make 명령어를 딱 실행해 보니, ./check_tools.sh에서 막힌다. 첫번째 난관은 check_tools.sh 에 난 오류를 잡는 것으로 시작해본다.

=> check_tools.sh 파일 내에서 android 를 찾을 수 없다고 나오게 된다. 이를 android.bat 파일로 변경해주면 잘되는것을 확인할 수 있다. android 부분은 check_tools.sh 뿐만 아니라 Makefile 파일 내에도 변경해주어야 한다.

(check_tools.sh / Makefile : android -> android.bat)

 

 

7. 이번 linphone 오픈 소스 컴파일에서 비디오 부분은 제외하고 컴파일 할 것이기 때문에 비디오 관련 부분은 모두 주석 처리한다.

 

 

8. 두번째로 막힌 부분은 libilbc-rfc3951 컴파일 과정에 생긴 에러~!

 * configure: creating ./config.status
.in'ig.status: error: cannot find input file: `
Makefile:61: recipe for target '/cygdrive/d/Android/linphone-android/submodules/libilbc-rfc3951/Makefile' failed
make: *** [/cygdrive/d/Android/linphone-android/submodules/libilbc-rfc3951/Makefile] Error 1
-> cd submodules/libilbc-rfc3951
-> dos2unix configure.ac
-> dos2unix Makefile.am
-> tr -d "\15\32" < configure > configure.new
-> ./configure.new
-> cd ../..

위와 같은 방법으로 명령어를 써주면 해결~!

해당 에러가 생긴 원인은 configure.ac 와 Makefile.am 파일의 속성의 문제로 보인다.

 

 

[참고] autogen.sh 에 대한 에러가 발생하게 되는데, 이는 dos2unix autogen.sh 로 변환해주면 정상적으로 configure를 할 수 있다.

 

 

9. 세번째로 막힌 부분 역시 rfc3951 부분으로 checksum 하는 과정에서 문제가 발생했다.

* cd .; /usr/bin/md5sum -c ./known_checksums/rfc3951.txt.md5
: No such file or directoryt
: 열기 또는 읽기 실패
/usr/bin/md5sum: WARNING: 1 listed file could not be read
Makefile:449: recipe for target 'rfc3951.txt.check' failed
make[1]: *** [rfc3951.txt.check] Error 1
make[1]: Leaving directory '/cygdrive/d/Android/linphone-android/submodules/libilbc-rfc3951/downloads'
iLBC prepare stage failed
Makefile:65: recipe for target '/cygdrive/d/Android/linphone-android/submodules/libilbc-rfc3951/src/iLBC_decode.c' failed
make: *** [/cygdrive/d/Android/linphone-android/submodules/libilbc-rfc3951/src/iLBC_decode.c] Error 1
-> cd submodules/libilbc-rfc3951/downloads
-> touch extract-cfile.awk.check
-> touch rfc3951.txt.check
-> cd ../../..

 해당 에러는 file check를 하는 부분에서 파일이 존재하는지 여부를 넘겨주기 위해 파일을 만들어주는 방식으로 해결했다.

 

 

10. 네번째로는 libvpx 부분을 주석처리하면서 넘어갔다.

해당 부분은 비디오 모듈에 관련된 부분으로 보인다. prepare-vpx 부분까지 주석처리를 하면서 prepare-sources 의 Build targets 에서 prepare-vpx 부분을 제거해 준다.

 

 

11. 다섯번째로는 SILK 부분에서 막혔다. 해당 부분 역시 8번의 rfc3951과 같은 원인으로 보인다.

 * configure: creating ./config.status
.in'ig.status: error: cannot find input file: `
Makefile:85: recipe for target `/cygdrive/c/eclipse/workspace/linphone-android/submodules/mssilk/Makefile' failed
make: *** [/cygdrive/c/eclipse/workspace/linphone-android/submodules/mssilk/Makefile] Error 1
-> cd submodules/mssilk
-> dos2unix configure.ac
-> dos2unix Makefile.am
-> tr -d "\15\32" < configure > configure.new
-> ./configure.new
-> cd ../..

 위와 같이 해결하면 된다.

 

 

12. 위의 부분을 확인해 보니 mediastreamer 와 관련된 것을 보니 비디오 관련 모듈인 듯 싶다. 해당 부분도 과감히 주석처리~!!

해당 부분은 prepare-silk 부분으로 주석처리를 하면서 10번과 같이 prepare-sources 의 Build targets 에서 prepare-silk 부분을 제거해 준다.

=> 해당 부분은 사용하는 것으로 보여져서 다시 주석을 제거~!!

 

 

13. 이번에 막힌 부분은 시그윈 패키지를 모두 설치하지 않은 죄로 걸렸다. LWP를 사용할 수 없어 다운로드를 하지 못해 발생한 문제였다. 이럴때는 역시 사뿐히 다시 시그윈을 패키지 업그레이드를 해준다.

 Downloading 'certdata.txt' ...
Unable to download latest data: 501 - Protocol scheme 'https' is not supported (LWP::Protocol::https not installed)
Makefile:142: recipe for target `/cygdrive/c/eclipse/workspace/linphone-android/res/raw/rootca.pem' failed
make: *** [/cygdrive/c/eclipse/workspace/linphone-android/res/raw/rootca.pem] Error 1

 위의 문제를 보고 해당 Make파일에 가보니 rootca.pem에 관련된 내용이었다. 이 부분도 과감히 주석처리하고, prepare-sources 에서도 제거해준다.

 

 

14. 이번에는 curl 명령어를 찾을 수 없다는 에러 문구가 나왔다.

 curl -sO http://www.sqlite.org/2013/sqlite-amalgamation-3071700.zip
make: curl: 명령을 찾지 못했음
Makefile:160: recipe for target 'sqlite-amalgamation-3071700.zip' failed
make: *** [sqlite-amalgamation-3071700.zip] Error 127

 

 curl 명령어가 뭔지 알아보고, curl 명령어를 사용하기 위해 설치 방법에 대해 알아보자.

 

 [참고] curl 이란 명령행 기반 웹 요청 도구로써, 특시 REST 애플리케이션을 개발 테스트 시에 유용하게 사용할 수 있다고 한다. 홈페이지 주소는 http://curl.haxx.se/ 으로 GUI 기반으로 REST 애플리케이션 테스트를 해보고자 한다면 http://rest-client.googlecode.com/ 으로 확인하면 된다.

 

1. curl 명령어를 사용하기 위해 wget 명령어를 통해 다운로드하여 설치해보자.

다운로드 주소 : wget http://curl.haxx.se/download/curl-7.29.0.tar.gz

2. 다운 받은 tar 파일을 풀어준다.

tar xvf <파일명>

3. curl 디렉토리로 이동하여 ./configure를 실행해준다.

4. make 명령어를 실행해준다.

5. make install 명령어를 실행해준다.

6. curl 버전을 확인한다.

curl --version

7. 재부팅(?) 할 필요가 있는지는 잘 모르겠다.

 

15. 이번에도 curl 명령어처럼 ant 명령어를 찾을 수 없다는 에러 문구가 나왔다.

 ant javah
make: ant: 명령을 찾지 못했음
Makefile:179: recipe for target 'javah' failed
make: *** [javah] Error 127

 

 

ant 명령어가 뭔지 알아보고, ant 명령어를 사용하기 위해 설치 방법에 대해 알아보자.

 

 [참고] ant 란 자카르타 프로젝트에서 개발되어져 있는 프로그램 소스의 빌드 툴이다. 빌드 툴은, make명령과 같은 툴을 가르킨다. ant는 make 커맨드와는 달리 자바에서 작성되어져 있다. (make는 C언어) 같게 자카르타 프로젝트에서 개발되어 있는 서블릿 엔진의 톰캣에서, ant는 빌드 툴의 역할을 하고 있다. 톰캣의 소스로부터 빌드한 사람들은 ant를 사용하고 있다.

홈페이지는 http://ant.apache.org 으로 이곳에서 다운 받아 설치 할 수 있다.

 

1. ant 명령어를 사용하기 위해 wget 명령어를 통해 다운받거나 홈페이지에 접속하여 다운받자.

다운로드 주소: wget http://apache.mirror.cdnetworks.com//ant/binaries/apache-ant-1.9.2-bin.tar.gz

2. 다운 받은 tar 파일을 풀어준다.

3. ant 폴더를 적당한 위치에 가져다 놓고 Path를 잡아준다.

ex) ANT_HOME: C\Android\apache-ant-1.9.2

Path : C\Android\apache-ant-1.9.2\bin

4. 설치를 확인한다.

ant -version

 

 16. 이번에는 ndk-build 를 하다가 에러가 난 것으로 보여진다.

 make[1]: *** No rule to make target 'jni/..//submodules/belle-sip/build/android/../../src/belle_sip_messageLexer.c', needed by 'obj/local/armeabi-v7a/objs/bellesip/belle_sip_messageLexer.o'. 멈춤.
make[1]: *** 끝나지 않은 작업을 기다리고 있습니다....
Compile thumb : bellesip <= belle_sdp_impl.c
Compile thumb : bellesip <= belle_sip_headers_impl.c
jni/..//submodules/belle-sip/build/android/../../src/belle_sip_headers_impl.c:26:37: fatal error: belle_sip_messageParser.h: No such file or directory
compilation terminated.
jni/..//submodules/belle-sip/build/android/../../src/belle_sdp_impl.c:19:29: fatal error: belle_sdpParser.h: No such file or directory
compilation terminated.
/cygdrive/c/Android/android-ndk-r9/build/core/build-binary.mk:345: recipe for target 'obj/local/armeabi-v7a/objs/bellesip/belle_sip_headers_impl.o' failed
make[1]: *** [obj/local/armeabi-v7a/objs/bellesip/belle_sip_headers_impl.o] Error 1
/cygdrive/c/Android/android-ndk-r9/build/core/build-binary.mk:345: recipe for target 'obj/local/armeabi-v7a/objs/bellesip/belle_sdp_impl.o' failed
make[1]: *** [obj/local/armeabi-v7a/objs/bellesip/belle_sdp_impl.o] Error 1
make[1]: Leaving directory '/cygdrive/c/eclipse/workspace/linphone-android'
Makefile:169: recipe for target 'generate-libs' failed
make: *** [generate-libs] Error 2

 

12번 부분을 다시 주석을 풀어주었다. 다시 make를 해보니 이번에는 다른 에러가 또 뜬다.

 configure.new: error: Package requirements (mediastreamer >= 2.0.0) were not met:

No package 'mediastreamer' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables MEDIASTREAMER_CFLAGS
and MEDIASTREAMER_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

 

=> 이런 썩을.. 이 부분은 내가 임의로 pkg-config 를 2.8 버전(2013년 최신 버전)으로 받아 설치한 죄로 발생한 문제였다. 다시 2.3 버전을 다운 받아 다운그레이드 한 후 처음부터 시도해보니 잘 넘어간다!

먼저, configure.ac 에서 PKG_CHECK_MODULES(MEDIASTREAMER, mediastreamer >= 2.0.0) 부분을 주석처리 하고 ./autogen.sh 을 다시 실행하여 configure 파일을 생성해 준다.

 

 [참고] pkg-config 다운 받기 위한 사이트 : http://www.freedesktop.org/wiki/Software/pkg-config/

해당 사이트에 들어가서 releases 를 받으면 되는데 linphone 컴파일 시에는 굳이 받을 필요 없다. 받으면 나처럼 개고생한다. 시키지 않은 건 굳이 해서 사서 고생하지 말자..ㅠㅠ

 

16. 이번에는 check 하는 파일이 존재하지 않아서 발생한 것으로 보인다 이 부분 역시 touch로 파일을 만들어주자.

 cd .; /usr/bin/md5sum -c ./known_checksums/SILK_SDK_SRC_v1.0.9.zip.md5
: No such file or directoryRC_v1.0.9.zip
: 열기 또는 읽기 실패ip
/usr/bin/md5sum: WARNING: 1 listed file could not be read
Makefile:451: recipe for target 'SILK_SDK_SRC_v1.0.9.zip.check' failed
make[1]: *** [SILK_SDK_SRC_v1.0.9.zip.check] Error 1
make[1]: Leaving directory '/cygdrive/c/eclipse/workspace/linphone-android/submodules/mssilk/sdk'
SILK audio plugin prepare state failed.
Makefile:95: recipe for target '/cygdrive/c/eclipse/workspace/linphone-android/submodules/mssilk/sdk/SILK_SDK_SRC_v1.0.8/SILK_SDK_SRC_ARM_v1.0.8/src/SKP_Silk_resampler.c' failed
make: *** [/cygdrive/c/eclipse/workspace/linphone-android/submodules/mssilk/sdk/SILK_SDK_SRC_v1.0.8/SILK_SDK_SRC_ARM_v1.0.8/src/SKP_Silk_resampler.c] Error 1

-> cd submodules/mssilk/sdk
-> touch SILK_SDK_SRC_v1.0.9.zip.check
-> cd ../../..

 

17. 이건 무슨 문제인지 고민하면서 /bin/sh 로 이동했다가 다시 가서 혹시나 해서 make를 해봤는데 그냥 넘어간다.. 이건 무슨 시츄에이션..?? 어찌됐건 넘어갔으니 추후 문제가 되면 다시 한번 확인해보자~!!

 out.pcm
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/output/testvector_output_44100_Hz_20_ms_7_kbps.pcm
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/output/testvector_output_8_kHz_20_ms_20_kbps_10_loss_FEC.pcm
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/output/testvector_output_8_kHz_40_ms_12_kbps.pcm
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/output/testvector_output_8_kHz_60_ms_8_kbps.pcm
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/output/testvector_output_8_kHz_60_ms_8_kbps_12_kHz_out.pcm
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/output/testvector_output_8_kHz_60_ms_8_kbps_16_kHz_out.pcm
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/output/testvector_output_8_kHz_60_ms_8_kbps_8_kHz_out.pcm
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/test_decoder.bat
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/test_decoder.sh
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/test_encoder.bat
inflating: SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9/test_vectors/test_encoder.sh

cd SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9 && /usr/bin/patch -p0 < patch_pic.diff
/bin/sh: patch_pic.diff: Permission denied
Makefile:459: recipe for target 'SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9' failed
make[1]: *** [SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_FIX_v1.0.9] Error 1
make[1]: Leaving directory '/cygdrive/c/eclipse/workspace/linphone-android/submodules/mssilk/sdk'
SILK audio plugin prepare state failed.
Makefile:95: recipe for target '/cygdrive/c/eclipse/workspace/linphone-android/submodules/mssilk/sdk/SILK_SDK_SRC_v1.0.8/SILK_SDK_SRC_ARM_v1.0.8/src/SKP_Silk_resampler.c' failed
make: *** [/cygdrive/c/eclipse/workspace/linphone-android/submodules/mssilk/sdk/SILK_SDK_SRC_v1.0.8/SILK_SDK_SRC_ARM_v1.0.8/src/SKP_Silk_resampler.c] Error 1

 

18. 이건 무슨 에러인지 잘 모르겠지만 jni 의 ndk-build를 하다가 문제가 된것 같기는 하다.

 Cygwin : Generating dependency file converter script
make[1]: *** No rule to make target 'jni/..//submodules/belle-sip/build/android/../../src/belle_sip_messageLexer.c', needed by 'obj/local/armeabi-v7a/objs/bellesip/belle_sip_messageLexer.o'. 멈춤.
make[1]: *** 끝나지 않은 작업을 기다리고 있습니다....
make[1]: Leaving directory '/cygdrive/c/eclipse/workspace/linphone-android'
Makefile:174: recipe for target 'generate-libs' failed
make: *** [generate-libs] Error 2

 

=> 일단 내가 변경해본 것은 Appilcation.mk 에서 sqlite 앞에 BUILD_SQLITE = 0 을 추가해준 것과

android.mk 파일에서 BUILD_X264=0, LINPHONE_VIDEO=0 이다

 

19. 그랬더니 역시나 해결되지는 않았다..

 /cygdrive/c/Android/android-ndk-r9/build/core/build-binary.mk:345: recipe for target 'obj/local/armeabi-v7a/objs/bellesip/belle_sip_headers_impl.o' failed
make[1]: *** [obj/local/armeabi-v7a/objs/bellesip/belle_sip_headers_impl.o] Error 1
make[1]: *** 끝나지 않은 작업을 기다리고 있습니다....
/cygdrive/c/Android/android-ndk-r9/build/core/build-binary.mk:345: recipe for target 'obj/local/armeabi-v7a/objs/bellesip/belle_sdp_impl.o' failed
make[1]: *** [obj/local/armeabi-v7a/objs/bellesip/belle_sdp_impl.o] Error 1
make[1]: Leaving directory '/cygdrive/c/eclipse/workspace/linphone-android'
Makefile:174: recipe for target 'generate-libs' failed
make: *** [generate-libs] Error 2

 

20. 다시 초심으로 돌아가 처음부터 다시 컴파일을 시도해본다.

 + aclocal
cygwin warning:
MS-DOS style path detected: \oracle\product\10.2.0\db_1\perl\5.8.3\lib\MSWin32-x86;D/5.14.2/cygwin-thread-multi-64int
Preferred POSIX equivalent is: /cygdrive/c/oracle/product/10.2.0/db_1/perl/5.8.3/lib/MSWin32-x86;D/5.14.2/cygwin-thread-multi-64int
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames

 그러던 중 위와 같은 메시지를 확인하게 된다. 이건 뭘까..?

구글링으로 찾아보니 cygwin에서 잘못된 MS-DOS용 PATH 표기법이 사용되서 WARNING이 난 것이라네.. 굳이 해결하지 않아도 되지만 깔끔한 컴파일을 위해 해결 방법을 UTILL 관련 지식 메뉴에 올려두었다.

 

 

21. 마지막으로 문제가 된 부분은 jni 폴더에 존재하는 Android.mk 파일과 Application.mk 파일의 차이점 때문이었다. 내가 덮어씌운 폴더 및 파일은 총 3개(jni 폴더 / belle-sip 폴더 / Makefile 파일)이다.

해당 파일들의 차이점에 대해 알아봐야겠다..

 

 

먼저, Makefile 에서 어떤 것들이 변경되었는지 확인해보자.

 <Makefile>

BUILD_UPNP=1
BUILD_REMOTE_PROVISIONING=1
BUILD_AMRNB=full # 0, light or full
BUILD_WEBRTC_AECM=1
BUILD_FOR_X86=1
LINPHONE_VIDEO=1
BUILD_TLS=1
BUILD_SQLITE=1

=> 위의 값들을 모두 0으로 변경!

 

 

#libvpx
LIBVPX_SRC_DIR=$(TOPDIR)/submodules/externals/libvpx
$(LIBVPX_SRC_DIR)/vp8/common/asm_com_offsets.c.S:
cd $(LIBVPX_SRC_DIR) && \
./configure --target=armv7-android-gcc --sdk-path=$(NDK_PATH) --enable-error-concealment && \
make asm_com_offsets.asm \
|| ( echo "VP8 prepare stage failed." ; exit 1 )
prepare-vpx: $(LIBVPX_SRC_DIR)/vp8/common/asm_com_offsets.c.S

=> 위의 값들을 모두 주석처리!

 

 

$(TOPDIR)/res/raw/rootca.pem:
HTTPS_CA_DIR=$(HTTPS_CA_DIR) $(TOPDIR)/submodules/linphone/scripts/mk-ca-bundle.pl $@

=> 위의 값들을 모두 주석처리!

 

 

prepare-sources: prepare-ffmpeg prepare-ilbc prepare-vpx prepare-silk prepare-srtp prepare-mediastreamer2 prepare-antlr3 prepare-belle-sip $(TOPDIR)/res/raw/rootca.pem prepare-sqlite3

=> prepare-sources: prepare-ffmpeg prepare-ilbc prepare-silk prepare-srtp prepare-mediastreamer2 prepare-antlr3 prepare-sqlite3 변경!

 

다음으로는 jni 폴더에 존재하는 Android.mk 파일과 Application.mk 파일을 확인해보자.

 

혹시 다른 문제가 발생할 경우 아래 사이트에서 해결방법을 찾아보는 것도 좋을 것 같다.

[참고 사이트] http://boonyboony.tistory.com/entry/5-Adnroid-Linphone-NDK-빌드-해보기-2