30: A Brief Visit to Android
00:00:00
◼
►
Welcome to Under the Radar, a show about independent iOS app development.
00:00:03
◼
►
I'm Marco Arment.
00:00:05
◼
►
And I'm David Smith.
00:00:06
◼
►
Under the Radar is never the longer than 30 minutes, so let's get started.
00:00:10
◼
►
So in a bit of a surprise move in the run-up to WWDC, we are not going to be talking about
00:00:19
◼
►
In a strange way, I took our own advice.
00:00:21
◼
►
If you've been listening back since, I think it was episode 25, where we talked a little
00:00:25
◼
►
bit about what do you do in the kind of awkward time right in the run-up before WWDC, where
00:00:32
◼
►
you don't necessarily want to start a whole new project, you don't necessarily want to
00:00:36
◼
►
do something big because when WWDC happens in about a little over a week now, you may
00:00:43
◼
►
have to drop everything and be moving in a totally different direction and all those
00:00:47
◼
►
types of things. And so I've been spending the last couple of weeks since then doing
00:00:54
◼
►
updates and polishing on most of my applications.
00:00:57
◼
►
And I got to the point where I had most of my iOS apps in a really good place.
00:01:03
◼
►
And so I started looking around at my various other projects that aren't kind of like my
00:01:07
◼
►
main focuses, and I noticed that the Android app that I had released many, many years ago,
00:01:15
◼
►
mostly as an experiment, but nevertheless out in the world, had rather been neglected
00:01:23
◼
►
insofar as it was last updated in August of 2012, which is something like 196 weeks ago.
00:01:33
◼
►
But I went and looked, and in its download stats, people are still downloading it, it
00:01:37
◼
►
still has a reasonable amount of interest.
00:01:41
◼
►
And so I thought to myself, "Well, this is probably one of the few windows I'm going
00:01:45
◼
►
to have where it's going to make sense for me to dive back into Android development,
00:01:51
◼
►
to work on an Android app and get it updated, get something out before WWDC.
00:01:57
◼
►
Because it's pretty rare that I have these windows for like a couple of weeks without
00:02:00
◼
►
any other pressing work.
00:02:02
◼
►
And so that's what I did.
00:02:04
◼
►
And I thought it would be an interesting discussion for today to unpack a little bit of the experience
00:02:08
◼
►
of that because it's interesting.
00:02:10
◼
►
I'm by no means an Android expert.
00:02:12
◼
►
I'm the opposite of that.
00:02:14
◼
►
I am barely competent as an Android developer.
00:02:19
◼
►
If it wasn't that I learned Java as the first sort of academic language I ever learned,
00:02:24
◼
►
like back when I was doing computer science in high school, I probably wouldn't be able
00:02:28
◼
►
to even attempt it, because I have very limited experience.
00:02:33
◼
►
But it's interesting to look at it coming from a day-to-day iOS developer diving into
00:02:40
◼
►
Android, especially because the last time I dived into Android was almost four years
00:02:46
◼
►
So that's kind of what I wanted to dive into.
00:02:49
◼
►
Have you ever done any Android work?
00:02:51
◼
►
- So when, I mean the short answer is no.
00:02:55
◼
►
The slightly longer answer is when the Nexus One
00:03:00
◼
►
first came out.
00:03:01
◼
►
I decided, I was working on Instapaper at the time,
00:03:04
◼
►
a few months I think before the iPad was announced.
00:03:07
◼
►
Something in that time span, so you know,
00:03:09
◼
►
early 2010 or late 2009.
00:03:12
◼
►
And so I had this Nexus phone and so my first idea
00:03:15
◼
►
was let me just try to optimize the website for it
00:03:17
◼
►
because it had that weird,
00:03:19
◼
►
I believe it was either the pen tile display
00:03:21
◼
►
or something like a pen tile display
00:03:23
◼
►
where the RGB sub-pixels were not lined up
00:03:26
◼
►
exactly the way they normally are
00:03:27
◼
►
like on a regular screen layout.
00:03:30
◼
►
And so there were a lot more green pixels
00:03:32
◼
►
than anything else.
00:03:33
◼
►
So I started experimenting with color schemes
00:03:35
◼
►
of what makes the most legible text.
00:03:38
◼
►
So things like, should I do green on black?
00:03:41
◼
►
I was like, can I do things to maximize battery life
00:03:43
◼
►
that are still legible that will maybe
00:03:46
◼
►
let me to save on brightness by using more green
00:03:49
◼
►
than other colors or whatever else.
00:03:51
◼
►
And then a few weeks into the experimentation,
00:03:53
◼
►
the iPad was announced, and then I stopped working on it.
00:03:56
◼
►
And that was the end of that.
00:03:57
◼
►
Because the iPad was just way more important for me
00:04:01
◼
►
to be working on for a reading app.
00:04:03
◼
►
And that proved to be correct.
00:04:05
◼
►
When Instapaper eventually had its own Android app,
00:04:08
◼
►
I contracted that out.
00:04:10
◼
►
I never even saw the code.
00:04:12
◼
►
I have never seen what Android development is actually like.
00:04:16
◼
►
- So then I guess this will be an enlightening journey
00:04:19
◼
►
for you to hear what it's like
00:04:21
◼
►
to dive into Android development.
00:04:23
◼
►
- Yeah, I mean, I think it's funny that here you are saying
00:04:25
◼
►
like, well, I'm not that much of an expert.
00:04:26
◼
►
Like, you would know way more than I do.
00:04:28
◼
►
You've actually done it.
00:04:28
◼
►
Like, doing it at all.
00:04:31
◼
►
- I have a whole two weeks experience
00:04:33
◼
►
with Android at this point.
00:04:34
◼
►
- That is literally infinitely more than I have.
00:04:38
◼
►
- So, it seems like the best place to start
00:04:40
◼
►
was to talk through some of the things that I like about Android, some of the things that
00:04:45
◼
►
coming to it I was pleasantly surprised by.
00:04:49
◼
►
And the first thing that comes to mind is Android Studio, which is their new, well new
00:04:55
◼
►
to me, development environment that he used to make Android apps by you download Eclipse,
00:05:01
◼
►
which is sort of like the open source generic Java SD development environment, and you'd
00:05:07
◼
►
add all these extra add-ons and plugins to it, and that would become the Android development
00:05:13
◼
►
environment. But I believe Google either partnered or bought or somehow got a hold of the IntelliJ
00:05:18
◼
►
environment and have turned that into their development environment. And I gotta say,
00:05:24
◼
►
coming from Xcode, visually it's kind of rough. It has that kind of cross-platform generic look
00:05:33
◼
►
to it that a lot of Java apps have, so it doesn't look like Xcode in terms of being
00:05:38
◼
►
really native on the Mac, but functionally it's actually really pretty good.
00:05:43
◼
►
And there's a lot of things that -- and a lot of this has to do with -- I mean, most
00:05:47
◼
►
Java tools have had this for a while, and I've always kind of wondered why Objective-C
00:05:50
◼
►
and maybe Swift tools have it, I don't think so.
00:05:53
◼
►
There's a lot of things where it can do auto imports for you.
00:05:58
◼
►
So if the first time you mention a new class, it'll be like, hey, would you like me to import
00:06:04
◼
►
this for you?
00:06:05
◼
►
And those types of things and its refactoring tools and in general environment is actually
00:06:12
◼
►
pretty pleasant to work in, especially even all the stuff that it has to do in terms of
00:06:16
◼
►
managing different emulators and devices and all this kind of stuff.
00:06:21
◼
►
There's a lot of moving parts, it seems, with developing an Android app, which would kind
00:06:25
◼
►
of makes sense given the flexibility of the platform.
00:06:31
◼
►
And their development tools are actually surprisingly good at that and related to that.
00:06:35
◼
►
Like, it's kind of funny, they have emulators rather than simulators.
00:06:39
◼
►
That's an important distinction though too, because aren't the emulators, because they're
00:06:43
◼
►
emulating, substantially slower than the iOS simulator?
00:06:48
◼
►
Well, so this was the thing, that was my experience four years ago, where the Android emulator,
00:06:53
◼
►
you'd start it and it would run, it would spend many minutes trying to boot up and all
00:07:00
◼
►
this type of thing. Whereas now, I believe they're doing some kind of Intel hypervisor
00:07:07
◼
►
thing with them now, I think it's the HaxM process or something. There's a way in which
00:07:13
◼
►
the emulators are now running at very close to native speeds, which once they've crossed
00:07:20
◼
►
over that point means that the emulators are so much better than a simulator would be,
00:07:24
◼
►
because it's an actual representation, especially with, as I'll get to with the not-so-great
00:07:29
◼
►
parts, when you're starting to deal with the number of devices you have to manage on Android.
00:07:33
◼
►
Being able to, I can create like a Nexus 7, and it's pretty close to an actual Nexus 7
00:07:41
◼
►
in terms of how it will behave and operate, and you don't have the same problem in the
00:07:47
◼
►
the same way with the simulator where a lot of things on iOS, they sort of work in the
00:07:52
◼
►
simulator but they don't work, it'll work on the simulator but it won't work on the
00:07:56
◼
►
device or vice versa, or there's a whole bunch of APIs that you can only use on device you
00:08:01
◼
►
can't use in the simulator, whereas with the Android stuff it seems like the emulators
00:08:06
◼
►
are true emulators that you can do pretty much anything with that you would be able
00:08:11
◼
►
to do on a device, which is really nice.
00:08:14
◼
►
And so in general, I'd give the tools for Android
00:08:16
◼
►
a big thumbs up.
00:08:17
◼
►
It seems like they really have come a long way
00:08:20
◼
►
in the last four years, and make for a pretty pleasant place
00:08:24
◼
►
That sounds great.
00:08:25
◼
►
I think there was one or two times where I did install
00:08:27
◼
►
the SDK long ago, in the early days,
00:08:30
◼
►
probably about four years ago when you were doing
00:08:33
◼
►
your previous work.
00:08:34
◼
►
And I had only very negative things
00:08:36
◼
►
to say about it because of things like performance issues
00:08:39
◼
►
and everything else.
00:08:40
◼
►
But if it's come a long way, that's fantastic.
00:08:42
◼
►
because I know well enough in this industry
00:08:46
◼
►
to never say never, and so I very well might find myself
00:08:49
◼
►
doing Android development at some point in the future,
00:08:51
◼
►
so it's nice to know that these tools are way better
00:08:54
◼
►
and way further ahead of where I last saw them.
00:08:58
◼
►
- Yeah, and it definitely seems like,
00:09:00
◼
►
I mean, it's like, it definitely sounds a bit funny,
00:09:03
◼
►
'cause I think of how, in my mind,
00:09:06
◼
►
they were just as they were four years ago,
00:09:08
◼
►
but obviously this is very important
00:09:10
◼
►
for Google and the Google developer community that this has definitely been driving forward
00:09:15
◼
►
and they are making great progress there.
00:09:19
◼
►
And the actual building things too has gotten...
00:09:21
◼
►
I mean, I guess this hasn't changed, but this is something that was quite a nice relief
00:09:26
◼
►
coming back from iOS work.
00:09:29
◼
►
One thing that I noticed too is back when I was doing my early Android work, the iOS
00:09:36
◼
►
of ecosystem was very unfragmented from a screen size resolution device perspective.
00:09:43
◼
►
I can't remember exactly which phone we would have had then, but at the most I think
00:09:47
◼
►
we would have had two different device screens back in 2012.
00:09:52
◼
►
It was very straightforward on the layout side and handling things.
00:09:57
◼
►
You didn't have a lot of flexible layouts and all the size class stuff and all this
00:10:01
◼
►
other stuff that has kind of been bolted on to iOS since.
00:10:05
◼
►
always had to have that. And so back in the day I looked at this and it was like, "Oh
00:10:09
◼
►
man, this is so complicated, having to work out and making sure that my app can scale
00:10:13
◼
►
dynamically." But the strange thing is now, coming back to it, it's really nice that it's
00:10:19
◼
►
kind of built into the fundamentals of the way everything works. Everything is dynamic
00:10:24
◼
►
by default. In general, nothing on Android, when you're working on it, they're all very
00:10:30
◼
►
flexible layouts, in some ways very similar to the way the WatchKit SDK is, where everything
00:10:37
◼
►
is sort of designed to flow and be dynamic and not have any sort of hard-coded values
00:10:44
◼
►
Because for an Android app, there are so many different device types that it kind of has
00:10:49
◼
►
And it's been really refreshing working on that, versus when I do work on iOS now, like
00:10:54
◼
►
all the size class stuff and some of the things that you can do with auto layout potentially,
00:11:00
◼
►
can do a lot of this kind of stuff, but it's always, it feels a bit more shoehorned in
00:11:06
◼
►
on iOS to me. Whereas on Android, it's because it's always had to be in there, it feels quite
00:11:10
◼
►
natural. And on the other, a random little side thing that I've absolutely really, really
00:11:16
◼
►
love now that I've experienced it is the Android equivalent of nibs, where you would sort of
00:11:24
◼
►
UI components that you're expressing not in code is they're just big, easily editable
00:11:31
◼
►
XML files, which if you have ever viewed the source on a nib, it's the complete opposite.
00:11:39
◼
►
It's this very nice declarative markup language that you can specify your UI in, that you
00:11:45
◼
►
can view in source control really easily.
00:11:48
◼
►
If you make a change, you can actually see a diff, whereas with a nib, any time you even
00:11:53
◼
►
can look at it, it'll change in source control in ways that don't make any sense, where all
00:11:58
◼
►
of a sudden all these components got jumped around, and that's certainly gotten better.
00:12:03
◼
►
But it is lovely to be able to look at something, in their design tool, you can look at it like
00:12:08
◼
►
the visual version or the text version.
00:12:11
◼
►
And often I find I just work in the text version.
00:12:13
◼
►
And it's kind of nice to have this type of thing that's...
00:12:17
◼
►
UI is such an essential part of building an application, that having precision, being
00:12:23
◼
►
able to go in and look at the code,
00:12:25
◼
►
that's the markup, I guess, for that UI,
00:12:28
◼
►
and just make little tweaks and changes in a very precise way,
00:12:31
◼
►
I've found to be really, really helpful.
00:12:33
◼
►
Combining that with the dynamic layout stuff,
00:12:36
◼
►
making a UI on Android is actually pretty nice.
00:12:39
◼
►
That sounds awesome, honestly.
00:12:41
◼
►
It sounds very refreshing compared
00:12:43
◼
►
to some of these challenges we face in iOS,
00:12:45
◼
►
some of the things that aren't so great.
00:12:47
◼
►
As you mentioned, that sounds nice.
00:12:49
◼
►
Because we are in a world now where
00:12:52
◼
►
I think we are moving towards having more variety in screen sizes, not less, and Android
00:12:58
◼
►
was first to that, obviously. And so, you know, anything the tools can do to help that
00:13:03
◼
►
is great. And, you know, iOS does have lots of tools to assist with that and lots of APIs
00:13:08
◼
►
that are good at dealing with that, but I think you made it where, like, Android was
00:13:11
◼
►
written that way from day one out of necessity and by design, whereas iOS, a lot of it does
00:13:15
◼
►
feel still pretty bolted on.
00:13:17
◼
►
Yeah, and it's interesting because this experience of the last couple of weeks has
00:13:24
◼
►
been definitely very helpful in making sure that I'm aware of the blind spots I have
00:13:30
◼
►
in terms of if I'm going to be an independent iOS developer, which is sort of what I'd
00:13:35
◼
►
say is my title, if I don't have at least a glancing familiarity with Android and being
00:13:41
◼
►
aware with it, it seems like I'm kind of tying one hand behind my back in terms of
00:13:45
◼
►
my ability to do what I'm doing.
00:13:47
◼
►
And I'm not saying that I'm gonna be diving in head first
00:13:49
◼
►
and becoming an Android developer.
00:13:50
◼
►
Like, let's not get crazy.
00:13:53
◼
►
- I would love to see you get crazy.
00:13:55
◼
►
- Just go crazy.
00:13:58
◼
►
- I love that that's your version of getting crazy too.
00:13:59
◼
►
- That's me getting crazy.
00:14:00
◼
►
- Getting crazy is becoming an Android developer.
00:14:03
◼
►
Which, and just more than you already are one.
00:14:08
◼
►
That's just how I roll.
00:14:09
◼
►
So, I look at this though, and I'm like, okay,
00:14:12
◼
►
this is not as bad as I had in my mind,
00:14:14
◼
►
And it's a good thing to be aware of.
00:14:17
◼
►
And so I'm glad I've kind of gone through this process.
00:14:19
◼
►
And another thing that I've loved that's been kind of a nice--
00:14:24
◼
►
and a nice thing to see is the Google Play infrastructure,
00:14:28
◼
►
which you kind of imagine, given that Google made it,
00:14:31
◼
►
is really good.
00:14:33
◼
►
The number of things that you can just do natively,
00:14:36
◼
►
which is their equivalent of iTunes Connect for us,
00:14:41
◼
►
is there's a lot of stuff just baked into that that
00:14:44
◼
►
really powerful and really clean and simple and it's nice, I mean obviously there's things
00:14:48
◼
►
like not having review, and even I've run into this, like I haven't fully submitted
00:14:53
◼
►
my app yet but I've done a couple of beta tests just internally, and it's really nice
00:14:59
◼
►
that you just upload the APK file and you say add who you want to be beyond the beta
00:15:05
◼
►
test which at this point is just myself, but then in the Google Play Store you just, like
00:15:11
◼
►
an app update will appear in just the same way that if I push it out to a customer through
00:15:17
◼
►
the main interface, you get a little update.
00:15:19
◼
►
It would be like in the equivalent of in the App Store in that Updates tab, a little thing
00:15:23
◼
►
would pop up.
00:15:24
◼
►
There's no extra app that you have to install, there's no extra complexity there.
00:15:28
◼
►
Like your beta testers just get an update.
00:15:31
◼
►
It just happens to be a beta update.
00:15:33
◼
►
And you see a lot of these kinds of things that are just really nice.
00:15:36
◼
►
Their analytics is really good.
00:15:40
◼
►
All the things are kind of just baked in nicely together, whereas I feel like iTunes Connect
00:15:44
◼
►
has been adding a lot of this.
00:15:47
◼
►
For a while, Google Play definitely destroyed iTunes Connect in terms of analytics, in terms
00:15:51
◼
►
of being able to see a lot of information, which is really important in Android, where
00:15:57
◼
►
I go into the analytics and I break down the distribution of my installs by Android version
00:16:04
◼
►
or device type or device screen size.
00:16:07
◼
►
And on iOS, a lot of those pie charts are kind of boring because it's like 80% of people
00:16:12
◼
►
are on the latest iOS version, and the distribution between iPhone and iPad is fairly stable and
00:16:19
◼
►
so straightforward.
00:16:20
◼
►
But a lot of these pie graphs for Android are pretty complicated in terms of which versions
00:16:25
◼
►
of Android is things.
00:16:26
◼
►
But it's all been in there and is very easy to sort of understand and go through.
00:16:31
◼
►
iTunes Connect is getting analytics and stuff, which is great, but it's kind of the interface
00:16:36
◼
►
that they have in Google Play is really nice.
00:16:38
◼
►
And it's been a nice, pleasant experience
00:16:42
◼
►
to be good to go in there and work with.
00:16:46
◼
►
- Our sponsor this week is Hover.
00:16:48
◼
►
When you have a great idea for your project or blog,
00:16:51
◼
►
you need to give it a great domain name.
00:16:52
◼
►
And finding that perfect domain name
00:16:53
◼
►
is ridiculously easy with Hover.
00:16:56
◼
►
Now, it's incredibly easy with Hover
00:16:57
◼
►
to set up your domain name
00:16:58
◼
►
with your most popular website builders.
00:17:00
◼
►
With this feature called Hover Connect,
00:17:02
◼
►
you can set it up automatically with just a few clicks
00:17:04
◼
►
with tons of popular website hosts.
00:17:06
◼
►
There's no more digging through help articles
00:17:08
◼
►
to figure out the DNS settings or anything else like that.
00:17:10
◼
►
Hover Connect lets you set it up very quickly and easily.
00:17:13
◼
►
And they also have transfers that are really easy.
00:17:15
◼
►
If you already have a bunch of domains
00:17:16
◼
►
scattered across other domain providers,
00:17:18
◼
►
you can save tons of money by bringing them all to Hover.
00:17:21
◼
►
All eligible domains will include free Whois privacy,
00:17:23
◼
►
and with volume discounts,
00:17:24
◼
►
the more domains you have in your account,
00:17:26
◼
►
the more of a discount Hover will automatically apply.
00:17:28
◼
►
So use Hover today to find the perfect domain name
00:17:30
◼
►
for your idea.
00:17:32
◼
►
Go to hover.com and use the promo code FASTREVIEW
00:17:34
◼
►
at checkout to save 10% off your first purchase.
00:17:37
◼
►
Once again, it's hover.com/promocode/fastreview
00:17:40
◼
►
at checkout for 10% off your first purchase.
00:17:42
◼
►
Thank you so much to Hover for their support of this show
00:17:44
◼
►
and all of Relay FM.
00:17:46
◼
►
Now, you probably noticed that the first few things
00:17:49
◼
►
that I was talking about of being an Android developer
00:17:52
◼
►
were pretty positive.
00:17:53
◼
►
Overall, it's a pretty good experience.
00:17:56
◼
►
It's not all positive, and I think
00:17:58
◼
►
it seemed like I might spend the rest of the episode kind
00:18:01
◼
►
of unpacking some of the things that were not so great.
00:18:05
◼
►
And the first one that I wanted to talk about is the mind-bending experience of thinking
00:18:12
◼
►
through and managing device compatibility.
00:18:15
◼
►
So if I go into Google Play, and it has a little area that says, "This build of your
00:18:23
◼
►
app is compatible to work with a certain number of devices."
00:18:27
◼
►
and for my application right now,
00:18:29
◼
►
that number of devices is 12,346.
00:18:33
◼
►
- Wait, that's like models, not like users?
00:18:36
◼
►
- That is models, so like in a way that like a 4S
00:18:40
◼
►
or a 5S or a 6S would be a different device,
00:18:44
◼
►
I believe it's 12,346, 12,346 devices.
00:18:49
◼
►
- Well, this raises the obvious question,
00:18:50
◼
►
how many Android devices are there?
00:18:53
◼
►
- I don't know, a lot.
00:18:55
◼
►
- Wow. - More than that,
00:18:57
◼
►
Because I'm only at this point supporting back to Android 4.4,
00:19:03
◼
►
which is a relatively old but not so old version.
00:19:07
◼
►
So there's a lot of devices.
00:19:09
◼
►
And in practical terms, some of that doesn't really matter.
00:19:13
◼
►
A lot of these devices are similar.
00:19:16
◼
►
If you're trying to worry-- I don't
00:19:18
◼
►
worry about the difference between some iOS devices
00:19:22
◼
►
too much these days either.
00:19:24
◼
►
Conceptually, that lies them into the different screen
00:19:26
◼
►
sizes. I don't differentiate between the 5 and the 5S, so maybe there's similar things.
00:19:32
◼
►
But still, that's a lot of devices.
00:19:34
◼
►
Yeah, I mean, it sounds like it's almost like the web in the world of Android in a
00:19:37
◼
►
lot of ways, where it's like you have with your layout, you have this kind of flexible
00:19:42
◼
►
flow box-based thing because you're really just targeting who knows what screen size.
00:19:47
◼
►
It seems like the device models, it would probably be not that much different for most
00:19:53
◼
►
and this obviously excludes things like games where the exact hardware specs are a lot more
00:19:58
◼
►
important. But it seems like it'd be kind of like worrying about what kind of laptop
00:20:03
◼
►
people are using to connect to your website. You basically need to know the screen size
00:20:07
◼
►
and their browser, and that's about it.
00:20:11
◼
►
And it's a weird thing though, because on my desk right now, where we're podcasting,
00:20:16
◼
►
I can see probably eight to ten iOS devices that I've accumulated over the years, because
00:20:23
◼
►
I've learned the lesson the hard way of I basically have kept every single iOS device
00:20:30
◼
►
I've ever bought, and I only ever will give it to a friend or a family member or something
00:20:37
◼
►
when it has aged out of compatibility with my applications. So at this point, anything
00:20:43
◼
►
from a 4S and up, I've capped.
00:20:46
◼
►
I have all these devices, whereas on Android, I have one Android device.
00:20:50
◼
►
I think I have a Nexus 5, I think it's a Nexus 5, I'm not really sure.
00:20:54
◼
►
I have a Nexus device that I bought a while back just to kind of play with and try, and
00:21:01
◼
►
so I have to rely on emulators a lot.
00:21:04
◼
►
Like I have, I don't know, at this point I think I have tested my app on six different
00:21:09
◼
►
trying to try different things, but it's a really weird feeling to not be able to try
00:21:17
◼
►
the app that you're shipping on a representative sample of the platforms or the devices where
00:21:24
◼
►
you expect it to actually be used.
00:21:27
◼
►
Which is, maybe it doesn't matter in practice, I'm not Alex Oft to find out when I actually
00:21:30
◼
►
ship this update, but it is really disconcerting coming from the iOS world where I have a,
00:21:37
◼
►
a physical copy of every iPhone that my apps currently support available to me.
00:21:46
◼
►
Somewhere in this house, all the way back from my 4S from years ago to my 6S now, I
00:21:53
◼
►
have a device that I can try my apps on.
00:21:56
◼
►
Whereas I'm obviously never going to have 12,000 devices to test on, and even the thought
00:22:02
◼
►
of trying to have a representative sample of those gets really expensive and complicated,
00:22:06
◼
►
because these aren't devices that I buy naturally.
00:22:10
◼
►
My iPhone collection has just been a natural thing that I've collected in real time, rather
00:22:15
◼
►
than trying to go out and buy a bunch of $400-$600 devices.
00:22:20
◼
►
And so that's definitely intimidating.
00:22:22
◼
►
And related to that is definitely the SDK question.
00:22:27
◼
►
The vast majority of people are not running the latest version of Android.
00:22:33
◼
►
adoption curve is really, really slow.
00:22:37
◼
►
When I look at my stats, the biggest hump right now for me is around Android 4.4, which
00:22:44
◼
►
I think is at least three or four years old.
00:22:47
◼
►
And so it's a really strange thing when you're trying to make sure that your app works well
00:22:54
◼
►
on all of those.
00:22:55
◼
►
There's a lot of stuff they do that's just really cool.
00:22:57
◼
►
We have this app compatibility system where Google writes, like, it's kind of mind-bending,
00:23:04
◼
►
but they write a bunch of classes that are backwards compatible with really old versions
00:23:09
◼
►
of Android with the new features in them that you can include as a library into your application
00:23:17
◼
►
so that your app will run and behave somewhat in a modern way on an old system.
00:23:24
◼
►
That's interesting.
00:23:25
◼
►
Which is really clever.
00:23:27
◼
►
But also, that's never going to be quite as good as just, "Well, 90% of my users are
00:23:33
◼
►
running iOS 9.3.2," or whatever the latest version is.
00:23:37
◼
►
And that is very close to what we find with iOS.
00:23:41
◼
►
And so there's just no need for any of this type of compatibility system.
00:23:48
◼
►
And maybe in practice, I'm not sure how much it will really come to bite me, but it makes
00:23:51
◼
►
me feel really nervous when I'm shipping something and I'm like, "I hope this works. I think
00:23:57
◼
►
I've tried it on enough devices. I really don't know. I guess I'll just have to go through
00:24:01
◼
►
and read my one-star reviews and see what they look like." Wow.
00:24:08
◼
►
And the other thing, as I'm going through this, that has kind of been a little bit...
00:24:14
◼
►
This is the softer, more emotional part of Android development, but it's a really strange
00:24:20
◼
►
thing to not feel like I really know what I'm doing. It's a bit humbling, which is probably
00:24:27
◼
►
a good thing, but it's definitely this strange feeling of I've been doing iOS work for so
00:24:33
◼
►
long at this point that I feel like, I don't think it's hubris to say that I'm an expert
00:24:40
◼
►
iOS developer. I've been doing this as a full-time profession for seven or eight years now.
00:24:46
◼
►
Yeah, you definitely are an expert iOS developer.
00:24:48
◼
►
If anybody in the world is, it's you.
00:24:52
◼
►
Which is nice to have that feeling.
00:24:53
◼
►
And then when I go to Android, I'm like, "I have no idea what I'm doing."
00:24:57
◼
►
I'm going in and reading the Getting Started documentation.
00:25:01
◼
►
I'm really diving in and trying to understand these things.
00:25:06
◼
►
And some of it is even just really hard because I don't use an Android phone on a regular
00:25:11
◼
►
my apps, and I'm like, "I'm just making iOS apps on Android," which probably means that
00:25:18
◼
►
I'm not making really good apps on Android.
00:25:21
◼
►
In a lot of ways, I'm making functional apps that work, but it's weird to, on the iOS side,
00:25:29
◼
►
be able to feel like I'm able to ship top-tier apps in terms of what they're capable of doing,
00:25:35
◼
►
the way they visually look, the way they behave, etc.
00:25:37
◼
►
I can be confident on that end.
00:25:40
◼
►
And it's, I guess the best word is humbling on Android to look at it and be like, "I
00:25:46
◼
►
really don't know what I'm doing."
00:25:48
◼
►
And some of this has been a good experience, I think, of getting over that and just saying,
00:25:52
◼
►
like, "Okay, it's fine.
00:25:54
◼
►
These apps aren't going to be as good as some of the apps, their equivalents on iOS.
00:25:59
◼
►
That's fine.
00:26:01
◼
►
It's a good thing for me as a developer and as a person to sort of be okay with that and
00:26:06
◼
►
do the best I can, and it works out well in this particular case because I have a very
00:26:10
◼
►
definite end to when I'll be able to work on this, so I can't be like, "Well, I'm going
00:26:15
◼
►
to need to learn everything and dive into this for months and months because I'm definitely
00:26:19
◼
►
not going to be working on Android starting the Monday of WWDC."
00:26:24
◼
►
So I have to ship this update before then, and so it's just whatever the best I can do
00:26:28
◼
►
between now and then is the best I'm ever going to be able to do.
00:26:32
◼
►
But it's definitely a weird feeling, and I guess it gives me some sympathy for what it
00:26:35
◼
►
it must be like for new iOS developers, too, when you come to the platform and you're like,
00:26:40
◼
►
"Wow, this has gotten really complicated."
00:26:42
◼
►
The number of things that a modern application has to be able to do is not insignificant,
00:26:49
◼
►
and so learning all of those things in some ways from scratch again is a good reminder
00:26:53
◼
►
of just how hard this job can be.
00:26:56
◼
►
Although at least now you can click the "Fix code signing issues in Xcode" and it usually
00:27:02
◼
►
Yeah, if you have a clean slate, it usually does work.
00:27:09
◼
►
It's questionable.
00:27:12
◼
►
I would not have the same confidence that you've had there.
00:27:15
◼
►
I know what you're talking about.
00:27:16
◼
►
It has gotten better.
00:27:17
◼
►
It has definitely gotten better.
00:27:22
◼
►
Code signing is always a funny thing.
00:27:24
◼
►
Amusingly, I ran into this with Android, too.
00:27:28
◼
►
I thought for a minute that I had misplaced my private signing key for Android, which
00:27:35
◼
►
would be awkward because as best I can tell you can't reissue it.
00:27:40
◼
►
And so in order for me to update my application, I have to have the same private key for subsequent
00:27:46
◼
►
That's interesting.
00:27:47
◼
►
And so I definitely had a moment of panic where like, "Oh gosh, I haven't signed this
00:27:52
◼
►
for four years.
00:27:54
◼
►
Where is this key?"
00:27:55
◼
►
Eventually I found it, but definitely a pro tip if you're an Android developer, put that
00:28:00
◼
►
somewhere safe.
00:28:02
◼
►
It's important.
00:28:03
◼
►
All right, well, I know we have almost no time left, but can you tell yet?
00:28:11
◼
►
Was it worth it?
00:28:13
◼
►
Like I said, ultimately the things that I want to, professionally I want to make sure
00:28:19
◼
►
that I'm doing good work in a way that is sustainable.
00:28:24
◼
►
At its core, that's all I want to come,
00:28:26
◼
►
one out of my career at this point.
00:28:28
◼
►
I want to be doing work that I'm proud of
00:28:30
◼
►
in a way that can sustain and feed my family
00:28:34
◼
►
and be successful in that way.
00:28:37
◼
►
And I feel like doing something like this,
00:28:39
◼
►
spending a couple of weeks of working on Android,
00:28:41
◼
►
like the app itself,
00:28:42
◼
►
I don't expect to make a lot of money from,
00:28:44
◼
►
I don't expect for it to be a runaway success.
00:28:47
◼
►
But I like that in the back of my mind,
00:28:50
◼
►
if iOS takes a turn in a direction
00:28:52
◼
►
makes it really hard for me to work, I have Android as a backup in a way that is a bit
00:28:57
◼
►
more tangible and a bit more concrete than if it was just this amorphous thing that I
00:29:02
◼
►
hadn't touched in four years.
00:29:03
◼
►
So I'd recommend it.
00:29:04
◼
►
It seems like it's a good thing to be more diversified and more broadly experienced.
00:29:09
◼
►
Okay, and with that we're out of time this week, so thanks for listening everybody and
00:29:13
◼
►
we'll talk to you next week.