Hacker News new | ask | show | jobs
by eggy 3562 days ago
I've dabbled in Android dev, but have always lagged due to not really liking Java. Android Studio was a pleasant experience for me when I tried it this year, and now that C/C++ NDK support is better in this release I am going to give it another go.

I almost feel like I should just go completely Android given the numbers of devices out there is overwhelming compared with Windows/iOS/OS X combined. I will keep up with my other PLs and things simply through osmosis. It's time to join the Borg!

4 comments

Have you tried Kotlin ?

It does a really good job at fixing java's issues and since it outputs bytecode, you can write entire Android apps with it without writing a single line of java.

Not in a year, but it wasn't different enough to me - less verbose, but the same when I long for a Lisp or ML or Haskell for Android! Scala was a thought. And I am now looking at F# again with the recent OS works by MS and the Xamarin situation.

As I wrote downstream, I just need to commit to Java (or Kotlin!) I think!

Well, Scaloid is a thing, so you might want to check it out. AFAIK, it is not really popular for Android development, but it makes some people really happy, like predictive keyboards creators.

As for Xamarin, it really depends on what you want to do. If this is just a hobby project, well go for it. Otherwise, the only use case where it is really interesting is when you need to write an app for both iOS & Android on the cheap.

Check Xamarin documentation they have some Android F# samples.
I did, and they are great. I even have the Continuous App on my iPad Pro which is an F# development environment. It's incredible, but I am concerned about having to still drill down to the Android API, which means Java.

I am thinking more and more against my wish, that biting the bullet and just going Java all the way is the key. Kotlin, Xtend, you still have to read Android SDK code in Java, correct?

In terms of books, a friend bought me "Android 6 for Programmers: An App-Driven Approach (3rd Edition) (Deitel Developer Series)" to get me off the fence. I am going to work through it as much as I can to give Java a fair shake. I used to program in Java 5 for little side projects, but never mobile except for demo or tutorial apps years later.

Is this a good Android/Java book, or should I stay on board with my interests and do an Android Game or Android AI book slant?

I know Java since it was introduced in 1996 and had experience targeting J2ME, so learning Android wasn't that complicated to me.

I own a few PacktPub books that I like, namely:

https://www.packtpub.com/application-development/asynchronou...

https://www.packtpub.com/application-development/android-app...

https://www.packtpub.com/application-development/android-dat...

https://www.packtpub.com/application-development/android-ui-...

I don't know that book, so I cannot judge it, but it is important to try to use your interests as an idea for a possible app that you could use as learning process.

If you stay on Java side than using something like LibGDX will help on the game programing ideas. Or if you prefer to jump into the "wonders" of NDK, then something like SDL or Cocos2D-x.

For the Xamarin side, have you read the Petzold book?

https://blogs.msdn.microsoft.com/microsoft_press/2016/03/31/...

Regarding about using wanted programming languages, my experience with Turbo Pascal, Delphi, Oberon, Smalltalk and many other languages is that straying away from the true path of OS SDK supported languages usually ends in pain as the productivity gains get wasted battling interoperability issues, lack of tool support from the OS vendor and writing FFI bindings.

So nowadays although I dabble in lot of languages, for production code I only use the OS SDK supported languages.

Just be aware that C and C++ are really meant for programming games, bringing code from other platforms or improve performance.

Trying to write an app that isn't a game will make you enjoy the pleasures of JNI calls, given the APIs exposed to the NDK.

I know, since my first attempt was in Java to create a simple app. I know the NDK can be used to create OpenGLES guis, and access the sensors, but for a traditional app it's a lot of work.

Syntax is a subjective thing; I just don't like Java. I was hoping Google was going to come up with something (other than Go), for Android.

I have tried a lot of the work arounds, and simply put, Java is the way to do Android right, so I guess I need to get over it!

Yes, they have done a Reddit AMA a few months ago where they re-stated what they keep saying every time someone asks for an alternative at Google IO.

Java is and will keep being the only main language on Android, with a little help from C++ when needed.

https://www.reddit.com/r/androiddev/comments/4tm8i6/were_on_...

I am on a similar route, but I do like Java, what I dislike is their fork that prevents me to fully use Java™.

Would be a dream if they adopt Swift but then again, the history of blink/webkit fork does come to mind.
If no one used it, they wouldn't be adding better support for it.

The NDK is pervasively used by many many applications; that's why it's getting more support.

For some reason this seems unpopular with the android team, who seem to keep trying to avoid the issue when ever its raised at I/O...but hey, clearly at least someone is paying attention to what the statistics are showing.

Sure, it's some extra hoops to jump though; but shared business logic that you can use on any code base on any platform; that's a really really compelling reason to use the NDK, or one of the stacks based on it (eg. Xamarin, react native).

It's not just for some edge case. The biggest players in the field are doing this.

I think it's misrepresentative to try to characterize this as 'just for games'...

Personally I think they were forced to do it from the games industry, just like it happened with Windows Phone 7, which only allowed pure .NET applications.

However the Android team, which is composed by quite a few ex-Sun Java team members, seems to not share the same love for C++ as Microsoft or the even their own Google clang team do.

While I appreciate the safety we get from Java as the Android main language, Symbian, iOS and WP all managed to have native sandboxes.

> I think it's misrepresentative to try to characterize this as 'just for games'...

I don't think so, because although we are able to use the NDK for coding apps, that is clearly not what the Android team wants to allow us to do, given the list of official APIs, which are all to game development related, even POSIX is only partially supported.

Now in Android N there are changes in place to prevent linking to platform libraries written in C or C++ like libpng and Skia.

It is ironic that we are forced to use JNI to make calls into those platform libraries via their Java bindings.

Also I don't believe that if Jetbrains hadn't decided CLion would be a worthy product, the Android team would have spent any effort to improve the life of NDK developers stranded with their decision to drop Eclipse CDT without any alternative.

If you still don't like it, give Xamarin a shot (yeah I'm kind of pushing Xamarin here just because I couldn't believe how great it was).
See my replies above, but yes, I am a fan of F#, and I wish it were that easy, but I think simply learning Java (or Kotlin as pointed out above) might be the best way in the end. Google has made it very clear they are not working on an alternative from Java dev in Android.
If your intention is to make money from selling apps, then don't let the market share fool you. It appears that it's rare for anyone to make more than 20% on Android compared to what they make on iOS.