본문 바로가기

Programming/Linux_Platform

[linux platform] LD_PRELOAD 를 이용한 android 에서의 library 교체

library 를 수정하는 개발을 할때,

매번 package 로 묶어서 전체 이미지를 다운로드 하는것은 많은 시간을 소모하게 한다.


아래 방법을 사용하면, 내가 build 한 library 만 바꾸면서

system reboot 이나 전체 image download 없이 디버깅을 할때 아주 유용한 방법이다.


adb shell 에서 다음과 같이 입력하면,

원래 설치되어 있는 library 파일이 아닌, 내가 지정한 library 파일을 load 해서 실행된다.



- LD_PRELOAD 의 입력방법

1. 모든 프로그램이 내가 만든 library 를 사용하기 원할때..

LD_PRELOAD = "preload 되기 원하는 so 파일 경로"


2. 특정 프로그램만 내가 만든 library 를 사용하기 원할때..

LD_PRELOAD = "preload 되기 원하는 so 파일 경로" "해당so파일을 로그해서 실행될 명령어나 실행파일 경로"


< android 에서 실행방법 >


1. 만들어진 os 파일을 adb push 로 폰에 다운로드

adb push ./libsqlite.so /data/local/tmp/


2. LD_PRELOAD 환경변수 입력

export LD_PRELOAD=/data/local/tmp/libsqlite.so

이렇게 입력하면, 이후에 libsqlite.so 를 load 하는 모든 프로그램들은 저 경로의 libsqlite.so 를 먼저 찾게 된다.


- 다른 방법

1. 만들어진 os 파일을 adb push 로 폰에 다운로드

adb push ./libsqlite.so /data/local/tmp/


2. LD_PRELOAD 환경변수 입력

LD_PRELOAD=/data/local/tmp/libsqlite.so sqlite3 --version

sqlite3 라는 프로그램이 실행될때 /data/local/tmp/libsqlite.so 를 기반으로 실행 된다.