현재 A 액티비티에서 System.Load를 해서 사용하는데 있어서는 문제가 없습니다.
근데 A 액티비티에서 B 액티비티를 StartActivity로 실행하고 B 액티비티에서 해당 jni 라이브러리를 사용하는 방법을 모르겠습니다.
B액티비티에서 System.Load 하지 않고 DexClassLoader 로 가져온 Class<?> 의 Method를 실행하면 "no implementation found for native" 이 뜹니다.
그래서 다음번엔 System.Load를 해봤는데 UnsatisfiedLinkError 가 뜹니다.
혹시 A액티비티에서 DexClassLoader 로 불러온 Class<?> 객체나 Method를 B 액티비티로 넘기는 방법이 있는지요?
아니면 다른 방법이 있는지...
조언 부탁드려요. ㅡㅜ
.so 파일에 c , c++ 함수들이 있을겁니다. 이때 명명규칙에 의해서 A.class 와 맵핑 된 펑션이 있을거고요..
이게 전부입니다.
so파일을 언제 로딩했느냐의 차이이지 이걸 A 액티비티에서 로딩하나 , B 액티비티에서 로딩하나 상관이 없습니다.
사용하는 시점에 의해서.. 즉 호출되기전에 로딩만 되어 있으면 되는거죠..
따라서 so 파일에 A , B 액티비티에서 사용될 모든 메소드-펑션을 맵핑 해 놓던가
아니면 a.so , b.so 이렇게 두개로 분기 하되 메소드-펑션 맵핑을 해 놓던가 편하실대로 하시면 됩니다.
동적로딩에 대해서 검색해 보시면 좀더 구체적으로 애히 할 수 있으리라 생각되네요 ㅎㅎ
같은걸 로딩하면 문제 될꺼고..
A 액티비티에서 a.so 파일을 로딩하고 B 액티비티에서 a.so 파일을 로딩하면 당연히 에러가 발생되겠지요
A액티비티에서 a.so 파일을 로딩하고 B 액티비티에서 b.so 파일을 로딩하면 되고요..
아니면 A 액티비티가 B 액티비티보다 오래 살아 있다면 A액티비티에서 a.so파일을 로딩하고
a.so 파일안에 B 액티비티에서 사용될 수 있는 메소드들도 펑션을 네이밍규칙에 의해서
연결해 놓아도 잘 됩니다
네이밍 규칙이 귀찮으시다면 jni_onload 방식으로 레지스터에 맵핑해도 되고요




공통 클래스를 하나 만들어놓고 그 클래스에서 System.load를 해서 jni를 로드시키면
여러 엑티비티에서 접근이 가능하지 않을까요?