Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

I have been running this setup (Cyanogenmod + f-droid, no google apps) for the past 9 months and have been quite happy. I use owncloud for keeping my calendar, contacts, and files sync'ed. K9mail + APG for (signed/encrypted) email. As the article notes OsmAnd is workable, but the what is available through f-droid is 2 versions behind (apparently with low chance of future updates due to difficulties building it).

Many apps are open source (e.g., github, wordpress, coinbase, 2FA apps compatible with many services) and so are available through f-droid. Others, like TextSecure are really easy to build from source and install.

I have occasionally downloaded apps through one of the APK downloader services mentioned in the article comments -- I've had mixed luck. Some work flawlessly, others don't work at all without the google apps.

It would be awesome to see Mozilla's location service [0] integrated into Cyanogen to replace the google location services (which are of course disabled if you don't install google apps).

[0] https://location.services.mozilla.com/



>I have occasionally downloaded apps through one of the APK downloader services mentioned in the article comments -- I've had mixed luck.

One of the biggest issue of running Apps (open source or not) is the inclusion of the Play Store API in the app itself. These apps when not logged into the play store usually crash with NullPointerExceptions. Please... if you are an Android developer... expect your third-party services/APIs to be missing or to crash and handle that case... If you include the Map API or several other Google Services APIs in your app and the Play Store is missing or the user does not have a registered account... calls to those services will most likely result in NullPointerExceptions. Tell me to deal with it, don't crash.


Presumably if developers only distribute their app via the Play Store, they aren't too worried about whether their app users are using the Play Store.


presumably, as a programmer, you check return values. Especially if they could be a null reference


Any reference in Java can be null, as is the case in most languages. So developers only check the ones they know "could" be null, in normal operation. If you only distribute your app via the Play Store, attempting to access it will never fail, thus there's no more point in checking for null pointers than there is in checking the result of String.split: it will never fail, short of something wacky and unexpected like a broken JVM.


> So developers only check the ones they know "could" be null, in normal operation.

Not the good ones. Normal operation isn't when you're dealing with a mobile device, there could be any number of reasons why your app can't reach a certain service delivered by some API so better to be prepared for that eventuality.


Yes, a good programmer writes a robust application, but ignoring the specifics of this case is being entirely disingenuous. If I write an app to use the Play API and only distribute it via the Play Store then there is no good reason for me to spend my time writing `if (foo != null)` all over the place to placate someone trying to circumvent the official way of downloading my application.

You have to balance the tradeoffs of bloated code and pointless error checking with adding features and improving the program. The more error checking code one writes the more one must maintain and the higher the potential for bugs.


> The more error checking code one writes the more one must maintain and the higher the potential for bugs.

That's an artifact of the chosen environment. Not checking for errors in that environment is a bug.


Artifact or not, it's still something one must maintain. Not checking for errors is not a bug, it is you choosing to not support a fringe group of users because it is worth your time and effort. You can call it whatever you like, but that is the reality of the situation. There are tradeoffs to be made and code to be maintained.


I don't think it is a matter of not being able to reach Google the network service but the Google provided services that run on the phone (they may well then access the network and provide useful error messages that you fully handle). It is more like a case of a missing library than a loss of network connectivity. There is a good argument that you should always check anyway but there is also the argument that the app is only designed to run on devices with the Google Play services installed and that you only sell it that way so anyone without must be pirating anyway.

Besides that what do you do to handle the loss of something your app requires as a basic service? A nice error beats NullPointer but not by much.


Actually the way you check for Google Play services doesn't involve nulls at all, it's a status code.

And related to null-checking, I took the pervasive approach in one of my apps for fun. It's hilarious - almost 1/3 of my app is checking if something is null. Makes you wish for a switch to a language where nulls don't exist unless explicitly asked for.


Not always. If you use maps, for instance, then calling getMap on a map fragment when Play Services isn't installed will give you back a null reference.


I agree that an app shouldn't crash, but piracy is a problem.

Google In-App purchases are safe, so if that's how you monetize, I don't see why the app should be allowed to work anywhere else but in Google's environment.

It's different if the app is open source or you don't need to monetize (sadly, not everyone can afford that luxury), but even there it depends on how important those Play Store API features are to the functionality of the app.


