Well it looks like I jumped the gun.. no, I haven't yet been able to
launch an activity from my data folder. I can load classes from them
with the PathClassLoader, but can't call an activity. I think I need
to somehow create a new Context with my PathClassLoader as the
ClassLoader. Then use this context to run:
Context packageContext =
context.createPackageContext(mclassname.substring(mclassname.lastIndexOf(".")),
Context.CONTEXT_IGNORE_SECURITY);
intent = new Intent();
intent.setClass(packageContext, m_class);
no luck yet on creating that context.. I'm not positive this is the
way to go, but it's my best guess for now.
Is it possible to load the contents of a foreign .apk's manifest file
into the current context?
On Mar 23, 2:15 pm, tu <[EMAIL PROTECTED]> wrote:
> Can you launch an activity defined in "/data/data/my.app/files/test.apk" ?!
> For start an acitivity in a installed apk, just use
> Intent.setClassName(packageName,
> foreignClassName)
>
> 2008/3/23, Ben Dodson <[EMAIL PROTECTED]>:
>
>
>
> > Well thanks for the help, I made some good progress on this once I
> > realized I needed the full path to the apk file (/data/data/my.app/
> > files/test.apk)
>
> > Now I'm able to load classes dynamically using the PathClassLoader and
> > instantiate/run methods on them. Dependency classes also load with no
> > problem, including the R class.
>
> > I'm still stuck on the last step of running an activity from
> > another .apk. I've tried two main approaches. One is to use
> > startActivity(this, foreignClass), so the context is that of the
> > calling app. The result:
>
> > ERROR/lobos(796): java.lang.RuntimeException: Not supported in system
> > context
> > ERROR/lobos(796): at
> > android.app.ApplicationContext.getPackageName(ApplicationContext.java:
> > 312)
> > ERROR/lobos(796): at
> > android.content.ComponentName.<init>(ComponentName.java:74)
> > ERROR/lobos(796): at android.content.Intent.setClass(Intent.java:
> > 2740)
> > [...]
>
> > I also tried instantiating the foreignClass (extends Activity) and
> > using that as the context:
>
> > ERROR/lobos(794): at
> > android.app.Activity.startSubActivity(Activity.java:1935)
> > ERROR/lobos(794): at
> > android.app.Activity.startActivity(Activity.java:1978)
> > ERROR/lobos(794): at
> > com.lobos.app.LobosAPKApp.launch(LobosAPKApp.java:68)
>
> > I'm sure there's a pretty hefty piece I'm not handling, but any ideas
> > what?
>
> > I tried overriding the getPackageName method
>
> > On Mar 19, 12:33 pm, tu <[EMAIL PROTECTED]> wrote:
> > > Yes, an apk file can be put into assets folder or any accessible path! I
> > > have been working on it over 2 months. I can download an apk file by
> > http
> > > and run code or use its resources dynamically, including version control
> > > features. It's a platfrom similar to OSGi or EclispeRCP. Now nearly
> > > everything goes smoothly.
>
> > > 2008/3/19, Peli <[EMAIL PROTECTED]>:
>
> > > > This sounds interesting. Can an apk file be put into the lib or assets
> > > > folder? If yes, then this would be an alternative to lib/jar for
> > > > including widgets with graphics and code...
>
> > > > Peli
>
> > > > On Mar 19, 3:14 pm, Ben Dodson <[EMAIL PROTECTED]> wrote:
> > > > > Thanks a ton, I'll play with this tonight and see how it goes.
>
> > > > > Ben
>
> > > > > On Mar 18, 4:46 pm, hackbod <[EMAIL PROTECTED]> wrote:
>
> > > > > > You should be able to use android.lang.PathClassLoader to create a
> > > > > > class loader for .apk. Just make an instance of the object with
> > the
> > > > > > full path the .apk and, if desired, a parent class loader that it
> > > > > > links with or ClassLoader.getSystemClassLoader().getParent() for
> > just
> > > > > > the frameworks.
>
> > > > > > You can also load the resources from the .apk with code like this:
>
> > > > > > AssetManager assets = new AssetManager();
> > > > > > assets.addAssetPath(apkPath);
> > > > > > Resources r = new Resources(assets, myMetrics,
> > > > > > myConfiguration);
>
> > > > > > On Mar 18, 11:57 am, Ben Dodson <[EMAIL PROTECTED]> wrote:
>
> > > > > > > That sounds like exactly what we're hoping to do. Can you point
> > my
> > > > > > > towards any references for how to load the code from the
> > filesystem?
>
> > > > > > > Thanks,
> > > > > > > Ben
>
> > > > > > > On Mar 18, 1:06 pm, hackbod <[EMAIL PROTECTED]> wrote:
>
> > > > > > > > Hi Ben,
>
> > > > > > > > The package install API is still under development, and may
> > not be
> > > > > > > > working. I think right now the install package permission is
> > also
> > > > > > > > only allowed for built-in applications, since it will allow
> > you to
> > > > > > > > circumvent the permission system by deciding which permissions
> > to
> > > > > > > > allow: this API is really intended for use by a
> > graphicalinstaller
> > > > > > > > that is included with a shipping device, and when third party
> > apps
> > > > > > > > want to install something we will probably have an activity
> > they
> > > > can
> > > > > > > > launch to do so (to ensure the user is always involved in this
> > > > > > > > process).
>
> > > > > > > > I don't understand what you mean by your app being the launch
> > > > point of
> > > > > > > > other applications. Do you mean you want to make your own
> > private
> > > > > > > > world of applications that others don't see? If so, I really
> > > > don't
> > > > > > > > think you want to use this API: this is for installing
> > top-level
> > > > > > > > applications in to the system. If you want to manage
> > applications
> > > > > > > > yourself, you can just put their code into your private file
> > area,
> > > > use
> > > > > > > > the function to parse the manifest if you want, and load that
> > code
> > > > > > > > directly yourself.
>
> > > > > > > > On Mar 18, 6:14 am, Ben Dodson <[EMAIL PROTECTED]> wrote:
>
> > > > > > > > > I'm trying to write an app that can install other
> > applications.
> > > > I came
> > > > > > > > > across the installPackage() method and tried to give it the
> > URI
> > > > of
> > > > > > > > > a .apk file on the web, but I'm getting a permission denied
> > > > error. I
> > > > > > > > > have what I think should be the correct permissions in my
> > > > manifest:
>
> > > > > > > > > </uses-permission><uses-permission
> > > > > > > > > android:name="android.permission.INSTALL_PACKAGES">
> > > > > > > > > </uses-permission><uses-permission
> > > > > > > > > android:name="android.permission.DELETE_PACKAGES">
>
> > > > > > > > > is there anything else I need? should this method work?
>
> > > > > > > > > Also, I want my application to be the launch point of these
> > > > other
> > > > > > > > > apps, and I would prefer them to not show up in the main
> > listing
> > > > of
> > > > > > > > > programs. Is this possible?
>
> > > > > > > > > Thanks,
> > > > > > > > > Ben
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
Announcing the new M5 SDK!
http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---