2010-04-27 2 views
15

코드 서명과 관련하여 documentation 코드를 읽을 수 있습니다. "동일한 인증서로 서명 기반 권한 검사를 사용하여 여러 응용 프로그램에 서명하면 코드를 공유 할 수 있습니다. 및 데이터를 안전하게 저장하십시오. "Android : 동일한 인증서로 서명 된 프로젝트간에 코드를 공유하는 방법

정확하게 이러한 코드 공유를 수행 할 수있는 방법은 무엇입니까? 메인 애플리케이션과 여러 개의 교환 가능한 플러그인을 릴리스 한 다음 런타임에 발견 할 수 있습니까? 소스 코드는 어떻게 보이며 다른 APK 패키지와의 "표준"의도 호출에 대한 장점은 무엇입니까?

답변

9

Context.createPackageContext()를 사용하면 관심있는 다른 .apk에 대한 패키지를 인스턴스화 할 수 있습니다. 사용자가 동일한 cert로 서명하고 동일한 공유 사용자 ID를 사용하는 경우 플래그를 사용하여 프로세스에 코드를로드하여 컨텍스트에서 ClassLoader를 가져와 원하는 클래스를 인스턴스화 할 수 있습니다.

그렇지 않으면 동일한 공유 된 ID를 사용하여 명시 적으로 서명되지 않은 경우 해당 리소스 만로드 할 수 있습니다.

응용 프로그램이 출시되면 응용 프로그램의 공유 사용자 ID를 변경할 수 없으므로 (다른 사용자에게 공유 된 사용자 ID가 있거나없는 상태로 이동하는 것은 불가능 함) 유의하십시오.

+0

상세 정보 : http://developer.android.com/intl/de/guide/topics/security/security.html#userid 및 http://developer.android.com 다음 코드를 사용하여 /intl/de/guide/topics/manifest/manifest-element.html – tomash

2

동적으로로드되는 클래스의 공용 함수를 호출한다고 가정 해 보겠습니다.

Context friendContext = this.createPackageContext("packageName", Context.CONTEXT_INCLUDE_CODE); 
Class friendClass = friendContext.getClassLoader().loadClass("packageName.className"); 
Class noparams[] = {}; //say the function (functionName) required no inputs 
friendClass.getMethod("functionName", noparams).invoke(friendClass.newInstance(), null);