Apps that are provided with for free on Google Play, IAP or no IAP, don't have any fear of piracy from being installed from another source. If Google Play is not available when your app runs, if the user could use that app for some purpose, it is a really good idea to make sure it doesn't crash. Indeed, most free apps with IAPs don't require you to buy the IAP immediately at launch, you can use the app to some degree.


It just depends on how much extra cost is invoked by having more users who never pay. (for example support, server costs)

I just don't think that you can follow some rule dogmatically, because for some it might be worth the exposure, for some the extra costs might outweigh the benefits.

This is something that I would decide on a case by case basis.


I just don't think that you can follow some rule dogmatically

Sure you can, if the rule is "don't write shitty software that crashes". In which scenario do you think users are more likely to buy: when an app crashes with no indication of what caused it, or if an app pops up a message along the lines of "we couldn't connect to Google Play; is it disabled for some reason?"


I stated clearly, that every developer should aspire to develop apps, that do not crash.


don't have any fear of piracy from being installed from another source

Even if they're currently fully unmonetized, many such apps exist on the Play store because they can be updated at any time to include in app purchases, etc.


There is no such thing as "piracy" in these situations. There may arguably be a freeriding problem though.


I wonder if it's possible to build an emulator image based on CyanogenMod with no Play Services. That'd help with testing the apps, but it's another "device" to target.

Developers would be able to see from the crash reports how many NPEs from missing Play Services they're getting and prioritise accordingly.


Not only it's possible, it is supported out of the box. When you are configuring the emulator, you are choosing the OS version (API level). You have to choose, whether you want "Android" or "Google API".


This is really informative post for separating Android from Google, to the maximum extent for conscientious people. Location, contacts, wifi access points getting shared with Google very much annoys me. But I was even more peeved of Android when there was no way to store contacts locally. No option to store on the phone, but instead you had to save to google account. I am not doing that. So I went the whole hog and installed CyanogenMod and Xprivacy module (the least I could do). And also disabled Google contacts sync (this enables local storage, did not try it on stock android). So I am annoyed that Google is so invasive in gathering data, but also relish such a beautifully designed OS and the flexibility it provides. And also, appreciate the hard work of developers. Android makes so much possible.


> But I was even more peeved of Android when there was no way to store contacts locally. No option to store on the phone, but instead you had to save to Google account.

Are you sure about this? This may be unique to Touchwiz or something, but you can save a contact to either the device or to Google contacts.


I am using Nexus 4, so no touchwiz. Only way (or the one in my knowledge) is to disable Google Contacts Sync. The problem with this one is if the switch somehow gets enabled one day, there goes your privacy.


When you disable the backup option on your phone, it warns and asks you to confirm that you want your data to be erased from Googles machines. So there's that. But yes, it's terrifying that millions of home WiFi passwords are stored on Google servers.


No. I did not receive such prompt. The prompt I received was, disabling it can affect other apps. And the two contacts I accidently saved, are still in the gmail account, so there is that. The gmail account was a burner one for the phone.


I had the same problem when I got a nexus 5. No way to store contact information locally without disabling google contacts sync. And I only knew to do that by complaining on HN at the time and getting the suggestion.


I haven't had this problem, but I literally cannot create a calendar event on my phone without adding a Google account. I can't make just a local calendar event without adding a fake CalDAV account, or hooking up a real one with Owncloud.


> No option to store on the phone, but instead you had to save to google account. I am not doing that.

I have no problems whatsoever storing contacts on my device...and my friend puts all his on his SIM card.


I am using Nexus 4 with latest and stock Android version. I am not the unique one with this problem either. http://android.stackexchange.com/questions/24331/add-contact...


There is an ongoing project on XDA (Android ROM/development forum) call NOGAPPS [1], which aims to replace as much of Google's services as possible. I have no idea how far along it is, but there appear to be active users in any case.

They have a NetworkLocation replacement which uses Apple's location services, and the dev is planning to add Mozilla Location services in the future. It also replaces Google Maps with OSM.

[1] http://forum.xda-developers.com/showthread.php?t=1715375


I keep looking for a lighterweight alternative to OwnCloud for Calendar/Contacts.

