android-application-plug-ins-frame-work

소개하다.
이 프레임워크의 취지는 프로그램을 모듈화하고 플러그인화하는 데 편리하도록 한 apk 응용 프로그램을 여러 apk로 나누는 것이다.
이 플러그인화, 모듈화가 어떻게 된 일인지 모르면 텐센트 위챗의 안드로이드 클라이언트의 플러그인 설정을 볼 수 있습니다.
여기서 나는 텐센트 위챗을 예로 삼아 이 틀을 어떻게 사용하는지 할 것이다.(
텐센트 위챗은 진정한 플러그인화가 아니다. 위선적이다. 플러그인은 메인 프로그램과 분리된 것이 아니다. 결과적으로 매번 플러그인의 업데이트는 전체 프로그램의 업데이트를 대가로 해야 한다)
무엇
프레임워크의 사상은 주로 apk 목록 파일의sharedUserId 속성을 통해 여러 apk를 단일한 Dalvik 가상 기기, 즉 하나의 프로세스로 융합시키는 것이다. 그러면 안드로이드 프레임워크의 서로 다른 apk 권한이 다르고 서로 통하지 않는 갭(rpc라니 다른 것은 이것보다 실질적이지 못하다)을 뛰어넘는다.
가장 간단한 피부 플러그인부터 복잡한 데이터베이스 확장 기능까지 일반적인 activity에서 플러그인의 activity를view로 바꾸고 메인 프로그램에 추가하는 확장 기능까지 모두 본 프레임워크를 통해 실현할 수 있다. 물론 본 프레임워크는 하나의 경로를 제공했을 뿐 어떻게 인코딩하는지는 자신에게 달려 있다.
본인의 능력에 한계가 있어서 약간의 오류, 누락 또는 부족한 점이 있을 수 있습니다. 아낌없는 가르침을 바랍니다. 제 블로그 주소가 왼쪽 아래에 있거나 제 메일박스가 있으면 저에게 연락할 수 있습니다.
ps: 다음은 텐센트 위챗을 예로 들겠습니다. 여기서 말씀드리자면 저는 위챗 안드로이드 클라이언트에 대해 임의의 형식의 반번역과 해독 작업을 하지 않았습니다. 단지 반나절 동안 공을 보고 간단한 추측을 했을 뿐입니다.
프레임 구조
이 플러그인 프레임워크는 세 개의 패키지로 구성됩니다.
org.igeek.android.pluginframework 이 패키지 종류는 프레임워크의 주요 조작 종류입니다
PluginBuilder 어셈블리 플러그인PluginDescription 사용자 정의 플러그인 설명 조립PluginInvoke 플러그인 기능 호출PluginSearch 찾기 플러그인org.igeek.android.pluginframework.annotation은 앞으로 주석을 고려할 수 있습니다
PluginDescription 사용자 정의 설명 클래스에 대한 메모플러그인 클래스에 대한 PluginFeature 메모플러그인 클래스 메서드에 대한 PluginMethod 메모org.igeek.android.pluginframework.beans 프레임워크 내부에 사용되는 beans
Plugin 플러그인 팩PluginFeature 플러그인 클래스PluginFeatureMethod 플러그인 방법org.igeek.android.pluginframework.일부 도구 클래스
XMLParse 플러그인 팩사용 방법
텐센트 위챗을 예로 들면 겉으로 보기엔 플러그인화된 다양한 기능의 통합이다.
그러나 이것은 모두 허구이다. 매번 업데이트할 때마다 작은 기능 하나가 추가되어도 사용자가 전체 프로그램을 업데이트할 수 있다는 것을 발견할 수 있다. 지금까지(2011-12-17)까지 위챗은 나에게 3.5로 업데이트하라고 했고 작은 버그를 복구했다. 플러그인 기능 1개와 다른 작은 개선은 나로 하여금 전체 프로그램을 다운로드하고 업그레이드하게 했다. 6.8m야.
엔지니어링 개발 시 플러그인 사용, 관리 페이지(예:
이것은 위챗 플러그인 탐색 페이지입니다. 여기에 노출될 수 있는 모든 플러그인이 열거됩니다
이것은 위챗의 플러그인 관리 인터페이스로 안드로이드를 마운트 해제할 수 있지만, 이것들은 모두 허구이며, 아마도 서비스를 끄는 것일 뿐, 진정한 마운트 해제는 아닐 것이다
마스터 프로그램(APK)
, 주 프로그램 목록 먼저 프로젝트의 이름을 정하고 목록에sharedUserId 속성을 추가합니다. 속성 값은 바로 생각한 이름입니다. 예를 들어 위챗:com.qq.weixin
   android:sharedUserId="com.qq.weixin"
, 플러그인 설명에 클래스 쓰기이것이 바로 플러그인 설명입니다.
우선 메인 프로그램에서 단독으로 하나의 패키지를 만들고 하나의 클래스를 쓴다. 이 클래스는 하나의 bean에 해당하고 해당하는 플러그인 설명 정보를 가진 필드, 예를 들어 위챗이다. 그러면 이 bean의 필드는
플러그인 이름:
표류병
플러그인 로고:
그 사람
플러그인 설명:
설명 정보...
이 클래스는 메인 프로그램에서 많이 사용되지 않고 프레임워크에서 되돌아오는 플러그인의 bean만 읽을 수 있습니다.
, 이 프레임워크를 도입한jar 패키지 또는 원본 가져오기 정식 인코딩을 할 때, 어느 곳에서든 프레임워크를 호출할 수 있습니다.구체적인 절차는 이렇다
1. 플러그인 찾기 이 프레임워크는sharedUserId에 따라 플러그인을 찾습니다.이것은 먼저 자체 apk의sharedUserId 값에 따라 시스템에서 같은 속성을 가진 패키지를 찾아서 불러옵니다.
플러그인 apk의sharedUserId 값도 메인 프로그램과 같아야 한다
        //  ,               PluginSearch psearch=new PluginSearch();         //                       List<Plugin>  plugins=psearch.getPlugins(this);                 //                   PluginBuilder pbuilder=new PluginBuilder(this);         //                       plugins=pbuilder.buildPluginsDescrition(plugins);
이렇게 해서 모든 플러그인을 손을 찾았어요. 간단하죠?
1. 플러그인을 호출해서 플러그인을 찾으면 호출이 됩니다. 가장 간단한 응용은 바로 Button 단추로 호출합니다.
예를 들어 위챗을 흔들면 프레임의 플러그인 호출을 터치합니다
        @Override
        public void onClick(View v) {
                //         
                PluginInvoke pi=new PluginInvoke(AndroidPluginFrameworkActivity.this);
        
                
                //       
                //    ,    Plugin  ,    PluginFeature,   PluginFeatureMethod
                pi.invoke(plug, pf, fm);
                
        }
        });
