I want to use an SDK in android, but I don’t want that SDK to have any access to permissions that I haven’t explicitly given it. On top of that, if the SDK throws an uncaught exception, I don’t want it to bring down my entire application.
In C# there is the concept of an AppDomain where you can treat the code running inside of it like a sandbox, granting (or limiting) permissions, and only providing access to data that you explicitly want to share.
Is there anything that works like this in Java for the Android platform?
There are two questions here. The first one deals with handling exceptions in a piece of untrusted code; a carefully written try/catch block should take care of that, as long as the untrusted piece is pure Java. If native code is allowed, then nothing short of process level isolation would help. For running code in a separate process, read up on Android services; you can designate a service to run in a designated process. Then exceptions (the nonmanaged kind) won’t bring down the main app. You’ll just get a “service has died” exception.
A whole another issue is lowering the permission set. To the best of my knowledge, there’s no way to lower the permission set within an app. Even a surrogate process won’t help. If you ship a whole application (in the Android sense of the word) for wrapping and running custom code, that might help. But the logistics of app installation would get tricky. Google Market does not readily support the notion of app interdependence or prerequisites.