2017-10-21 13 views
-2

基本機能を備えた「コンテナ」アプリケーションを作成する必要があります。別のApkでプラグイン/アドオン/エクステンションを作成する

"Container"アプリにはNavigationView(インストールされたプラグインに基づいて項目が動的に追加されています)とFrameLayoutがあります。

別のapkでは、自分のビューで自分のアプリに機能を追加するプラグインを作成する必要があります。

問題は次のとおりです。プラグインアプリケーションでビューを使用してフラグメントを作成し、コンテキストアプリケーションのFrameLayoutに移動するにはどうすればよいですか。ここで

は、誰もが任意のコード例を持っています

enter image description here

enter image description here

より良い状況を説明する2枚の画像はありますか?チュートリアルにリンクしますか?どうすればいいですか?

私はプロセス間の通信のためのAIDLを作成するだけで、プリミティブデータを渡そうとしました、それが通過を許可されていません:オブジェクト、リソース、画像など

+0

一般的に、安全な方法ではできません。プラグインが "コンテナ"アプリケーションに 'RemoteViews'を提供することを歓迎します.Applicationウィジェットが' AppWidgetManager'を介してホーム画面に 'RemoteViews'を供給する方法です。 – CommonsWare

答えて

0

ことが可能です、あなたに必要な二つのものがありますapk:dexコード&のリソースを読み込もうとしています。

デックスコードでは、現在のコンテキストのデフォルトのClassLoaderを変更することができます。あなたのプラグインごとに分離されたClassLoaderを追加し、それらをコンテキストのClassLoaderに入れ、コンテキストのClassLoaderのfindClassメソッドを修正し、プラグインのClassLoaderからクラスを最初に見つけさせ、もし見つからなければ伝統的なClassLoaderの方法にフォールバックするようにします。PathClassLoaderは、あなたがしなければならないことは、プラグインのファイルパスをパスすることです。

リソースを使って、あなたがする必要があるのは、リソースクラスから古いAssetManagerを取得し、リフレクションを使用してaddAssetPathを呼び出し、プラグインのapkパスを渡します。

この2つのステップを実行すると、プラグインがあり、そのクラスとリソースはすべて通常のアプリとほとんど変わりません。

ps:異なるシステムバージョンと別のカスタムROMで正常に動作するようにする作業がまだあることに注意してください。これらの2つの手順ではプラグインから新しいアクティビティ/サービス/ブロードキャスト/プロバイダを追加できませんSystemServerに登録する必要がありますが、これはシステムによって制限されています。私はルートなしでそれを行う方法はないと思います。

---------------------------私はセパレータです--------------- -------------

あなたのアプリがインターネットからダウンロードできるコードを実行する能力を持っている場合、play-storeはあなたのアプリが公開を許可しません。そのコードが誰かの電話からプライベートデータを収集するかどうか、または違法なことをする保証はありません。

関連する問題