플러그인(APK)
, 플러그인 목록 마스터 프로그램의 목록 파일과 마찬가지로 sharedUserId에 있어야 하며 마스터 프로그램의 플러그인과 같은 activity의 의도 필터 설명이 있어야 합니다.
  <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
, 플러그인 기능플러그인은 일반적인 apk 프로젝트처럼 임의의 종류를 포함할 수 있습니다.
단, 주 프로그램에 호출되는 클래스는 반송값이 없어야 하고, Context 파라미터가 있어야 하며, 프레임워크는 이 방법을 반사하고, 주 프로그램의 context 핸들을 전송해야 한다. 즉, 이context를 사용하든 안 사용하든, 그는 프레임워크에 전송된다.
만약 메인 프로그램이 설명 클래스를 규정한다면, 즉 프레임워크에 Plugin Description이 호출해야 하는 bean은 플러그인 프로젝트에서도 메인 프로그램인 이 bean이 있어야 하고, 패키지 이름도 같아야 한다.플러그인 프로그램은 이 bean의 필드를 직접 계승하거나 변경할 수 있으며, 메인 프로그램이 이 플러그인에 대한 설명을 쉽게 얻을 수 있습니다.이런 방식은 프레임워크를 피하고 메인 프로그램에 편의를 주는 것이다.
, 플러그인 프로그램의plugin.xml 설정http://android-application-plug-ins-frame-work.googlecode.com/files/plugin.xml plugin.xml은 이름을 바꿀 수 없습니다. 프로젝트의 assets 디렉터리에 두어야 합니다.
내용은 대체로 다음과 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<!--   xml            assets     -->


<!--        ( ) -->
<plugin-features>

        <!--    ,        -->
        <!--            ,        ,         ,     -->
        <description name="org.pakage.name.and.description.name"/>
        
        <!--       ( ),   activity    -->
        <feature name="org.pakage.name.and.activity.name1">
        
                <!--        -->
                <!-- name     -->
                <method need-context="true" name="methodName1" >    </method>
                <method need-context="true" name="methodName2" >    </method>
                
        </feature>
        
        <feature name="org.pakage.name.and.activity.name2">
                <method need-context="true" name="methodName1" >    </method>
        </feature>
</plugin-features>
위의 방법에 따라 배치하면 매우 쉽다.
최후
위에서 말한 것이 비교적 범위가 넓으니 예시 프로젝트를 보는 것이 좋겠다. 그 안에 하나의 메인 프로그램과 두 개의 플러그인 확장이 포함되어 있는데 모두 4개의 프로젝트이다. 즉, 사용자 측에서는 4개의 apk이다.http://android-application-plug-ins-frame-work.googlecode.com/files/demo.zip

좋은 웹페이지 즐겨찾기