NativePHP: My Android App is on Play Store! (+new YouTube channel)
Chapters8
Introduces the Android app Checklisty and explains it is built with Laravel, Livewire and Native PHP.
Laravel Daily creator Povilas shows how he released a real Android app using Native PHP, Livewire, and Laravel, detailing the timeline, challenges, and future plans.
Summary
Povilas from Laravel Daily walks through his real-world journey releasing a simple Android app called Checklisty on Google Play. Built with Laravel 13, Livewire, and Native PHP Mobile, the app demonstrates how a single codebase can power both web concepts and native mobile experiences. He shares practical hurdles like responsive design on mobile, Tailwind-driven UI quirks, and the importance of testing on a real device. The video chronicles the submission process to Google Play, including identity verification, a $25 developer fee, and the staged testing phases (internal, closed, and open) before production access on May 12–13. Povilas also discusses the timeline from April 12 registration to production release, plus lessons learned from feedback about lag, app size (43 MB), and tweaks for future improvements. In addition to the main channel content, he announces Native PHP Daily, a new YouTube channel dedicated to mobile app topics, plugins, and experimentation with native PHP for Android and iOS. He teases future topics like bundle size, performance, and platform-specific optimizations, and invites viewer questions. The talk ends with a plug for a Native PHP course and a reminder to subscribe for more updates.
Key Takeaways
- Native PHP can bundle a Laravel/Livewire app with a local SQLite database into a mobile app for Android and iOS, leveraging a shared codebase.
- topics
- key_quotes
- related_questions
Who Is This For?
Essential viewing for Laravel developers curious about turning back-end skills into real mobile apps with Native PHP, and for developers weighing the Google Play launch process for a new app.
Notable Quotes
"This was built with Laravel and Livewire and native PHP."
—Describes the tech stack of the app.
"The Android app, as you saw, is launched, but it wasn't all rainbows and butterflies."
—Indicates the challenges faced during launch.
"There were a lot of small small details. In some cases, I wasn't sure what value to use..."
—Highlights configuration and guideline complexities for Play Store submission.
"Internal testing with at least 12 people... and then I had to wait for 14 days."
—Outlines Google Play testing phases and timeline.
"This is the first video of Native PHP Daily, separate from Laravel Daily."
—Announces a new channel dedicated to native PHP topics.
Questions This Video Answers
- How does Native PHP bundle a Laravel Livewire app into a mobile Android APK?
- What are the Google Play testing stages for a new app and typical wait times?
- What are the real-world challenges when testing Tailwind-based mobile UIs on Android devices?
- How much does Google Play developer verification and fees cost for new developers?
- What should Laravel developers know before releasing an app on Google Play with Native PHP?
Laravel DailyNative PHPLaravel 13LivewireAndroid app developmentGoogle Play ConsoleChecklistySQLiteTailwind CSSAndroid Studio testing
Full Transcript
Hello guys. In this video, I want to show you one Android mobile application on Google Play. And you would think this is a Laravel daily channel. So, what does it have to do with Laravel? See those words, Laravel daily. I've zoomed that in. This is Android app, my Android app I launched on Google Play for Android. And this was built with Laravel and Livewire and native PHP. And this app is not just experiment for myself. It already has nine reviews and more than 100 downloads. So, in this video, I decided to share my journey. This is kind of a story what it took to release that app.
It wasn't really easy. And actually, the native PHP part was probably the easiest of that all. So, if you are a Laravel back-end developer and you want to create Android apps, which is possibly similar to iOS apps in a way, because native PHP allows you to create both, let me share you my story. So, I will show you the application itself, will show you the code, and we'll show you what it took for me to actually launch it from building the application and then publishing it on Google Play Store. But before we dive in into mobile app building world, I have a surprise for you.
If you are interested in mobile app creations, specifically with native PHP, welcome to my new YouTube channel. So, yes, I am launching my fourth YouTube channel in addition to Laravel daily, Filament daily, AI coding daily, and now there will be native PHP daily. I tried native PHP, I launched an application, and I became quite a big fan. And I'm sure there are a lot of topics to uncover, to test the plugins, free and paid plugins, to tackle all the issues with native PHP for mobile. So, I decided to create a new YouTube channel specifically for that, to separate that from Laravel topics.
And the first video is for those who haven't started with native PHP and haven't seen that in action. So, in 4-minute, this is a quick demo, but subscribe to that channel, and there will be many more videos in the future. But for now, let me show you my Checklisty in action. And first, I will show you Checklisty in action. I will do that in Android Studio, so I have wireless debugging enabled, and if I run the app, it will appear on my phone. Here I am holding my phone, and this is what you're going to see on the screen.
So, here I have my list, but actually, first, let's delete all the data and start fresh. So, I have delete all the data, confirm. And now, this is the welcome screen. Welcome to Checklisty, and this is the application for recurring checklist. For example, I want to shoot a video, and I want to create a title, a thumbnail, and stuff like that, and I need that recurring. So, I need to quickly uncheck all the items in the list, and then start again. So, for example, video checklist, and then the task title, then thumbnail, something like that.
I can edit or delete the task. And then, the main functionality is I check all the boxes, and then reset list, and uncheck all. And then, I start again. This is the main functionality of the app. Also, there are templates that you can use, and settings with a few options. So, this is a very simple app, I will admit, with local SQLite database, which by the way, is included in the bundle when you launch an Android app. So, those tasks and lists are saved in local database on the phone. But with this simplistic app, I wanted to kind of challenge myself and make an experiment.
How easy it is, and is it even possible to launch a real Android app, not local experiment, not web view on my browser mobile view, but actual real Android application, and how much of a hassle that is. So, the proof of concept was successful. The Android app, as you saw, is launched, but it wasn't all rainbows and butterflies. So, now let me tell you the story how it went. And now let me show you the code of that application. So, this is composer.json. As you can see Laravel framework version 13, Livewire, and then Native PHP Mobile.
Now, it's at version 3.3, recently released. And this checklist application was actually created a few months ago, and I will tell you why I'm shooting the video only now in a minute. But, basically, it's a Laravel application. If you go to routes/web, it's a Livewire application. So, route Livewire with Livewire for components, because on mobile app we of course need dynamic behavior. And for example, if we go to list of index, this is Livewire. And also this is Eloquent, and also this is validation of Laravel Eloquent operation. [snorts] So, it's a Laravel and Livewire, nothing really fancy.
And then a few things on top that makes that application kind of mobile and Native PHP friendly is something like this. So, this is how you generate we can use native capabilities provided by Native PHP. This is mostly provided by plugins of Native PHP, most of them free, some of them paid. This is a separate topic for Native PHP daily channel. But, basically, you can check if we have native capabilities for supporting something, then you call that native capability like dialog alert, otherwise you just perform the Livewire or Laravel operation like it would be in a mobile web view.
And in general, the way it works is that whole application is bundled together with Laravel and local web server and SQLite database, and that becomes mobile application, both compiled for iOS or Android, if you wish. From there, the things are a bit different on how it's all built and then launched to the App Store. But, basically, this is the same code base that you can use for both. But, I'm personally an Android user. My phone is Samsung Galaxy S20, and I first created that application for myself to have my own checklist managed and apps like Todoist and something like that, they seemed too fancy for me.
I just wanted checklist without the bells and whistles. So, that's why I launched on Google Play Store for Android and not on iOS yet. But as I mentioned previously, it wasn't that easy to launch on Play Store for me as a non-mobile developer historically. So, there were a lot of things I had to learn and get familiar with regarding to the launch of the application. So, the first problem I bumped into was responsive design to make it work properly on mobile device. And as a web developer, I have mindset that basically if you use popular Tailwind classes, it kind of works pretty much in all modern browsers.
So, we're not in the days of Internet Explorer or something similar. You don't have to test it individually too much for front end. Of course, you need to do that somewhat, but for mobile, it's a different game. So, if you have Tailwind classes something like that, they would work on web view in the shrink browser window. They would work in the emulator of Android app in Android Studio, but it doesn't guarantee that all the same buttons and elements would work exactly the same and work properly on real device. So, this is kind of the final version that was released, but I had problems.
I don't have those screenshots and I don't remember exactly where. But for example, two buttons beside and then if else with a lot of dynamic things. So, button here, button there, also form that pops out with a lot of dynamic behavior on the page. And this is not about Livewire. Probably would be the same with React or Vue.js. But this is about dynamic Tailwind and expectations that it would just work. So, the code that you you on the screen is probably version number four of this blade file and I had help from AI in this case.
So yeah, first lesson learned is spend extra time on mobile testing on real devices. Because as I was kind of ready to launch to Play Store, I discovered on my mobile phone that some buttons overlay each other, some confirmation model windows don't disappear as they should and stuff like that. But again, I found out only when testing on real device. So yeah, Tailwind and mobile design was pretty hard, but it wasn't the longest part in terms of time. So that full application with help of AI partially was built in roughly a week or week and a half.
And it was not the full day, it was just a side project like an hour or two here and there. But then when I was ready to submit to Play Store and I was expecting that to be pretty smooth, the adventure started. So I found a few emails from Google Play at the moment when I registered and it was on April 12th. So yes, it was six weeks ago. This is when I started, I registered and then I received another email pretty optimistic with icons like steps to successful launch. Then the next step was to verify my identity with like real ID of my passport scan, also pay the membership of Play Store which was $25 or $25 or 25 euros, I don't remember.
Yes, I double check it's $25 and it's one time. The difference is for iOS App Store, the price is much bigger, $99 and that's per year. That's a subscription. And that was another reason why wasn't in a hurry to launch Checklistery on iOS, maybe a bit later. So then after I verified my identity, I uploaded the Android bundle to Play Store and was waiting for confirmation. And that took four more days. So this is the email, all your apps have been successfully registered to meet developer verification requirements, whatever that means. And then I skipped the part how I bundled that application for Android.
It's pretty well written in native PHP documentation, but there are quite a lot of new terms, especially for me as a non-mobile developer. I had to read quite a lot of documentation, also ask AI a few things. So, to prepare your native PHP application for bundling and for building, it also took quite a while for me. Also, there are submission guidelines for Google Play Store. Also, there's privacy policy, and there were a lot of small small details. In some cases, I wasn't sure what value to use in which case. Also, which file to upload to Play Store, but I figured it out as I went.
But, just keep in mind if you haven't launched and haven't bundled, haven't built the application for mobile, it's quite a lot of things you would need to get familiar with along the way. And then, I found out to my surprise, I should have probably made some research, but I found out that there's a testing phase, required testing phase. So, this is Google Play Console, and there's open testing, closed testing, and internal testing. And I'm not sure if they were all required just because I was a new developer on the platform, but I had to have internal testing with at least 12 people, real emails of Android, of Google installing my application, which would be a confirmation that the app actually works.
And then, I had to wait for 14 days. And if I understand correctly, those 14 days, those 12 people, or at least 12 people, should have kept the application. If they uninstall, then the testing may start again. But, as you can see, available to internal testers was released on April 14th. And I had to go find real people on Twitter, on native PHP official Discord, which is awesome, by the way, and free, to ask people to test my application, give their email, and get invited. So, that was internal testing. Then, the next phase was closed testing.
And then, finally, open testing, which means that the app is still not released yet, but already kind of close. I had to create a new release and then again, invite the testers. Luckily, for such simple application, I didn't need to provide any like bug reports or anything like that. I just had to wait for 14 days. Sometimes, for close testing, I think it was shorter than 14 days, but basically, after building that application, most of my time I was waiting. So, that was my tweet asking people to test, which was published on April 20th. And then, after all those rounds of testing, I received, "You have been granted production access." on May 7th.
And then, I had to release the same bundle, basically the same bundle. I didn't need to re-upload. I didn't even fix any issues because the user didn't find any. I just basically moved my app to production stage. And then again, I had to wait for approval. So, this is the actual final timeline. So, 14th of April, the first version for internal testing. And then, a few days before the registration. And then, on 12th of May, it was actually in production. So, full month of waiting. Even for such a simple app, probably it's because I'm a new developer.
And also, some people gave me advice. So, this is Jens on Twitter, that maybe I could have created company account instead of individual. But I decided to not take the shortcut. I don't want to create specific company or release it under company name. So, I'm fine with being Povilas and then Laravel Daily label as creator. So, then finally, on May 13th, I tweeted this inviting real people to test my real application on production Play Store. And then, I got some feedback from the community both on Twitter and on other social networks. And it was a mixed bag.
I'm not trying to hype here that native PHP is great. It has some downsides. So, this was a good comment and a feature request saying it's a good one, good application, but then another comment was it feels a laggy right now, a little laggy. And a few other people reported similar things that in some cases it takes a while to load some elements. So, this is what I will investigate in the near future. Also, another comment was about the size of application which was 43 megs. I didn't do any anything specifically to shrink that and I will also investigate that in the future.
Also, we can read the reviews on the Play Store. So, animations are kind of slow, the same topic, but I couldn't believe this is a PHP app. This is a great thing to read. Also, great app, easy to use. Good. See all reviews. And yeah, no more reviews. Other people just put up the star. Some of them, I believe they just praise the PHP possibilities with native PHP that this app actually exists. So, it's a five-star, I guess, not for my work and not for my application, but mostly for native PHP as a platform. So, yeah, this is the story, but this is actually just the beginning of my journey, real journey with native PHP.
Before that, I was playing around. I have actually a course on native PHP. So, on my laravel-daily.com, if you want to start, there's native PHP version 3. I will probably need to update it later this year because they're preparing some fundamental changes with a thing called super native with more native look and feel of the applications. But, yeah, this is still relevant course if you want to get to know native PHP in 1-hour video course. And also, as I mentioned, my new YouTube channel native PHP daily. This is where I will post all my discoveries about things like bundle size, things like slowness of Android or is it Livewire or is it Tailwind or Alpine.js.
I'm going to investigate and also I will answer your questions as soon as I discover something interesting. Also, there are a lot of functions of native PHP to uncover. There are a lot of plugins, again free and paid. So, there's marketplace with featured plugins, some paid, some plugin bundles, but a lot of them are free. So, yeah, all of that in the future on my separate channel. I didn't want to pollute Laravel Daily with native PHP stuff. So, that's why it's a separate thing. So, I invite you to watch the first video, subscribe to that channel, and if you have any ideas what to talk about, you can put your questions here in the comments below.
And in this case, I will change the final traditional words for this channel. See you guys in other videos on Laravel Daily or Native PHP Daily channel.
More from Laravel Daily
Get daily recaps from
Laravel Daily
AI-powered summaries delivered to your inbox. Save hours every week while staying fully informed.









