THIS PROJECT HAS MIGRATED TO GITHUB. THE BELOW INFORMATION IS FOR HISTORICAL PURPOSES ONLY.
[ Problems with the YouTube video? Try VIMEO: https://vimeo.com/83928836 ]
[Featured on XDA Developers: http://www.xda-developers.com/and... ]
Open Device Manager, or ODM, is a fully free, open source, end-to-end encrypted alternative to Google’s Android Device Manager that can be installed in right around 10 seconds. Building on the look and feel of the original ADM, ODM focuses on supporting additional features while giving users the security and privacy of a self-hosted, open source platform.
ODM was created because of the lack of fully open source and secure device managers on the market. While there are solutions that offer open source web components, the Android Applications are not, and are known to use Google Analytics or ad networks that pull information such as IP address, all of which eliminate 100% privacy. ODM overcomes this by offering everything up for grabs on github. We will also be submitting the github repository to F-Droid, an alternative App Store that compiles open source applications directly from github, so you know you’re getting a safe APK.
Features include:
- Open source web interface
- Open source Android Application
- All notifications/commands sent through Google are encrypted first
- Full AJAX interface
- 10 second server install
- Multi-user support
- Multi-device per user support
- Last and previous locations
- Google maps integration
- Lock device
- Take photos with rear and front cameras
- Alert ringer to locate the phone
- Receive an SMS to identify insertion of new SIM
- Send a custom notification
- Wipe device
- Log of all previous activity
10 Second Installation
Installation is simple and straightforward. Use the below or watch the video embedded above.
- Extract the web archive to any folder on a system running PHP.
- Edit include/config.php to turn on registrations (and change any other settings you would like): $ALLOW_REGISTRATIONS = true
- Open mysql: mysql
- Create the database: create database odm;
- Exit mysql: exit;
- Import database structure: mysql odm < sql/odm.sql
Also, be sure php5-mcrypt and php5-curl are installed on your system.
Please pose any questions or discussion to the thread at: http://forum.xda-developers.com/showthread.php?t=2601720
Configuration
The following variables can be edited in config.php.
Sets the database connection information:
$DB_HOST = "localhost"; $DB_USER = "root"; $DB_PASSWORD = ""; $DB_DATABASE = "odm";
Whether or not to allow user registration. This must be true to create the first user, but can be disabled after that for security.
$ALLOW_REGISTRATIONS = false;
To-Do
- User testing
- Fix bug in Android 4.0+ that crashes some devices when using the camera in a service
- Improve new user registration process with email validation
- Expert security audit of encryption scheme (I am not a security expert, and used samples provided online for the PHP to android methodology)
Change Log
v0.01 beta
- Beta release (see To-Do)
Download
Please do not distribute ODM outside of github or this site. Directing links here will ensure the latest version of ODM is always in circulation.
Download the latest Web Panel source: https://github.com/Fmstrat/odm-web/archive/master.zip
Download the latest APK: https://github.com/Fmstrat/odm/raw/master/latest/odm.apk
Remember to check out the rest of the site!
34 Responses to “ODM: Open Device Manager for Android”
[...] Sebbene sia una soluzione che potrebbe interessare solo un ristretto gruppo di utenti, potete trovare download e maggiori informazioni sul sito del progetto. [...]
[...] Sebbene sia una soluzione che potrebbe interessare solo un ristretto gruppo di utenti, potete trovare download e maggiori informazioni sul sito del progetto. [...]
[...] Sebbene sia una soluzione che potrebbe interessare solo un ristretto gruppo di utenti, potete trovare download e maggiori informazioni sul sito del progetto. [...]
[...] molto completo e perciò per maggiori informazioni vi consigliamo di dirigervi direttamente sul sito ufficiale, oppure di dare un’occhiata al thread aperto nel forum di XDA. Qui in basso trovate invece [...]
Love it!
Thanks for doing this!
Hi.
Great work!
For the heck of it, I tried to start the client on an old htc hero (gsm) running a freshly installed cm 7.2.
It crashed.
Maybe the logcat helps you IF you want to support this old device:
#####
01-11 19:13:43.303: I/ActivityManager(155): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0×10200000 cmp=com.nowsci.odm/.StartupActivity } from pid 258
01-11 19:13:43.473: I/ActivityManager(155): Start proc com.nowsci.odm for activity com.nowsci.odm/.StartupActivity: pid=946 uid=10057 gids={3003, 1006, 1015}
01-11 19:13:43.733: D/dalvikvm(155): GC_CONCURRENT freed 745K, 37% free 5614K/8903K, external 600K/1112K, paused 15ms+15ms
01-11 19:13:44.113: D/szipinf(946): Initializing inflate state
01-11 19:13:44.313: I/ActivityManager(155): Starting: Intent { cmp=com.nowsci.odm/.MainActivity } from pid 946
01-11 19:13:44.773: I/ActivityManager(155): Displayed com.nowsci.odm/.MainActivity: +389ms (total +5s763ms)
01-11 19:13:44.983: W/GCM(246): DIR: /data/data/com.google.android.gms/app_APP /data/data/com.google.android.gsf
01-11 19:13:45.193: D/dalvikvm(246): GC_CONCURRENT freed 535K, 45% free 4044K/7239K, external 0K/0K, paused 11ms+8ms
01-11 19:13:45.433: W/dalvikvm(946): threadid=10: thread exiting with uncaught exception (group=0×40018560)
01-11 19:13:45.443: E/AndroidRuntime(946): FATAL EXCEPTION: AsyncTask #2
01-11 19:13:45.443: E/AndroidRuntime(946): java.lang.RuntimeException: An error occured while executing doInBackground()
01-11 19:13:45.443: E/AndroidRuntime(946): at android.os.AsyncTask$3.done(AsyncTask.java:200)
01-11 19:13:45.443: E/AndroidRuntime(946): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
01-11 19:13:45.443: E/AndroidRuntime(946): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
01-11 19:13:45.443: E/AndroidRuntime(946): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
01-11 19:13:45.443: E/AndroidRuntime(946): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-11 19:13:45.443: E/AndroidRuntime(946): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-11 19:13:45.443: E/AndroidRuntime(946): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-11 19:13:45.443: E/AndroidRuntime(946): at java.lang.Thread.run(Thread.java:1019)
01-11 19:13:45.443: E/AndroidRuntime(946): Caused by: java.lang.ClassCastException: org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl
01-11 19:13:45.443: E/AndroidRuntime(946): at com.nowsci.odm.CommonUtilities.invalidPost(CommonUtilities.java:260)
01-11 19:13:45.443: E/AndroidRuntime(946): at com.nowsci.odm.CommonUtilities.post(CommonUtilities.java:174)
01-11 19:13:45.443: E/AndroidRuntime(946): at com.nowsci.odm.ServerUtilities$1.doInBackground(ServerUtilities.java:37)
01-11 19:13:45.443: E/AndroidRuntime(946): at com.nowsci.odm.ServerUtilities$1.doInBackground(ServerUtilities.java:1)
01-11 19:13:45.443: E/AndroidRuntime(946): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-11 19:13:45.443: E/AndroidRuntime(946): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-11 19:13:45.443: E/AndroidRuntime(946): … 4 more
01-11 19:13:45.463: W/ActivityManager(155): Force finishing activity com.nowsci.odm/.MainActivity
01-11 19:13:46.533: I/ActivityManager(155): No longer want com.koushikdutta.rommanager (pid 549): hidden #16
01-11 19:13:48.723: I/Process(946): Sending signal. PID: 946 SIG: 9
01-11 19:13:48.833: E/JavaBinder(155): !!! FAILED BINDER TRANSACTION !!!
01-11 19:13:48.833: E/JavaBinder(155): !!! FAILED BINDER TRANSACTION !!!
01-11 19:13:48.883: I/ActivityManager(155): Process com.nowsci.odm (pid 946) has died.
#####
The screen showed “trying to register…” but immediately crashed.
@tempo: I literally just fixed this. Re-download the APK and it should work!
sadly it didn’t change.
I redonloaded an installed the new apk (a slightly different file size affirmed that it was a newer version), but the same error. Again, this is a very old device, so there might be a memory issue or something. But if you are interestet here is the new logcat:
#####
01-11 21:30:53.433: I/ActivityManager(155): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0×10200000 cmp=com.nowsci.odm/.StartupActivity bnds=[163,339][237,418] } from pid 258
01-11 21:30:53.543: I/ActivityManager(155): Start proc com.nowsci.odm for activity com.nowsci.odm/.StartupActivity: pid=1315 uid=10057 gids={3003, 1006, 1015}
01-11 21:30:53.963: D/szipinf(1315): Initializing inflate state
01-11 21:30:54.173: I/ActivityManager(155): Starting: Intent { cmp=com.nowsci.odm/.MainActivity } from pid 1315
01-11 21:30:54.783: I/ActivityManager(155): Displayed com.nowsci.odm/.MainActivity: +554ms (total +22s217ms)
01-11 21:30:54.893: W/GCM(246): DIR: /data/data/com.google.android.gms/app_APP /data/data/com.google.android.gsf
01-11 21:30:55.073: D/dalvikvm(155): GC_CONCURRENT freed 704K, 40% free 5619K/9223K, external 600K/1112K, paused 36ms+57ms
01-11 21:30:55.203: D/dalvikvm(246): GC_CONCURRENT freed 502K, 44% free 4096K/7239K, external 0K/0K, paused 27ms+8ms
01-11 21:30:55.513: W/dalvikvm(1315): threadid=10: thread exiting with uncaught exception (group=0×40018560)
01-11 21:30:55.523: E/AndroidRuntime(1315): FATAL EXCEPTION: AsyncTask #2
01-11 21:30:55.523: E/AndroidRuntime(1315): java.lang.RuntimeException: An error occured while executing doInBackground()
01-11 21:30:55.523: E/AndroidRuntime(1315): at android.os.AsyncTask$3.done(AsyncTask.java:200)
01-11 21:30:55.523: E/AndroidRuntime(1315): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
01-11 21:30:55.523: E/AndroidRuntime(1315): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
01-11 21:30:55.523: E/AndroidRuntime(1315): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
01-11 21:30:55.523: E/AndroidRuntime(1315): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-11 21:30:55.523: E/AndroidRuntime(1315): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-11 21:30:55.523: E/AndroidRuntime(1315): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-11 21:30:55.523: E/AndroidRuntime(1315): at java.lang.Thread.run(Thread.java:1019)
01-11 21:30:55.523: E/AndroidRuntime(1315): Caused by: java.lang.ClassCastException: org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl
01-11 21:30:55.523: E/AndroidRuntime(1315): at com.nowsci.odm.CommonUtilities.invalidPost(CommonUtilities.java:260)
01-11 21:30:55.523: E/AndroidRuntime(1315): at com.nowsci.odm.CommonUtilities.post(CommonUtilities.java:174)
01-11 21:30:55.523: E/AndroidRuntime(1315): at com.nowsci.odm.ServerUtilities$1.doInBackground(ServerUtilities.java:37)
01-11 21:30:55.523: E/AndroidRuntime(1315): at com.nowsci.odm.ServerUtilities$1.doInBackground(ServerUtilities.java:1)
01-11 21:30:55.523: E/AndroidRuntime(1315): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-11 21:30:55.523: E/AndroidRuntime(1315): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-11 21:30:55.523: E/AndroidRuntime(1315): … 4 more
01-11 21:30:55.533: W/ActivityManager(155): Force finishing activity com.nowsci.odm/.MainActivity
01-11 21:30:56.393: I/ActivityManager(155): No longer want com.android.packageinstaller (pid 1104): hidden #16
01-11 21:30:58.733: I/Process(1315): Sending signal. PID: 1315 SIG: 9
01-11 21:30:58.783: W/InputManagerService(155): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@4074c0e8
01-11 21:30:58.833: I/ActivityManager(155): Process com.nowsci.odm (pid 1315) has died.
#####
PS: Feel free to delete my posts if you don’t want the comment section spammed with logfiles.
@tempo It should run fine in 7.2, though I’ve not tested on a device running it. Are you able to get to the registration screen? Did it ask for admin access at start? Out of curiosity do you have require valid SSL on but using a non SSL server?
Installed -> startet -> gave device admin -> configure server -> [client trying to connect to server] -> CRASH
Server is http, I DID uncheck the require SSL box.
Probably important:
My server is in the root of a subdomain, meaning the address is http://sub.domain.tld WITHOUT any subfolder.
The server side is running well (easy install, map works), it displays “no device connected”, so the crash happends befor/during registration.
@tempo: Finally! Your comment helped me find it. Latest APK should solve your issue. Please keep in mind submitting via HTTP is leaving some of your data unencrypted.
Installed website onto a windows home server 2011 and apk onto a HTC One running .4.4 and it’s working flawlessly. even taking pictures from both cameras. Thanks!
Success. The newest apk works well with the above settings!
Thank you for the ssl-warning. Right now I just use a freshly installed ROM with no personal information and I do not have a real SSL certificate on the server.
PS: The link “offering everything up for grabs on github” links to the github main page not your repository
PPS: I tried to import your repository into the ADT-eclipse environment, but failed. Any tipps? This is my first experience with android development.
Installed website on to a Ubuntu clean install. Website loads fine, but when trying to register I get the following error:
“Fatal error: Call to undefined function mcrypt_create_iv() in /var/www/odm/register.php on line 26″
I have installed both php5_mcrypt and php5_curl libs. Do you know what could be causing the error?
Thanks for all of your work on this!
@tempo: Look up guides on using Google Play Services with Eclipse. That’s likely the culprit for the import.
@Park: This is usually due to simply needing to restart HTTPD after installing mcrypt, or mcrypt not being enabled in php.ini. Take a look at: http://stackoverflow.com/questions/12479983/cant-find-mcrypt-call-to-undefined-function-laravel-mcrypt-create-iv
That (among some other minor errors on my side) was actually the solution. I have the project running now.
This is what worked for me:
Checkout ODM
-> import odm (not google-play-services_lib) into workplace
-> open odm project settings (context menu) and update build target to the version you have installed
-> add google_play_services to buildpath
-> remove from Manifest-File:
-> update build target as above in manifest
I can build it now with just three android lint warning.
Thanks again!
Hi!
Gave this a try: From download to registered working device: 10 Minutes
Great work!
I think you know that taking pictures on Android 4.4.2/Nexus 4 crashes the App, right?
Cheers!
Force close on Galaxy S3 i9300 using CM11
[...] dem, Open Device Manager for Android, kurz ODM , handelt es sich um das OpenSource-Pendant des von Google bekannten Android Gerätemanager. Mit [...]
[...] das Vertrauen in das Projekt ODM wird für mich in der Form getrübt, dass ich doch Googleanwendungen, welche ich nicht einen µ [...]
[...] ODM: Open Device Manager for Android [...]
[...] ODM: Open Device Manager for Android Interessante Open-Source-Alternative zum Android-Gerätemanager und für den eigenen Webserver (Permalink) [...]
are you still alive?
Hello,
I’d very much like to have ODM as part of my ownCloud server, given that it itself is a way to avoid using cloud services we cannot control.
In view of this, could anyone help me figure out how to use the existent ownCloud user database, instead of having to register a special ODM one?
Thanks in advance!
Hi -
How would we set up the option to “Receive an SMS to identify insertion of new SIM”
Thanks
Larry
I have “Attempting to register” and instatntly “Server registration failed…” on 4.4.2 KitKat. Any sugestions?
WEB Access authentication could be the problem…?
Hello, I get the following error while trying to deploy on my godaddy server, can you please help??
Undefined class constant ‘MYSQL_ATTR_MAX_BUFFER_SIZE’ in D:\Hosting\9149369\html\odm-web-master\odm\include\db.php on line 7
Thanks!
Cool project, thanx
However, I can not use it, for the app depends on google play services.
http://forum.xda-developers.com/showpost.php?p=50878661&postcount=194
[...] Odm: open device manager for android | nowsci.com [...]
[...] Odm: open device manager for android | nowsci.com [...]
[...] Odm: open device manager for android | nowsci.com [...]
I installed the server and it seems to work. I created my user and I can login.
I installed the apk and it seems to connect to the server.
But something is missing. The apk leaves messages on the server (I see them on the database) but the webUI never shows my device. It says I have no devices registered.
the mobile app did not connect to my server (according to php-fpm logs and apache logs) but keeps telling registration failed. ;-( accessing the odm url via mobile browser works.