2017-10-21 28 views
-2

기본 기능이있는 "컨테이너"앱을 만들어야합니다.앱용 별도의 Apk에서 플러그인/추가 기능/확장 기능 만들기

"컨테이너"응용 프로그램에는 NavigationView (항목이 설치된 플러그인을 기반으로 동적으로 추가됨) 및 FrameLayout이 있습니다.

별도의 apk에서 내 앱과 함께 내 기능으로 기능을 추가하는 플러그인을 만들어야합니다.

문제는 : 플러그인으로 뷰를 사용하여 조각을 만들고 컨텍스트 앱의 FrameLayout으로 이동시키는 방법입니다.

여기

enter image description here

enter image description here

사람이 어떤 예제 코드가 있습니까 더 나은 상황을 설명 두 이미지입니까? 튜토리얼에 링크 하시겠습니까? 어떻게 할 수 있습니까?

나는이 통과 할 수 없습니다, 프로세스 간의 통신을 위해 AIDL을 만들 수 있지만 원시 데이터를 전달하기 위해 노력 : 객체, 자원, 이미지 등

+0

원하는 것은 일반적으로 안전한 방식으로 수행 할 수 없습니다. 플러그인 위젯이'AppWidgetManager'를 통해 홈 스크린에'RemoteViews'를 제공하는 방식으로, 플러그인이 "컨테이너"앱에'RemoteViews '를 제공하게하는 것은 환영합니다. – CommonsWare

답변

0

그것은 당신을 필요로 두 가지가 가능하다 apk : dex 코드 & 리소스를로드하려고합니다.

dex 코드가있는 경우 현재 컨텍스트의 기본 ClassLoader를 수정하면됩니다. 각 플러그인에 대해 분리 된 ClassLoader를 추가하여 컨텍스트의 ClassLoader에 넣고 컨텍스트의 ClassLoader의 findClass 메서드를 수정하고 플러그인의 ClassLoader에서 클래스를 찾은 다음 기존 ClassLoader 방법으로 폴백해야합니다. PathClassLoader가 트릭을 수행 할 것이라고 생각합니다. 당신이해야 할 일은 플러그인의 파일 경로를 통과시키는 것입니다.

리소스가있는 경우 리소스 클래스에서 이전 AssetManager를 가져 와서 리플렉션을 통해 addAssetPath를 호출하고 플러그인의 apk 경로를 전달해야합니다.

두 단계를 수행하면 플러그인이 생기고 모든 클래스와 리소스가 일반 앱과 크게 다르지 않습니다.

ps : 다른 시스템 버전과 다른 맞춤형 ROM에서 제대로 작동하도록해야 할 작업이 있음을 알게되고,이 두 단계를 통해 플러그인에서 새로운 활동/서비스/방송/제공자를 추가 할 수 없게됩니다 SystemServer에 등록해야하며 시스템에 의해 제한되어 있으므로 root가 아닌 다른 방법으로 생각하지 않습니다.

--------------------------- 나는 분리 기호입니다. --------------- -------------

play-store는 앱에 인터넷에서 다운로드 할 수있는 코드를 실행할 수있는 기능이있는 경우 앱을 게시 할 수 없습니다. 그 코드가 누군가의 전화에서 개인 정보를 수집하는지 여부 또는 불법적 인 조치를 취할 것이라는 보장이 없기 때문입니다.