openatlas_flow
2017-01-19 10:36:14 0 举报
openatlas_flow是一个开源的业务流程管理系统,它提供了一套完整的解决方案,用于设计和实现复杂的业务流程。该系统具有高度的可定制性和灵活性,可以根据企业的具体需求进行定制和扩展。openatlas_flow采用了先进的工作流引擎技术,能够实现业务流程的自动化和优化,提高企业的工作效率和质量。此外,openatlas_flow还提供了丰富的API接口,方便与其他系统进行集成,实现数据共享和交互。总之,openatlas_flow是一个强大而实用的业务流程管理系统,能够帮助企业更好地管理和控制业务流程,提高工作效率和竞争力。
作者其他创作
大纲/内容
ContextImplHook.startService()
初始化时加载资源的过程
Framework.startup()
AndroidHack.hackH()
BundleParser.parser(getBaseContext());reflect sInstalledVersionName in Globals
这是用于解析的核心类,这里采取了与DroidPlugin不同的策略,即不利用PackageParser这个兼容性很不好的类,而是直接解析Xml文件
运行时安装过程
BundleLock.WriteUnLock(location)
在类BundleInstaller中
BundleClassLoader.loadClass()
case BundleEvent.STOPPED:
Framework.export()
BundleImpl中bundleDir类似\"/data/data/cn.edu.zafu.atlasdemo/files/storage/com.lizhangqu.test\"
dataOutputStream.writeUTF(this.location);dataOutputStream.writeInt(this.currentStartLevel);dataOutputStream.writeBoolean(this.persistently);..fileOutputStream.getFD().sync();
Application.openOrCreateDatabase()
BundleLifecycleHandler.loaded()
ContextImplHook.startActivity()
bundleForComponent为空
AndroidHack.injectClassLoader()AndroidHack.injectInstrumentationHook()injectApplication()
void loaded(Bundle bundle)
Yes
OpenAtlasHacks.defineAndVerify()
BundleLifecycleHandler.bundleChanged(){case BundleEvent.LOADED:loaded(bundleEvent);break;...}
BundleImpl()
else
case BundleEvent.LOADED:
DelegateResources.newDelegateResources()
String bundleForComponent=BundleInfoList.getInstance().getBundleNameForCompnent(bundleName)
BundleArchiveRevision中bundleFile类似指向\"/data/data/cn.edu.zafu.atlasdemo/lib/libcom_lizhangqu_test.so\"
Utils.UpdatePackageVersion(this.mApplication);
bundleImpl不为空
updateMetadata()
这里涉及到了解析Xml文件
ContextImplHook.bindService()
Field declaredField=Globas.class.getDeclaredField(\"sApplication\
InstrumentationHook.newActivity()
ActivityThread.performLaunchActivity()
AtlasApp.onCreate()
BundleArchive中location类似\"com.lizhangqu.test\
Atlas.getInstance().init()
if(!updatePackageVersion)
checkInstallBundleAndDependency()
case BundleEvent.UPDATED:
建立BundleImpl对象之后就start(),对应上面的bundle2.start()
InstrumentationHook.execStartActivityInternal()
Framework.notifyBundleListeners()
BundleClassLoader.findOwnClass()
startService(Intent)
DelegateClassLoader.loadClass()
case BundleEvent.UNINSTALLED:
BundleImpl中的metaFile指向的则是类似\"/data/data/cn.edu.zafu.atlasdemo/files/storage/com.lizhangqu.test/meta\"
AtlasApp
BundleLifecycleHandler
bundleForComponent不为空
BundleArchiveRevision中revisionDir类似\"/data/data/cn.edu.zafu.atlasdemo/files/storage/com.lizhangqu.test/version.1\"
No
通过反射调用AssetManager.addAssetPath()将插件中的资源添加到host中的AssetManager对象里面
bundleImpl=(BundleImpl)Framework.getBundle(location)
先从内存中取
bundleImpl=new BundleImpl()
libXXX.so文件是否存在
FrameworkLifecycleHandler.frameworkEvent(FrameworkEvent)
ContextImplHook.findClass()
mBundlesInstaller.process();mOptDexProcess.processPackage();
if(installAuto)
Framework.startup(Properties)
case BundleEvent.STARTED:
BundleClassLoader.resolveBundle()
Framework.frameworkListeners.add()
BundleArchiveRevision中metaFile类似指向\"/data/data/cn.edu.zafu.atlasdemo/files/storage/com.lizhangqu.test/version.1/meta\"
ClassLoaderFromBundle.checkInstallBundle(className);ClassLoadFromBundle.loadFromInstalledBundles(className);
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacksCompatImpl(this));this.mAtlasInitializer.startup();
BundleImpl.startBundle()
AtlasApp.attachBaseContext()
ClassLoadFromBundle.checkInstallBundleIfNeed()
void bundleChange(BundleEvent bundleEvent)
BundleImpl.start()
BundleArchiveRevision中revisionLocation类似\"reference:/data/data/cn.edu.zafu.atlasdemo/lib/libcom_lizhangqu_test.so\"
case FrameworkEvent.STARTED:started();
PackageLite
CustomApp
startActivity()过程
AtlasApp.startActivity(Intent)
OpenAtlasInitializer.init()
bundleImpl为空
DelegateResources.newDelegateResourcesInternal()
case BundleEvent.INSTALLED:
BundleArchiveRevision.findClass()
ContextImplHook().startActivity()
在构造方法中进行了很多的操作,尤其注意其中新建了BundleContextImpl()对象
0 条评论
下一页