<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Chibuike Okoye</title>
    <description>The latest articles on DEV Community by Chibuike Okoye (@chibuike_okoye).</description>
    <link>https://dev.to/chibuike_okoye</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3934394%2F386bf487-e25a-498f-bf65-b7985184cb79.png</url>
      <title>DEV Community: Chibuike Okoye</title>
      <link>https://dev.to/chibuike_okoye</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/chibuike_okoye"/>
    <language>en</language>
    <item>
      <title>Zero-Desktop Android Dev: Compiling, Dexing, and Signing API 36 APKs On-Device with Termux</title>
      <dc:creator>Chibuike Okoye</dc:creator>
      <pubDate>Thu, 06 Aug 2026 02:54:00 +0000</pubDate>
      <link>https://dev.to/chibuike_okoye/zero-desktop-android-dev-compiling-dexing-and-signing-api-36-apks-on-device-with-termux-49mk</link>
      <guid>https://dev.to/chibuike_okoye/zero-desktop-android-dev-compiling-dexing-and-signing-api-36-apks-on-device-with-termux-49mk</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4p7pk09di92tzz11s01t.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4p7pk09di92tzz11s01t.jpg" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn0v588eassuthxb1olnz.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn0v588eassuthxb1olnz.jpg" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb25n6luib6xiigexjue6.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fb25n6luib6xiigexjue6.jpg" alt=" " width="800" height="1733"&gt;&lt;/a&gt;Who says you need a heavy desktop setup and bloated IDEs just to build Android apps?&lt;/p&gt;

&lt;p&gt;I set out to prove that you can assemble, dex, package, and sign a native Android application directly on a mobile device targeting &lt;strong&gt;compileSdk 36&lt;/strong&gt; using pure CLI binaries inside Termux.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ The On-Device Build Pipeline
&lt;/h3&gt;

&lt;p&gt;Instead of relying on desktop Gradle or Android Studio, the entire build toolchain was executed on-device:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Compilation (&lt;code&gt;ecj&lt;/code&gt;)&lt;/strong&gt;: Java source files compiled directly against the &lt;code&gt;android-36&lt;/code&gt; platform JAR.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dexing (&lt;code&gt;d8&lt;/code&gt;)&lt;/strong&gt;: Converting compiled Java bytecode into Dalvik Executable (&lt;code&gt;classes.dex&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource Linking (&lt;code&gt;aapt2&lt;/code&gt;)&lt;/strong&gt;: Compiling and packaging resources, manifest, and assets into an unsigned APK container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Binary Signing (&lt;code&gt;apksigner&lt;/code&gt;)&lt;/strong&gt;: Generating a local keystore and signing the APK with proper v2/v3 signature schemes.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🚀 The Result
&lt;/h3&gt;

&lt;p&gt;The generated binary installed cleanly and launched smoothly with zero runtime crashes or classloader errors—proving that full-stack Android compilation can live natively on ARM hardware.&lt;/p&gt;

&lt;p&gt;Next step: Wiring this CLI toolchain up to a web-based Monaco Editor running on a local Node server right inside Termux to create a lightweight, self-hosted web IDE!&lt;/p&gt;

&lt;h1&gt;
  
  
  android #mobiledevelopment #termux #buildtools
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqwyuvjc0lfjnfo0zh1mq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqwyuvjc0lfjnfo0zh1mq.jpg" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fprp8qan0902q83b8uytk.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fprp8qan0902q83b8uytk.jpg" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhefxd1oqcoyhacel7ttu.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhefxd1oqcoyhacel7ttu.jpg" alt=" " width="800" height="1733"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Building an Edge-Computed Web Ad Network with Cloudflare Workers and Workers AI</title>
      <dc:creator>Chibuike Okoye</dc:creator>
      <pubDate>Sat, 25 Jul 2026 08:26:21 +0000</pubDate>
      <link>https://dev.to/chibuike_okoye/building-an-edge-computed-web-ad-network-with-cloudflare-workers-and-workers-ai-1noe</link>
      <guid>https://dev.to/chibuike_okoye/building-an-edge-computed-web-ad-network-with-cloudflare-workers-and-workers-ai-1noe</guid>
      <description>&lt;p&gt;Monetizing web traffic shouldn't mean slowing down your site with bloated ad scripts and long network round-trips. &lt;/p&gt;

&lt;p&gt;When building &lt;strong&gt;Connectgold&lt;/strong&gt;, my goal was to design a lightweight web ad server that executes auctions at the edge with sub-10ms response times—while giving publishers fast, transparent access to earnings.&lt;/p&gt;

&lt;p&gt;Here is a look at the architecture behind it and how edge workers make ultra-fast ad rendering possible.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ The Problem with Traditional Ad Delivery
&lt;/h2&gt;

&lt;p&gt;Standard web ad tags usually go through multiple heavy redirects and centralized server checks before rendering creative. This introduces layout shifts (CLS), drags down Core Web Vitals, and degrades user experience.&lt;/p&gt;

&lt;p&gt;By moving the auction engine to edge nodes, ad requests are evaluated closest to the visitor, eliminating unnecessary cross-region network hops.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚡ Core Features &amp;amp; Architecture
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Edge Auction Engine
&lt;/h3&gt;

&lt;p&gt;Requests are processed directly at edge isolates. The worker evaluates active campaign inventory, checks user consent status, and streams back lightweight HTML banners or native card payloads instantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Fair Campaign Rotation
&lt;/h3&gt;

&lt;p&gt;To ensure all active advertisers receive equal opportunity and visibility—regardless of bid size—the server uses a balanced rotation model across funded campaign pools.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Dynamic Copy via Workers AI
&lt;/h3&gt;

&lt;p&gt;To make ad units contextually relevant without bloating client scripts, the server integrates Workers AI. It dynamically generates localized ad headlines and call-to-action (CTA) text tailored to the visitor’s region and niche product keywords.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. OpenRTB &amp;amp; Header Bidding Support
&lt;/h3&gt;

&lt;p&gt;The engine includes standard endpoint routes for easy integration into standard OpenRTB 2.5 web header bidding pipelines.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Automated Local Payments
&lt;/h3&gt;

&lt;p&gt;Handling advertiser balances and publisher payouts can be a major friction point. The backend integrates direct wallet funding and payout processing via Paystack, supporting instant account verification and seamless transfers.&lt;/p&gt;




&lt;h2&gt;
  
  
  💬 Looking for Community Feedback!
&lt;/h2&gt;

&lt;p&gt;As I continue optimizing the platform, I'd love to hear from other web engineers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What strategies do you use to eliminate Cumulative Layout Shift (CLS) when injecting asynchronous ad containers?&lt;/li&gt;
&lt;li&gt;Have you experimented with edge-computed auctions or Workers AI in production?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Drop your thoughts or questions in the comments below! 👇&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>cloudflarechallenge</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
