All Projects → mmin18 → Androiddynamicloader

mmin18 / Androiddynamicloader

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

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Androiddynamicloader

Japicmp Gradle Plugin
A Gradle plugin for JApicmp
Stars: ✭ 101 (-92.97%)
Mutual labels:  plugin
N1 Unsubscribe
Plugin for Nylas Mail that adds a quick unsubscribe button for email.
Stars: ✭ 105 (-92.69%)
Mutual labels:  plugin
Mkdocs Monorepo Plugin
✚ Build multiple documentation folders in a single Mkdocs. Designed for large codebases.
Stars: ✭ 107 (-92.55%)
Mutual labels:  plugin
Floodgate
Hybrid mode plugin to allow for connections from Geyser to join online mode servers.
Stars: ✭ 101 (-92.97%)
Mutual labels:  plugin
Shadowsocksgostplugin
Gost 的 Shadowsocks 安卓插件,可以直接在 Shadowsocks 安卓客户端上连接 Gost 服务器
Stars: ✭ 104 (-92.76%)
Mutual labels:  plugin
Incrementselection
Add a number to each selection in Sublime Text, incremented once per selection
Stars: ✭ 105 (-92.69%)
Mutual labels:  plugin
Doctordark
📂 MacForge Plugin to bring dark mode to macOS
Stars: ✭ 100 (-93.04%)
Mutual labels:  plugin
Flowmaker
flowmaker: JS to SVG flowchart generation extension for Vscode in realtime written in typescript and also download the SVG through local node server. Extension:
Stars: ✭ 108 (-92.48%)
Mutual labels:  plugin
Consulo Unity3d
Frameworks: Unity3D
Stars: ✭ 104 (-92.76%)
Mutual labels:  plugin
Nvim Toggleterm.lua
A neovim lua plugin to help easily manage multiple terminal windows
Stars: ✭ 102 (-92.9%)
Mutual labels:  plugin
Fragnav
An Android library for managing multiple stacks of fragments
Stars: ✭ 1,379 (-4.04%)
Mutual labels:  fragments
Chrome Better History
Replace the default Chrome history with this better history plugin.
Stars: ✭ 103 (-92.83%)
Mutual labels:  plugin
Ymate Platform V2
YMP是一个非常简单、易用的轻量级Java应用开发框架,涵盖AOP、IoC、WebMVC、ORM、Validation、Plugin、Serv、Cache等特性,让开发工作像搭积木一样轻松!
Stars: ✭ 106 (-92.62%)
Mutual labels:  plugin
Trimmer
A Sublime Text plug-in for cleaning up whitespace.
Stars: ✭ 100 (-93.04%)
Mutual labels:  plugin
Resharper Cyclomatic Complexity
ReSharper plugin to measure cyclomatic complexity as you type
Stars: ✭ 107 (-92.55%)
Mutual labels:  plugin
Gitlink
A Jetbrains plugin that opens a local file under Git version control in its remote host using the default browser.
Stars: ✭ 101 (-92.97%)
Mutual labels:  plugin
Calc.plugin.zsh
zsh calculator - with support for basic math
Stars: ✭ 105 (-92.69%)
Mutual labels:  plugin
Qualinsight Plugins Sonarqube Badges
Plugin for SonarQube that generates badges displaying information about a project's or view's quality.
Stars: ✭ 108 (-92.48%)
Mutual labels:  plugin
Typescript Eslint Language Service
TypeScript language service plugin for ESLint
Stars: ✭ 108 (-92.48%)
Mutual labels:  plugin
Dddplus
🔥 A lightweight flexible development framework for complex business architecture with full ecosystem!轻量级业务中台开发框架,中台架构的顶层设计和完整解决方案!
Stars: ✭ 107 (-92.55%)
Mutual labels:  plugin

Android Dynamic Loader

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 from https://github.com/mmin18/AndroidDynamicLoader/raw/master/host.apk (35k).

HelloWorldDemo

BitmapFunDemo

How to run the sample plugins

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

First you need to install host.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 your PATH.

Run the following commands:

chmod +x tools/update.sh
tools/update.sh workspace
cd workspace
ant 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 in workspace.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 the HelloFragment.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 open http://mydomain.com/helloworld.html. In plugins, we open app://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 in project/fragment.properties.

See the helloworld 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 using context.getResources(), we use MyResources.getResource(Me.class) to get the resources which in the same package as Me.class.

Here is a sample in HelloFragment.java

@Override
public 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 class

	MyResources 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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].