I'm hoping to write a tweak to record all activities running on a rooted Android phone. For example, I want to record the information such as:
2012-07-31 15:03 app1:Activity01:onCreate()
2012-07-31 15:04 app1:Activity01:onStart()
...
2012-07-31 15:05 app1:Activity01:onPause()
2012-07-31 15:05 app2:Activity01:onResume()
Is is possible to do it? If so, please kindly tell me where to find the related information, books or domain knowledge I should study to accomplish this task. I'm new on Android programming but familiar with C++ and Java.
Thanks a lot!
Each Android app is executed in its own process running its own instance of the Dalvik VM. The VM normally does not provide the information you are looking for across process boundaries.
If you feel like really hacking your Android you could investigate into these two approaches:
Modify the Android API classes, basically building your own android.jar, where you can override and extend existing functionality.
Try to use the VM's debugging facility to gain access to its runtime state (see e.g. Dalvik VM debug monitor).
Bottomline: Rooting your phone is child's play compared to those hacks.
However, I would advise against trying to 'hook' into Android the way you described, both for performance and stability reasons.
So the answer was it ain't possible in a normal app, even on a rooted phone.
See comments :-)
Related
Anyone know if its possible to develop android apps with PowerBuilder.
Haven't found much regarding this on Google, which might mean that it isn't, but still want to hear the opinion of ppl at stackoverflow.
thanks in advance
right now I think the only possibility is Appeon Mobile for PowerBuilder. This is a beta version and it is supporting iOS right now, but in several months it will be capable for building native android and Windows Phone app too.
http://www.appeon.com/list.do?fid-60-page-1.htm
I hardly waiting it also :)
Br. Gábor
One other possible solution I've considered but it is NOT a trivial solution. Look at IIS modules and handlers in the MSDN. Basically you can write a handler in PB.NET that will be used in IIS to create HTML5 that will run in just about any browser including mobile.
You then could assign a certain file type (e.g .powerbuilder ) which will be processed by your custom handler that was written in PB.NET.
Might be a good open source project.
What is happening under the hood? somehow this is passed down to the OS, and someshow the OS will find the right activity / activities, and launch it? Is there a service / lib running in Android handling this? I am trying to modified the OS to override the logic of startActivity across the board, is this possible?
Thanks.
I would take a look at the Android source! Whenever I'm developing and I run into an issue I read through the source to discover what is happening under the hood; it's quite interesting! It's an insight into what's actually going on, and also very good guidelines for documentation and code formatting!
http://source.android.com/source/downloading.html
A good starting point might be ActivityManagerService
Basically, when an app is first launched, startProcessLocked() in ActivityManagerService creates a new ProcessRecord (if necessary) and then calls Process.start(), which in turns builds the arguments for zygote and sends to zygote's socket using zygoteSendArgsAndGetResult(). Of course there's more to it than that, for example if an app shares a uid, is isolated, etc. But that gives you the basic process.
Looking over the source is indeed a good way to understand what's going on. However, unless you're planning on modifying it, don't bother downloading AOSP, just use GrepCode. Easier to browse, search and everything is hyperlinked so it's easy to follow through to classes, find usages, derived methods, etc. If you download AOSP, you'll be stuck with grep, ack-grep if you're lucky and a text editor. Also, you'll only have the one version you picked to checkout. GrepCode has the code for almost every version since 1.5.
The linked text above will take you to the relevant source at GrepCode. Try it out! The only downside is that GrepCode doesn't include the native C++ layer.
A coworker and I were talking (after a fashion) about an article I read (HTC permission security risk). Basically, the argument came down to whether or not it was possible to log every action that an application was doing. Then someone (an abstract theroetical person) would go through and see if the app was doing what it was supposed to do and not trying to be all malicious like.
I have been programming in Android for a year now, and as far as I know if -- if -- that was possible, you would have to hack Dalvik and output what each process was doing. Even if you were to do that, I think it would be completely indecipherable because of the sheer amount of stuff each process was doing.
Can I get some input one way or the other? Is it completely impractical to even attempt to log what a foriegn application is doing?
I have been programming in Android for a year now, and as far as I know if -- if -- that was possible, you would have to hack Dalvik and output what each process was doing.
Not so much "hack Dalvik" but "hack the android.* class library, and perhaps a few other things (e.g., java.net).
Even if you were to do that, I think it would be completely indecipherable because of the sheer amount of stuff each process was doing.
You might be able to do some fancy pattern matching or something on the output -- given that you have determined patterns of inappropriate actions. Of course, there is also the small matter of having to manually test the app (to generate the output).
Is it completely impractical to even attempt to log what a foriegn application is doing?
From an SDK app? I damn well hope so.
From a device running a modded firmware with the aforementioned changes? I'd say it is impractical unless you have a fairly decent-sized development team, at which point it is merely expensive.
This is both possible and practical if you are compiling your own ROM. Android is based on Linux and I know several projects like this for Linux, like Linux Trace Toolkit. I also know of research into visualizing the results and detecting malicious apps from the results as well.
Another thing functionality like this is often used for is performance and reliability monitoring. You can read about the DTRACE functionality in Solaris to learn more about how this sort of stuff is used in business rather than academia.
I'm trying to recreate this progress bar clock gadget I built in iGoogle as a widget for Android devices.
It seems like it should be pretty straightforward, especially considering the code is only 75 lines, but I have very little experience with developing in Android - even more-so when considering that I would like it to be a widget.
Hopefully Google will develop (if they somehow aren't already) a translation tool to accomplish this task, but until this, I'm out of ideas.
So here are some questions:
Are there any conversion tools for this yet? Something that would allow you use a program and/or a web service to point to the XML file used for the iGoogle gadget and have the program/service return back the necessary project files needed fro Android apps?
I'm not sure if this approach mentioned above is at all possible, but I'm sure that an Android app can be developed to perform the same way as it does on iGoogle - it's pretty basic Javascript + CSS syntax.
In any case, where should I start and what tutorials (if any) exist with regards to this specific request of translating iGoogle gadgets into Android apps (preferably avoiding the "iframe" type of app framework that just points to the mobile version of a webpage).
Are my assumptions $| intentions out of scope here? I feel like this is an easily doable project via the traditional means of using Androids SDK with Eclipse, for example. I tried messing around with the online GUI that Google had for developing Android apps, but the programming interface was like Visual Basic for 3rd graders - it just wasn't too intuitive either.
Also, any other suggestions on what steps I could take to execute this task would be greatly appreciated. I'm just guessing on how this could be done potentially, but if anyone has done something like this already or has insight towards this conversion process that's more valuable than pure speculation as I was doing above, please answer back with some suggestions as to how to accomplish this iGoogle Gadget -> Android Application conversion process.
I found another somewhat similar question on SO, but it doesn't have the same end result that I'm looking for: iGoogle Gadget on Android Phone as APP or Widget
Thanks a bunch for any help!
So far there is no conversion tool that allows converting to an Android wiget a preexisting widget written for another system. You have to rewrite it.
I know some code generators exist, but I don't know them. They won't take the gadget you are referring to as a source, but maybe they can help you to redesign it for Android. This requires checking.
Is it possible to programmatically restart the phone from a application (service) running on top of the Dalvik VM?
If the SDK does not provide this functionality, then how about using the NDK and calling some functions provided by the kernel? I know this option is not preferred (not stable enough libs), but if it's the only option, I'll have to consider that as well.
Hopefully not. :-)
If it were possible to restart the phone at will, a malicious app could quietly do it at random intervals and make your life unhappy.
The NDK does not provide you with any additional abilities here, because Android relies on process boundaries and Linux access rights for security, rather than a Java-language sandbox.
Why do you want to do this? Maybe there's some other way to accomplish what you're after.
powermanager.reboot is available since api level 8.
requires reboot permission
I found the correct system calls in Linux that would do the trick and after hours of fiddling around with the NDK/JNI paths, I finally managed to call the function. The result was that I need super-user permission for that. I kind of guessed that this would be the case.
Is there anyway to overcome this problem? Other than rooting the phone, which I'm still trying to avoid.
It's still possible to reboot the phone with adb. I guess that communicates with ddmd or some other daemon, so could it be possible to somehow use the same functionality?