{"id":2273,"date":"2026-03-10T08:17:26","date_gmt":"2026-03-10T16:17:26","guid":{"rendered":"https:\/\/www.yoonhuh.com\/blog\/?p=2273"},"modified":"2026-03-12T09:53:47","modified_gmt":"2026-03-12T17:53:47","slug":"modernizing-a-10-year-old-android-app-with-agentic-ai-cursor","status":"publish","type":"post","link":"https:\/\/www.yoonhuh.com\/blog\/modernizing-a-10-year-old-android-app-with-agentic-ai-cursor\/","title":{"rendered":"Modernizing a 10-Year-Old Android App with Agentic AI (Cursor)"},"content":{"rendered":"<p data-start=\"699\" data-end=\"865\">Over the past weekend, I updated <strong data-start=\"732\" data-end=\"748\">Go There Now<\/strong> with the goal of bringing this outdated <strong data-start=\"789\" data-end=\"813\">2015-era Android app<\/strong> up to basic <strong data-start=\"826\" data-end=\"864\">2026 Android development standards<\/strong>.<\/p>\n<p data-start=\"867\" data-end=\"1140\">Originally written and maintained by me as a personal Android project, <strong data-start=\"938\" data-end=\"954\">Go There Now<\/strong> had not received any updates since <strong data-start=\"990\" data-end=\"1006\">October 2015<\/strong>. The app was written entirely in <strong data-start=\"1040\" data-end=\"1048\">Java<\/strong> and relied on several libraries and frameworks that have since been deprecated or replaced.<\/p>\n<p data-start=\"1142\" data-end=\"1345\">My objective was to modernize the project to support <strong data-start=\"1195\" data-end=\"1209\">Android 16<\/strong>, update the architecture to use modern <strong data-start=\"1249\" data-end=\"1270\">Jetpack libraries<\/strong>, add <strong data-start=\"1276\" data-end=\"1295\">Wear OS support<\/strong>, and migrate the UI to <strong data-start=\"1319\" data-end=\"1344\">Material 3 Expressive<\/strong>.<\/p>\n<p data-start=\"1347\" data-end=\"1497\">To help guide the modernization effort, I leveraged <strong data-start=\"1399\" data-end=\"1409\">Cursor<\/strong>, an <strong data-start=\"1414\" data-end=\"1440\">agentic AI coding tool<\/strong>, to assist with planning and implementing the migration.<\/p>\n<hr data-start=\"1499\" data-end=\"1502\"\/>\n<h1 data-section-id=\"1vvnbcn\" data-start=\"1504\" data-end=\"1523\"><strong data-start=\"1506\" data-end=\"1523\">Key Takeaways<\/strong><\/h1>\n<ul data-start=\"1525\" data-end=\"1948\">\n<li data-section-id=\"jnj5k5\" data-start=\"1525\" data-end=\"1606\">\n<p data-start=\"1527\" data-end=\"1606\">A <strong data-start=\"1529\" data-end=\"1561\">10-year-old Android codebase<\/strong> was modernized to <strong data-start=\"1580\" data-end=\"1606\">2026 Android standards<\/strong><\/p>\n<\/li>\n<li data-section-id=\"13r7fio\" data-start=\"1607\" data-end=\"1660\">\n<p data-start=\"1609\" data-end=\"1660\">The migration was completed in <strong data-start=\"1640\" data-end=\"1660\">about three hours<\/strong><\/p>\n<\/li>\n<li data-section-id=\"anxeeu\" data-start=\"1661\" data-end=\"1734\">\n<p data-start=\"1663\" data-end=\"1734\"><strong data-start=\"1663\" data-end=\"1676\">Cursor AI<\/strong> helped automate large portions of the refactoring process<\/p>\n<\/li>\n<li data-section-id=\"31aprj\" data-start=\"1735\" data-end=\"1830\">\n<p data-start=\"1737\" data-end=\"1830\">Human validation was still required for <strong data-start=\"1777\" data-end=\"1830\">Gradle builds, runtime testing, and UI validation<\/strong><\/p>\n<\/li>\n<li data-section-id=\"13fj4h7\" data-start=\"1831\" data-end=\"1948\">\n<p data-start=\"1833\" data-end=\"1948\">Legacy frameworks such as <strong data-start=\"1859\" data-end=\"1874\">ButterKnife<\/strong>, <strong data-start=\"1876\" data-end=\"1887\">Picasso<\/strong>, and <strong data-start=\"1893\" data-end=\"1909\">Android Wear<\/strong> were replaced with modern alternatives<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"1950\" data-end=\"1953\"\/>\n<h1 data-section-id=\"nz7uhp\" data-start=\"1955\" data-end=\"1992\"><strong data-start=\"1957\" data-end=\"1992\">Migration Strategy Using Cursor<\/strong><\/h1>\n<p data-start=\"1994\" data-end=\"2114\">Before making any code changes, I asked <strong data-start=\"2034\" data-end=\"2044\">Cursor<\/strong> to generate a <strong data-start=\"2059\" data-end=\"2077\">migration plan<\/strong> outlining the modernization process.<\/p>\n<p data-start=\"2116\" data-end=\"2239\">The goal was to perform the migration in <strong data-start=\"2157\" data-end=\"2179\">incremental phases<\/strong>, allowing the application to be validated after each stage.<\/p>\n<p data-start=\"2241\" data-end=\"2303\">For this process, I relied on <strong data-start=\"2271\" data-end=\"2302\">Cursor\u2019s Composer 1.5 model<\/strong>.<\/p>\n<p data-start=\"2305\" data-end=\"2362\">The migration plan was divided into the following phases:<\/p>\n<p data-start=\"2364\" data-end=\"2761\"><strong data-start=\"2364\" data-end=\"2376\">Phase 1:<\/strong> Build System &amp; SDK Updates<br data-start=\"2403\" data-end=\"2406\"\/><strong data-start=\"2406\" data-end=\"2418\">Phase 2:<\/strong> <strong data-start=\"2419\" data-end=\"2441\">AndroidX Migration<\/strong><br data-start=\"2441\" data-end=\"2444\"\/><strong data-start=\"2444\" data-end=\"2456\">Phase 3:<\/strong> Image Loading Migration \u2014 <strong data-start=\"2483\" data-end=\"2509\">Glide &amp; Picasso \u2192 Coil<\/strong><br data-start=\"2509\" data-end=\"2512\"\/><strong data-start=\"2512\" data-end=\"2524\">Phase 4:<\/strong> <strong data-start=\"2525\" data-end=\"2554\">ButterKnife \u2192 ViewBinding<\/strong><br data-start=\"2554\" data-end=\"2557\"\/><strong data-start=\"2557\" data-end=\"2569\">Phase 5:<\/strong> <strong data-start=\"2570\" data-end=\"2606\">Kotlin &amp; Jetpack Compose Support<\/strong><br data-start=\"2606\" data-end=\"2609\"\/><strong data-start=\"2609\" data-end=\"2621\">Phase 6:<\/strong> <strong data-start=\"2622\" data-end=\"2648\">Android Wear \u2192 Wear OS<\/strong><br data-start=\"2648\" data-end=\"2651\"\/><strong data-start=\"2651\" data-end=\"2663\">Phase 7:<\/strong> <strong data-start=\"2664\" data-end=\"2700\">Wear OS Data Layer API Migration<\/strong><br data-start=\"2700\" data-end=\"2703\"\/><strong data-start=\"2703\" data-end=\"2715\">Phase 8:<\/strong> <strong data-start=\"2716\" data-end=\"2761\">Material Design 1 \u2192 Material 3 Expressive<\/strong><\/p>\n<p data-start=\"2364\" data-end=\"2761\">Here&#8217;s a portion of what Cursor generated prior to executing the migration plan:<\/p>\n<p data-start=\"2364\" data-end=\"2761\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2274 size-full\" src=\"https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigration01.png\" alt=\"\" width=\"2056\" height=\"1206\" srcset=\"https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigration01.png 2056w, https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigration01-768x450.png 768w, https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigration01-1536x901.png 1536w, https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigration01-2048x1201.png 2048w, https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigration01-1170x686.png 1170w\" sizes=\"auto, (max-width: 2056px) 100vw, 2056px\" \/><\/p>\n<p data-start=\"2364\" data-end=\"2761\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2275 size-full\" src=\"https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigration02.png\" alt=\"\" width=\"1046\" height=\"1422\" srcset=\"https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigration02.png 1046w, https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigration02-768x1044.png 768w\" sizes=\"auto, (max-width: 1046px) 100vw, 1046px\" \/><\/p>\n<hr data-start=\"2909\" data-end=\"2912\"\/>\n<h1 data-section-id=\"1879oni\" data-start=\"2914\" data-end=\"2952\"><strong data-start=\"2916\" data-end=\"2952\">Development Workflow with Cursor<\/strong><\/h1>\n<p data-start=\"2954\" data-end=\"3067\">For each migration phase, I compiled the project to ensure there were <strong data-start=\"3024\" data-end=\"3066\">no major regressions or build failures<\/strong>. Many times the project initially failed to compile. In those cases, I provided <strong data-start=\"3148\" data-end=\"3185\">Cursor with the Gradle build logs<\/strong>, allowing it to diagnose and fix the errors.<\/p>\n<p data-start=\"3232\" data-end=\"3277\">Other issues surfaced during runtime testing:<\/p>\n<ul data-start=\"3279\" data-end=\"3396\">\n<li data-section-id=\"1a0svu7\" data-start=\"3279\" data-end=\"3304\">\n<p data-start=\"3281\" data-end=\"3304\"><strong data-start=\"3281\" data-end=\"3304\">Application crashes<\/strong><\/p>\n<\/li>\n<li data-section-id=\"bd8e6u\" data-start=\"3305\" data-end=\"3329\">\n<p data-start=\"3307\" data-end=\"3329\"><strong data-start=\"3307\" data-end=\"3329\">UI layout inconsistencies across different Android OS versions<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1p57epu\" data-start=\"3330\" data-end=\"3356\">\n<p data-start=\"3332\" data-end=\"3356\"><strong data-start=\"3332\" data-end=\"3356\">Dependency conflicts<\/strong><\/p>\n<\/li>\n<li data-section-id=\"5o9ozh\" data-start=\"3357\" data-end=\"3396\">\n<p data-start=\"3359\" data-end=\"3396\"><strong data-start=\"3359\" data-end=\"3396\">Gradle build configuration issues<\/strong><\/p>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p data-start=\"3398\" data-end=\"3541\">Whenever these occurred, I validated the changes directly in <strong data-start=\"3459\" data-end=\"3477\">Android Studio<\/strong>, testing the application on <strong data-start=\"3506\" data-end=\"3540\">emulators and physical devices<\/strong>.<\/p>\n<p data-start=\"3543\" data-end=\"3664\">This workflow effectively turned <strong data-start=\"3576\" data-end=\"3613\">Cursor into an AI pair-programmer<\/strong>, while I handled the <strong data-start=\"3635\" data-end=\"3663\">validation and debugging<\/strong>.<\/p>\n<hr data-start=\"3666\" data-end=\"3669\"\/>\n<h1 data-section-id=\"61zevj\" data-start=\"3671\" data-end=\"3709\"><strong data-start=\"3673\" data-end=\"3709\">Tech Stack Modernization Summary<\/strong><\/h1>\n<p data-start=\"3711\" data-end=\"3808\">The modernization effort resulted in the following updates to the application&#8217;s technology stack:<\/p>\n<div class=\"TyagGW_tableContainer\">\n<div class=\"group TyagGW_tableWrapper flex flex-col-reverse w-fit\" tabindex=\"-1\">\n<table class=\"w-fit min-w-(--thread-content-width)\" data-start=\"3810\" data-end=\"4299\">\n<thead data-start=\"3810\" data-end=\"3844\">\n<tr data-start=\"3810\" data-end=\"3844\">\n<th class=\"\" data-start=\"3810\" data-end=\"3817\" data-col-size=\"sm\">Area<\/th>\n<th class=\"\" data-start=\"3817\" data-end=\"3830\" data-col-size=\"sm\">2015 Stack<\/th>\n<th class=\"\" data-start=\"3830\" data-end=\"3844\" data-col-size=\"sm\">2026 Stack<\/th>\n<\/tr>\n<\/thead>\n<tbody data-start=\"3865\" data-end=\"4299\">\n<tr data-start=\"3865\" data-end=\"3900\">\n<td data-start=\"3865\" data-end=\"3876\" data-col-size=\"sm\">Language<\/td>\n<td data-start=\"3876\" data-end=\"3883\" data-col-size=\"sm\">Java<\/td>\n<td data-start=\"3883\" data-end=\"3900\" data-col-size=\"sm\">Java + Kotlin<\/td>\n<\/tr>\n<tr data-start=\"3901\" data-end=\"3945\">\n<td data-start=\"3901\" data-end=\"3906\" data-col-size=\"sm\">UI<\/td>\n<td data-start=\"3906\" data-end=\"3920\" data-col-size=\"sm\">XML Layouts<\/td>\n<td data-start=\"3920\" data-end=\"3945\" data-col-size=\"sm\">XML + Jetpack Compose<\/td>\n<\/tr>\n<tr data-start=\"3946\" data-end=\"4001\">\n<td data-start=\"3946\" data-end=\"3961\" data-col-size=\"sm\">UI Framework<\/td>\n<td data-start=\"3961\" data-end=\"3989\" data-col-size=\"sm\">Android Support Libraries<\/td>\n<td data-start=\"3989\" data-end=\"4001\" data-col-size=\"sm\">AndroidX<\/td>\n<\/tr>\n<tr data-start=\"4002\" data-end=\"4063\">\n<td data-start=\"4002\" data-end=\"4018\" data-col-size=\"sm\">Design System<\/td>\n<td data-start=\"4018\" data-end=\"4038\" data-col-size=\"sm\">Material Design 1<\/td>\n<td data-start=\"4038\" data-end=\"4063\" data-col-size=\"sm\">Material 3 Expressive<\/td>\n<\/tr>\n<tr data-start=\"4064\" data-end=\"4098\">\n<td data-start=\"4064\" data-end=\"4080\" data-col-size=\"sm\">Image Loading<\/td>\n<td data-start=\"4080\" data-end=\"4090\" data-col-size=\"sm\">Picasso<\/td>\n<td data-start=\"4090\" data-end=\"4098\" data-col-size=\"sm\">Coil<\/td>\n<\/tr>\n<tr data-start=\"4099\" data-end=\"4143\">\n<td data-start=\"4099\" data-end=\"4114\" data-col-size=\"sm\">View Binding<\/td>\n<td data-start=\"4114\" data-end=\"4128\" data-col-size=\"sm\">ButterKnife<\/td>\n<td data-start=\"4128\" data-end=\"4143\" data-col-size=\"sm\">ViewBinding<\/td>\n<\/tr>\n<tr data-start=\"4144\" data-end=\"4182\">\n<td data-start=\"4144\" data-end=\"4156\" data-col-size=\"sm\">Wearables<\/td>\n<td data-start=\"4156\" data-end=\"4171\" data-col-size=\"sm\">Android Wear<\/td>\n<td data-start=\"4171\" data-end=\"4182\" data-col-size=\"sm\">Wear OS<\/td>\n<\/tr>\n<tr data-start=\"4183\" data-end=\"4235\">\n<td data-start=\"4183\" data-end=\"4196\" data-col-size=\"sm\">Networking<\/td>\n<td data-start=\"4196\" data-end=\"4206\" data-col-size=\"sm\">Minimal<\/td>\n<td data-start=\"4206\" data-end=\"4235\" data-col-size=\"sm\">OkHttp + Retrofit + Moshi<\/td>\n<\/tr>\n<tr data-start=\"4236\" data-end=\"4299\">\n<td data-start=\"4236\" data-end=\"4252\" data-col-size=\"sm\">Observability<\/td>\n<td data-start=\"4252\" data-end=\"4259\" data-col-size=\"sm\">None<\/td>\n<td data-start=\"4259\" data-end=\"4299\" data-col-size=\"sm\">Crashlytics + Analytics + LeakCanary<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<hr data-start=\"4301\" data-end=\"4304\"\/>\n<h1 data-section-id=\"14q7l4l\" data-start=\"4306\" data-end=\"4346\"><strong data-start=\"4308\" data-end=\"4346\">Major Updates in Go There Now 3.00<\/strong><\/h1>\n<p data-start=\"4348\" data-end=\"4407\">The modernization effort resulted in the following updates:<\/p>\n<ul data-start=\"4409\" data-end=\"5526\">\n<li data-section-id=\"elcrmh\" data-start=\"4409\" data-end=\"4494\">\n<p data-start=\"4411\" data-end=\"4494\">Replaced outdated <strong data-start=\"4429\" data-end=\"4445\">Android Wear<\/strong> implementation with modern <strong data-start=\"4473\" data-end=\"4484\">Wear OS<\/strong> support<\/p>\n<\/li>\n<li data-section-id=\"13b9epr\" data-start=\"4495\" data-end=\"4559\">\n<p data-start=\"4497\" data-end=\"4559\">Migrated the application design to <strong data-start=\"4532\" data-end=\"4557\">Material 3 Expressive<\/strong><\/p>\n<\/li>\n<li data-section-id=\"132da5s\" data-start=\"4560\" data-end=\"4613\">\n<p data-start=\"4562\" data-end=\"4613\">Migrated the project to <strong data-start=\"4586\" data-end=\"4611\">AndroidX dependencies<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1hn193q\" data-start=\"4614\" data-end=\"4667\">\n<p data-start=\"4616\" data-end=\"4667\">Updated the application to support <strong data-start=\"4651\" data-end=\"4665\">Android 16<\/strong><\/p>\n<\/li>\n<li data-section-id=\"m6jlwo\" data-start=\"4668\" data-end=\"4737\">\n<p data-start=\"4670\" data-end=\"4737\">Updated the build system to <strong data-start=\"4698\" data-end=\"4735\">Android Gradle Plugin (AGP) 9.0.1<\/strong><\/p>\n<\/li>\n<li data-section-id=\"7d6ev1\" data-start=\"4738\" data-end=\"4790\">\n<p data-start=\"4740\" data-end=\"4790\">Added <strong data-start=\"4746\" data-end=\"4756\">Kotlin<\/strong> and <strong data-start=\"4761\" data-end=\"4780\">Jetpack Compose<\/strong> support<\/p>\n<\/li>\n<li data-section-id=\"1fvqnso\" data-start=\"4791\" data-end=\"4855\">\n<p data-start=\"4793\" data-end=\"4855\">Replaced <strong data-start=\"4802\" data-end=\"4813\">Picasso<\/strong> with the <strong data-start=\"4823\" data-end=\"4853\">Coil image loading library<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1yghogw\" data-start=\"4856\" data-end=\"4928\">\n<p data-start=\"4858\" data-end=\"4928\">Migrated to the <strong data-start=\"4874\" data-end=\"4895\">Google Places API<\/strong> for autocomplete functionality<\/p>\n<\/li>\n<li data-section-id=\"1yaqo7n\" data-start=\"4929\" data-end=\"4993\">\n<p data-start=\"4931\" data-end=\"4993\">Updated all dependencies to their <strong data-start=\"4965\" data-end=\"4991\">latest stable versions<\/strong><\/p>\n<\/li>\n<li data-section-id=\"19sld4n\" data-start=\"4994\" data-end=\"5036\">\n<p data-start=\"4996\" data-end=\"5036\">Removed several <strong data-start=\"5012\" data-end=\"5034\">outdated libraries<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1xfcf19\" data-start=\"5037\" data-end=\"5111\">\n<p data-start=\"5039\" data-end=\"5111\">Added networking support using <strong data-start=\"5070\" data-end=\"5080\">OkHttp<\/strong>, <strong data-start=\"5082\" data-end=\"5094\">Retrofit<\/strong>, and <strong data-start=\"5100\" data-end=\"5109\">Moshi<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1xo277\" data-start=\"5112\" data-end=\"5190\">\n<p data-start=\"5114\" data-end=\"5190\">Added <strong data-start=\"5120\" data-end=\"5144\">Firebase Crashlytics<\/strong>, <strong data-start=\"5146\" data-end=\"5168\">Firebase Analytics<\/strong>, and <strong data-start=\"5174\" data-end=\"5188\">LeakCanary<\/strong><\/p>\n<\/li>\n<li data-section-id=\"rys11r\" data-start=\"5191\" data-end=\"5269\">\n<p data-start=\"5193\" data-end=\"5269\">Added a new <strong data-start=\"5205\" data-end=\"5228\">APPLICATIONS screen<\/strong> for installing other <strong data-start=\"5250\" data-end=\"5267\">Y-Corner apps<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1fh5xs7\" data-start=\"5270\" data-end=\"5348\">\n<p data-start=\"5272\" data-end=\"5348\">Updated tutorial screenshots to use <strong data-start=\"5308\" data-end=\"5323\">Pixel 6 Pro<\/strong> and <strong data-start=\"5328\" data-end=\"5339\">Wear OS<\/strong> images<\/p>\n<\/li>\n<li data-section-id=\"kpko1f\" data-start=\"5349\" data-end=\"5421\">\n<p data-start=\"5351\" data-end=\"5421\">Added <strong data-start=\"5357\" data-end=\"5375\">loading states<\/strong> and <strong data-start=\"5380\" data-end=\"5396\">empty states<\/strong> for the shortcuts list<\/p>\n<\/li>\n<li data-section-id=\"1lltyqb\" data-start=\"5422\" data-end=\"5470\">\n<p data-start=\"5424\" data-end=\"5470\">Removed unnecessary <strong data-start=\"5444\" data-end=\"5468\">location permissions<\/strong><\/p>\n<\/li>\n<li data-section-id=\"8ssacv\" data-start=\"5471\" data-end=\"5526\">\n<p data-start=\"5473\" data-end=\"5526\">Added <strong data-start=\"5479\" data-end=\"5506\">edge-to-edge UI support<\/strong> for <strong data-start=\"5511\" data-end=\"5526\">Android 15+<\/strong><\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"5528\" data-end=\"5531\"\/>\n<h1 data-section-id=\"1urdl7\" data-start=\"5533\" data-end=\"5567\"><strong data-start=\"5535\" data-end=\"5567\">Before vs After Architecture<\/strong><\/h1>\n<p data-start=\"5569\" data-end=\"5719\">When I originally wrote <strong data-start=\"5593\" data-end=\"5609\">Go There Now<\/strong> in the early <strong data-start=\"5623\" data-end=\"5662\">Android Wear era (around 2014\u20132015)<\/strong>, the Android ecosystem looked very different from today.<\/p>\n<h3 data-section-id=\"1crkacs\" data-start=\"5721\" data-end=\"5755\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-2276\" src=\"https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigrationBeforeAfterArchitecture-810x326.png\" alt=\"\" width=\"810\" height=\"326\" srcset=\"https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigrationBeforeAfterArchitecture-810x326.png 810w, https:\/\/www.yoonhuh.com\/blog\/wp-content\/uploads\/2026\/03\/GoThereNowMigrationBeforeAfterArchitecture-1170x470.png 1170w\" sizes=\"auto, (max-width: 810px) 100vw, 810px\" \/><\/h3>\n<h3 data-section-id=\"1crkacs\" data-start=\"5721\" data-end=\"5755\"><strong data-start=\"5725\" data-end=\"5755\">Original 2015 Architecture<\/strong><\/h3>\n<ul data-start=\"5757\" data-end=\"5923\">\n<li data-section-id=\"1f9rnh8\" data-start=\"5757\" data-end=\"5782\">\n<p data-start=\"5759\" data-end=\"5782\">Entirely <strong data-start=\"5768\" data-end=\"5782\">Java-based<\/strong><\/p>\n<\/li>\n<li data-section-id=\"vbkwk8\" data-start=\"5783\" data-end=\"5800\">\n<p data-start=\"5785\" data-end=\"5800\"><strong data-start=\"5785\" data-end=\"5800\">XML layouts<\/strong><\/p>\n<\/li>\n<li data-section-id=\"n2906d\" data-start=\"5801\" data-end=\"5832\">\n<p data-start=\"5803\" data-end=\"5832\"><strong data-start=\"5803\" data-end=\"5832\">Android Support Libraries<\/strong><\/p>\n<\/li>\n<li data-section-id=\"alxi93\" data-start=\"5833\" data-end=\"5850\">\n<p data-start=\"5835\" data-end=\"5850\"><strong data-start=\"5835\" data-end=\"5850\">ButterKnife<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1i06rto\" data-start=\"5851\" data-end=\"5864\">\n<p data-start=\"5853\" data-end=\"5864\"><strong data-start=\"5853\" data-end=\"5864\">Picasso<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1v1867t\" data-start=\"5865\" data-end=\"5888\">\n<p data-start=\"5867\" data-end=\"5888\"><strong data-start=\"5867\" data-end=\"5888\">Android Wear APIs<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1ff7hr2\" data-start=\"5889\" data-end=\"5923\">\n<p data-start=\"5891\" data-end=\"5923\">Minimal architectural separation<\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"5925\" data-end=\"5928\"\/>\n<h3 data-section-id=\"6vdws8\" data-start=\"5930\" data-end=\"5966\"><strong data-start=\"5934\" data-end=\"5966\">Modernized 2026 Architecture<\/strong><\/h3>\n<p data-start=\"5968\" data-end=\"6063\">After the modernization effort, <strong data-start=\"6000\" data-end=\"6021\">Go There Now 3.00<\/strong> now uses a far more modern Android stack:<\/p>\n<ul data-start=\"6065\" data-end=\"6309\">\n<li data-section-id=\"ks95qo\" data-start=\"6065\" data-end=\"6100\">\n<p data-start=\"6067\" data-end=\"6100\"><strong data-start=\"6067\" data-end=\"6100\">Java + Kotlin hybrid codebase<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1o7xnsd\" data-start=\"6101\" data-end=\"6130\">\n<p data-start=\"6103\" data-end=\"6130\"><strong data-start=\"6103\" data-end=\"6130\">Jetpack Compose support<\/strong><\/p>\n<\/li>\n<li data-section-id=\"17hs63v\" data-start=\"6131\" data-end=\"6145\">\n<p data-start=\"6133\" data-end=\"6145\"><strong data-start=\"6133\" data-end=\"6145\">AndroidX<\/strong><\/p>\n<\/li>\n<li data-section-id=\"fsj9o0\" data-start=\"6146\" data-end=\"6173\">\n<p data-start=\"6148\" data-end=\"6173\"><strong data-start=\"6148\" data-end=\"6173\">Material 3 Expressive<\/strong><\/p>\n<\/li>\n<li data-section-id=\"yjp5w\" data-start=\"6174\" data-end=\"6191\">\n<p data-start=\"6176\" data-end=\"6191\"><strong data-start=\"6176\" data-end=\"6191\">ViewBinding<\/strong><\/p>\n<\/li>\n<li data-section-id=\"9ruge9\" data-start=\"6192\" data-end=\"6202\">\n<p data-start=\"6194\" data-end=\"6202\"><strong data-start=\"6194\" data-end=\"6202\">Coil<\/strong><\/p>\n<\/li>\n<li data-section-id=\"xdek4e\" data-start=\"6203\" data-end=\"6221\">\n<p data-start=\"6205\" data-end=\"6221\"><strong data-start=\"6205\" data-end=\"6221\">Wear OS APIs<\/strong><\/p>\n<\/li>\n<li data-section-id=\"12lkpk1\" data-start=\"6222\" data-end=\"6253\">\n<p data-start=\"6224\" data-end=\"6253\"><strong data-start=\"6224\" data-end=\"6253\">OkHttp \/ Retrofit \/ Moshi<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1ldri6e\" data-start=\"6254\" data-end=\"6292\">\n<p data-start=\"6256\" data-end=\"6292\"><strong data-start=\"6256\" data-end=\"6292\">Firebase Crashlytics &amp; Analytics<\/strong><\/p>\n<\/li>\n<li data-section-id=\"e0ekod\" data-start=\"6293\" data-end=\"6309\">\n<p data-start=\"6295\" data-end=\"6309\"><strong data-start=\"6295\" data-end=\"6309\">LeakCanary<\/strong><\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"6311\" data-end=\"6314\"\/>\n<h1 data-section-id=\"1x83bie\" data-start=\"6316\" data-end=\"6378\"><strong data-start=\"6318\" data-end=\"6378\">Lessons Learned Using Agentic AI for Android Development<\/strong><\/h1>\n<p data-start=\"6380\" data-end=\"6492\">Using <strong data-start=\"6386\" data-end=\"6396\">Cursor<\/strong> as an <strong data-start=\"6403\" data-end=\"6439\">agentic AI development assistant<\/strong> significantly accelerated the modernization process.<\/p>\n<h3 data-section-id=\"18ydxhh\" data-start=\"6494\" data-end=\"6520\"><strong data-start=\"6498\" data-end=\"6520\">AI is excellent at<\/strong><\/h3>\n<ul data-start=\"6522\" data-end=\"6698\">\n<li data-section-id=\"52wezu\" data-start=\"6522\" data-end=\"6554\">\n<p data-start=\"6524\" data-end=\"6554\">Generating <strong data-start=\"6535\" data-end=\"6554\">migration plans<\/strong><\/p>\n<\/li>\n<li data-section-id=\"10lgwq9\" data-start=\"6555\" data-end=\"6591\">\n<p data-start=\"6557\" data-end=\"6591\">Refactoring large sections of code<\/p>\n<\/li>\n<li data-section-id=\"gvgm4s\" data-start=\"6592\" data-end=\"6626\">\n<p data-start=\"6594\" data-end=\"6626\">Updating <strong data-start=\"6603\" data-end=\"6626\">Gradle dependencies<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1osd0uz\" data-start=\"6627\" data-end=\"6654\">\n<p data-start=\"6629\" data-end=\"6654\">Replacing deprecated APIs<\/p>\n<\/li>\n<li data-section-id=\"1787wvb\" data-start=\"6655\" data-end=\"6698\">\n<p data-start=\"6657\" data-end=\"6698\">Performing repetitive modernization tasks<\/p>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3 data-section-id=\"1hoxf4o\" data-start=\"6700\" data-end=\"6731\"><strong data-start=\"6704\" data-end=\"6731\">AI still struggles with<\/strong><\/h3>\n<ul data-start=\"6733\" data-end=\"6870\">\n<li data-section-id=\"aw1qcb\" data-start=\"6733\" data-end=\"6766\">\n<p data-start=\"6735\" data-end=\"6766\"><strong data-start=\"6735\" data-end=\"6766\">Gradle dependency conflicts<\/strong><\/p>\n<\/li>\n<li data-section-id=\"h60mdj\" data-start=\"6767\" data-end=\"6800\">\n<p data-start=\"6769\" data-end=\"6800\">Android <strong data-start=\"6777\" data-end=\"6800\">build system quirks<\/strong><\/p>\n<\/li>\n<li data-section-id=\"1jewjjd\" data-start=\"6801\" data-end=\"6818\">\n<p data-start=\"6803\" data-end=\"6818\">Runtime crashes<\/p>\n<\/li>\n<li data-section-id=\"1gqi0k6\" data-start=\"6819\" data-end=\"6839\">\n<p data-start=\"6821\" data-end=\"6839\">UI layout inconsistencies across Android OS versions<\/p>\n<\/li>\n<li data-section-id=\"1koi6qp\" data-start=\"6840\" data-end=\"6870\">\n<p data-start=\"6842\" data-end=\"6870\">Android lifecycle complexity<\/p>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p data-start=\"6872\" data-end=\"6907\">Because of this, I still needed to:<\/p>\n<ul data-start=\"6909\" data-end=\"7022\">\n<li data-section-id=\"41ebv9\" data-start=\"6909\" data-end=\"6935\">\n<p data-start=\"6911\" data-end=\"6935\">Review AI-generated code<\/p>\n<\/li>\n<li data-section-id=\"12jb3bt\" data-start=\"6936\" data-end=\"6964\">\n<p data-start=\"6938\" data-end=\"6964\">Resolve <strong data-start=\"6946\" data-end=\"6964\">build failures<\/strong><\/p>\n<\/li>\n<li data-section-id=\"18mh3at\" data-start=\"6965\" data-end=\"7000\">\n<p data-start=\"6967\" data-end=\"7000\">Test on <strong data-start=\"6975\" data-end=\"7000\">emulators and devices<\/strong><\/p>\n<\/li>\n<li data-section-id=\"14mteuf\" data-start=\"7001\" data-end=\"7022\">\n<p data-start=\"7003\" data-end=\"7022\">Validate UI changes<\/p>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p data-start=\"7024\" data-end=\"7144\">In practice, the most effective approach was treating <strong data-start=\"7078\" data-end=\"7113\">Cursor as an AI pair programmer<\/strong>, not a fully autonomous agent.<\/p>\n<hr data-start=\"7146\" data-end=\"7149\"\/>\n<h1 data-section-id=\"a3gx8c\" data-start=\"7151\" data-end=\"7192\"><strong data-start=\"7153\" data-end=\"7192\">How Long the Migration Took with AI<\/strong><\/h1>\n<p data-start=\"7194\" data-end=\"7292\">One of the most interesting aspects of this modernization effort was how quickly it was completed.<\/p>\n<p data-start=\"7294\" data-end=\"7511\">The entire migration of <strong data-start=\"7318\" data-end=\"7334\">Go There Now<\/strong> \u2014 including dependency upgrades, library replacements, architecture modernization, and <strong data-start=\"7422\" data-end=\"7441\">Wear OS support<\/strong> \u2014 took <strong data-start=\"7449\" data-end=\"7493\">roughly three hours on a Sunday afternoon<\/strong> using <strong data-start=\"7500\" data-end=\"7510\">Cursor<\/strong>.<\/p>\n<p data-start=\"7513\" data-end=\"7680\">Considering that the codebase had not been updated since <strong data-start=\"7570\" data-end=\"7578\">2015<\/strong>, this represents a substantial amount of technical modernization completed in a short period of time.<\/p>\n<p data-start=\"7682\" data-end=\"7838\">Without <strong data-start=\"7690\" data-end=\"7717\">AI-assisted development<\/strong>, this process likely would have taken <strong data-start=\"7756\" data-end=\"7772\">several days<\/strong>, particularly due to the number of framework migrations involved.<\/p>\n<p data-start=\"7682\" data-end=\"7838\">&nbsp;<\/p>\n<p data-start=\"7840\" data-end=\"7880\">The AI helped accelerate the process by:<\/p>\n<ul data-start=\"7882\" data-end=\"8044\">\n<li data-section-id=\"iamuh\" data-start=\"7882\" data-end=\"7926\">\n<p data-start=\"7884\" data-end=\"7926\">Generating a <strong data-start=\"7897\" data-end=\"7926\">structured migration plan<\/strong><\/p>\n<\/li>\n<li data-section-id=\"a14h13\" data-start=\"7927\" data-end=\"7965\">\n<p data-start=\"7929\" data-end=\"7965\">Implementing refactors incrementally<\/p>\n<\/li>\n<li data-section-id=\"i5d94x\" data-start=\"7966\" data-end=\"8006\">\n<p data-start=\"7968\" data-end=\"8006\">Suggesting modern library replacements<\/p>\n<\/li>\n<li data-section-id=\"pfy80g\" data-start=\"8007\" data-end=\"8044\">\n<p data-start=\"8009\" data-end=\"8044\">Updating dependencies automatically<\/p>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p data-start=\"8046\" data-end=\"8113\">The remaining time was spent on <strong data-start=\"8078\" data-end=\"8104\">human validation tasks<\/strong> such as:<\/p>\n<ul data-start=\"8115\" data-end=\"8234\">\n<li data-section-id=\"1fd1vru\" data-start=\"8115\" data-end=\"8147\">\n<p data-start=\"8117\" data-end=\"8147\">Fixing <strong data-start=\"8124\" data-end=\"8147\">Gradle build issues<\/strong><\/p>\n<\/li>\n<li data-section-id=\"4bh96a\" data-start=\"8148\" data-end=\"8179\">\n<p data-start=\"8150\" data-end=\"8179\">Testing in <strong data-start=\"8161\" data-end=\"8179\">Android Studio<\/strong><\/p>\n<\/li>\n<li data-section-id=\"9lxh8f\" data-start=\"8180\" data-end=\"8234\">\n<p data-start=\"8182\" data-end=\"8234\">Verifying functionality on <strong data-start=\"8209\" data-end=\"8234\">devices and emulators<\/strong><\/p>\n<\/li>\n<\/ul>\n<hr data-start=\"8236\" data-end=\"8239\"\/>\n<h1 data-section-id=\"1cibm4j\" data-start=\"8241\" data-end=\"8300\"><strong data-start=\"8243\" data-end=\"8300\">AI and the Changing Landscape of Software Engineering<\/strong><\/h1>\n<p data-start=\"8302\" data-end=\"8377\"><strong data-start=\"8302\" data-end=\"8377\">AI has created massive disruption in the world of software engineering.<\/strong><\/p>\n<p data-start=\"8379\" data-end=\"8489\">Tools that can generate and refactor code rapidly are already changing how software is written and maintained. At the same time, these tools also introduce new challenges. Engineers still need to validate correctness, debug issues, and make architectural decisions. The role of developers may increasingly shift toward <strong data-start=\"8700\" data-end=\"8785\">architecting systems, validating AI-generated code, and guiding automated tooling<\/strong>.<\/p>\n<p data-start=\"8788\" data-end=\"8944\">The world of <strong data-start=\"8801\" data-end=\"8825\">software engineering<\/strong> has already changed dramatically over the past year \u2014 and it will likely continue evolving rapidly in the months ahead.<\/p>\n<hr data-start=\"8946\" data-end=\"8949\"\/>\n<h1 data-section-id=\"peq8m7\" data-start=\"8951\" data-end=\"8983\"><strong data-start=\"8953\" data-end=\"8983\">Download Go There Now 3.00<\/strong><\/h1>\n<p data-start=\"8985\" data-end=\"9030\"><strong data-start=\"8985\" data-end=\"9006\">Go There Now 3.00<\/strong> can be downloaded here: <a class=\"decorated-link\" href=\"https:\/\/www.yoonhuh.com\/blog\/apps\/go-there-now\/\" target=\"_new\" rel=\"noopener\" data-start=\"9032\" data-end=\"9079\">https:\/\/www.yoonhuh.com\/blog\/apps\/go-there-now\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Over the past weekend, I updated Go There Now with the goal of bringing this outdated 2015-era Android app up to basic 2026 Android development standards. Originally written and maintained by me as a personal Android project, Go There Now had not received any updates since October 2015. The app<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[534],"tags":[580,579,28,473,402,582,581,441,578],"class_list":["post-2273","post","type-post","status-publish","format-standard","hentry","category-coding","tag-agentic-ai","tag-ai","tag-android","tag-android-development","tag-android-wear","tag-composer","tag-cursor","tag-go-there-now","tag-wearos"],"_links":{"self":[{"href":"https:\/\/www.yoonhuh.com\/blog\/wp-json\/wp\/v2\/posts\/2273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yoonhuh.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yoonhuh.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yoonhuh.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yoonhuh.com\/blog\/wp-json\/wp\/v2\/comments?post=2273"}],"version-history":[{"count":11,"href":"https:\/\/www.yoonhuh.com\/blog\/wp-json\/wp\/v2\/posts\/2273\/revisions"}],"predecessor-version":[{"id":2299,"href":"https:\/\/www.yoonhuh.com\/blog\/wp-json\/wp\/v2\/posts\/2273\/revisions\/2299"}],"wp:attachment":[{"href":"https:\/\/www.yoonhuh.com\/blog\/wp-json\/wp\/v2\/media?parent=2273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yoonhuh.com\/blog\/wp-json\/wp\/v2\/categories?post=2273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yoonhuh.com\/blog\/wp-json\/wp\/v2\/tags?post=2273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}