I really want to switchover to a proper CardDav/CalDav setup that actually supports "Tasks" in my calendar, exactly how Google doesn't and continually fails to.


> I keep looking for a lighterweight alternative to OwnCloud for Calendar/Contacts.

BaiKal[1] is just this. It too is open-source, and it's a million times lighter. Literally. I've gone from 100% CPU use to complete idling. It is also self-contained via Sqlite, with no need for "heavy" things like MySQL backing.

The only bad thing is that it might be harder to get running on a shared host, due to its "web-app" part being hosted in a sub-directory of the actual application-structure.

[1] http://baikal-server.com/


I haven't used with an Android client, but DAViCal has been working well for me for years: http://www.davical.org/


I'm also eager to drop ownCloud ('pwnCloud', I keep hearing), but I think I'll replace it with Seafile + Fastmail's CardDav/CalDav. CardDav is not yet available but promised soon.

I wish there were a trustworthy source of prebuilt pure AOSP ROMS, like the source images Google release. Compiling them is no small feat and I'm worried I'll brick my device.

With a stock AOSP ROM + Fastmail contacts & calendaring, I think I'll finally have the minimalist install I am looking for.


I tried to setup a Seafile server a while ago, and it looked kind of slick at first, but it was pretty hard to get up. Lots of dependencies, and then the first thing after I got it running was that my server got 100% load and could only be accessed after power cycling.


> prebuilt pure AOSP ROMS

What's wrong with Cyanogenmod? They even provide a dead easy installer which unlocks the bootloader, changes the recovery and then flashes the ROM. And they support a good number of devices out there.


Did you use GMail before Fastmail? I'm not sure I want to give up push email yet. Do you find that you're missing emails or that IMAP IDLE uses too much battery?


I did. I had three GMail accounts, deleted one, moved one to Fastmail, and now use K-9 mail for both the GMail and Fastmail accounts. Performance is great and definitely no issues with battery life or missing emails. Google have recently put their regular email app on the Play Store, so it's possible to keep an apk copy for sideloading if K-9 isn't your preference.

My only problem in the past was absolutely horrid syncing and GPS battery drain with Cyanogenmod. I keep going back to try, since first running it on my HTC G1 about 4 years ago. No other ROM gives me trouble, only Cyanogenmod. This is why I'm interested in a 'plain vanilla' as possible AOSP ROM. I'm back on stock 4.4 (rooted) and looking to move back to a non-gapps version soon.


I've used GMail before I switched to Fastmail. Not missing any e-mails, don't notice any excessive battery drain (using K-9 Mail here)


Isn't TextSecure already built into Cyanogen SMS app? And anyway dependent on the Google Play Services?


Correct, the push notification aspect is dependent on Google Play Serices (in both the stand-alone app and the CM SMS integration). But sending encrypted SMS messages works without Google Play, so the app still has functional aspects.


TextSecure uses Google's push service because there is no viable alternative available.


Than, what's the point of using a secure communication app if you must also install a spying rootkit to make it work? For me it makes the whole TS not viable.


Sadly, the author of TextSecure doesn't think so. He thinks side-loading of apps and alternate app stores are a problem (he says that allowing installs that don't come from Play store is "returning to desktop security model which is completely broken" [1]). He also opposes TextSecure being on f-droid, etc.

[1]: https://github.com/WhisperSystems/TextSecure/issues/127


Please see http://support.whispersystems.org/customer/portal/articles/1...

If you can suggest viable alternatives, I am certain that the team would love to drop Google from it.


I'm also running CyanogenMod without the mothership, and that's exactly what I thought. While apps such as TextSecure appear to have a good reputation needing to install probably backdoored proprietary software to obtain them seems to defeat the objective.


seems that they are trying to replace Google's push API with a websocket-based solution. See https://github.com/WhisperSystems/TextSecure/issues/1106


I think what I would miss is quality navigation. This, due to my absolutely non-existent sense of direction, is a major reason for why I purchased a cell phone in the first place. I tried a few non-Google navigation systems but didn't really find anything compelling.


Regarding OsmAnd: You can download free fully-featured releases on the project's site as well [1] (and you may consider a PayPal donation instead of paying via the Play Store then [2]).

[1]: http://download.osmand.net/releases/ [2]: https://code.google.com/p/osmand/




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: