2015-02-03 3 views
2

NDK 빌드를 통해 다시 컴파일하지 않고 단순히 Android에서 새로운 공유 라이브러리를 삭제할 수없는 이유가 궁금합니다. Heres 내가하는 일 :Android NDK 및 새 공유 라이브러리 삭제

Android Studio와 Android NDK의 최신 버전을 사용하여 공유 라이브러리를 참조하는 C 코드를 사용하는 앱을 컴파일 할 수있었습니다. 공유 라이브러리를 다음과 같이 컴파일합니다.

GCC := /xxx/AndroidStudioProjects/android-ndk-r10d/toolchains/x86-4.6/prebuilt/windows/bin/i686-linux-android-gcc.exe 
GPP :=/xxx/AndroidStudioProjects/android-ndk-r10d/toolchains/x86-4.6/prebuilt/windows/bin/i686-linux-android-g++.exe 
AR := /xxx/AndroidStudioProjects/android-ndk-r10d/toolchains/x86-4.6/prebuilt/windows/bin/i686-linux-android-ar.exe 

OPTIONS :=\ 
-ffunction-sections \ 
-funwind-tables \ 
-DANDROID 

default: all 
all: obj 
    $(AR) r libmathadd.so mathadd.o 

obj: 
    $(GCC) $(OPTIONS) -c mathadd.c 

이렇게하면 .so 파일이 생깁니다. 지금 내 실행 Android.mk 메이크와 NDK를 빌드 :

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE   := mathadd 
LOCAL_SRC_FILES  :=./libmathadd.so 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_LDLIBS := -llog 
LOCAL_MODULE := ndk1 
LOCAL_SRC_FILES := native.c 
LOCAL_SHARED_LIBRARIES := mathadd 
include $(BUILD_SHARED_LIBRARY) 

이에 따라, 나는 .so 파일 내 ndk1을 내 mathadd .so를 난 다음 폴더 디렉토리에 배치하는 :

응용 프로그램 -> SRC -> jniLibs -> 86 -> libmathadd.so

응용 프로그램 -> SRC -> jniLibs -> 86 -> libndk1.so

내가 컴파일하고 내 에뮬레이터에서 실행

, 와 붐 이브 rything works!

지금 내 문제가 있습니다. 공유 라이브러리 소스 (mathadd.c)를 약간 수정합니다. 첫 번째 make 파일을 사용하여 다시 컴파일하고 응용 프로그램 트리에 그대로 놓습니다 (네이티브 C 코드를 다시 작성하지 않음). Studio에서 응용 프로그램을 다시 빌드하고 에뮬레이터에서 실행하고 수정 사항이 적용되지 않았 음을 확인합니다.

내 원시 소스 나 기본 라이브러리와 공유 라이브러리간에 API를 변경하지 않습니다.

ndk-build 스크립트로 네이티브를 다시 빌드하고 새 네이티브 ndk1을 드래그하면 새로운 modifcations를 포함하여 모든 것이 다시 작동합니다. 그것은 내가 공유 라이브러리를 조정할 때마다 ndk를 통해 소스를 재 구축해야 할 것 같습니다 ... ??

아이디어가 있으십니까?

업데이트 : RE 도구를 사용하여 libndk .so 라이브러리를 열었습니다. ndk 컴파일러가 로컬 공유 라이브러리로 나열되지만 libdk에 libmathadd 코드를 정적으로 추가합니다. 기본적으로 최적화가 가장 빠른 속도로 설정되고 libmathadd 코드가 단순한 수학이기 때문에 이것이 궁금합니다.

답변

-1

그래서 libndk1.so는 libmath.so에 종속됩니까? 그러면 libmath 소스를 만질 때 다시 빌드하는 것이 논리적 일 것입니다.

+0

예, libndk1.so는 libmathadd.so에 종속됩니다. 특히 libmathadd의 도우미 함수를 사용합니다. 그러나 필자는 헬퍼 함수 코드가 libndk1에 정적으로 컴파일되지 않았기 때문에 함수 헤더가 변경되지 않는 한 항상 공유 라이브러리가 수정 될 때 원본을 다시 작성할 필요가 없다는 인상하에있었습니다. – Stevecode

관련 문제