Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A plugin system that runs like a browser, but instead of load web pages, it load apk plugins which runs natively on Android system.

NotificationsYou must be signed in to change notification settings

mmin18/AndroidDynamicLoader

Repository files navigation

Android Dynamic Loader is a plugin system. The host application is like a browser, but instead of load web pages, it load plugins which runs natively on Android system.

You can download the demo fromhttps://github.com/mmin18/AndroidDynamicLoader/raw/master/host.apk (35k).

HelloWorldDemo

BitmapFunDemo

How to run the sample plugins

The sample plugins is underworkspace folder, but do not try to run them directly, it won't start.

First you need to installhost.apk on your phone (or you can build the Host project yourself)

Also you need to make sure the Android SDK and Ant is installed and android-sdk/tools, android-sdk/platform-tools, ant is in yourPATH.

Run the following commands:

chmod +x tools/update.shtools/update.sh workspacecd workspaceant run

If it shows "device not found", make sure your phone is connected or simulator is running. "adb devices" will tell.

Since we don't specific a default entry inworkspace.properties, it will popup a window and let you choose one. I suggest bitmapfun.

About UI Container

In a normal Android application, we use Activity as the root UI container. But since Activity is registered in AndroidManifest.xml, and we can't modify manifest in runtime, we must find an alternative UI container - Fragment.

The Fragment itself, introduced in Android 3.0 Honeycomb, is a perfect UI container, and it has lifecycle and state management.

Once the plugin and its dependency is downloaded, an Activity (MainActivity.java) will be started, create an instance of the specific fragment, and add the fragment into the root view.

See theHelloFragment.java sample.

About URL Mapping

Since we use Fragment as UI container, each page is implemented in Fragment instead of Activity. So how do we start a new page?

We use URL, just like a browser does. For instance, in a browser, we openhttp://mydomain.com/helloworld.html. In plugins, we openapp://helloworld.

Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("app://helloworld"));startActivity(i);

Each host is mapped to a single fragment, you define the url mapping table inproject/fragment.properties.

See thehelloworld fragment.properties sample.

About Resources

In the plugins, we pack resources and codes in the same package. We use R.java as the index of resources.

But instead of usingcontext.getResources(), we useMyResources.getResource(Me.class) to get the resources which in the same package asMe.class.

Here is a sample in HelloFragment.java

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// MyResources manages the resources in specific package.// Using a Class object to obtain an instance of MyResources.// In this case, hello.xml is in the same package as HelloFragment classMyResources res = MyResources.getResource(HelloFragment.class);// Using MyResources.inflate() if you want to inflate some layout in// this package.return res.inflate(getActivity(), R.layout.hello, container, false);}

You can use MyResources to get drawable, string, or inflate layout.

Folders

/Host contains the host application (build as host.apk).

/tools/update.sh checks your environment and helps you config your plugins. You should always run it once after git clone or create a new plugin.

/workspace/sample.helloworld is a most simple plugin./workspace/sample.helloworld/fragment.properties defines the url mapping of your fragments.

/site/***/site.txt is the definition file for all the plugins files, dependency and fragments url mapping table.

About

A plugin system that runs like a browser, but instead of load web pages, it load apk plugins which runs natively on Android system.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors2

  •  
  •  

Languages


[8]ページ先頭

©2009-2025 Movatter.jp