<?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: Arul</title>
    <description>The latest articles on DEV Community by Arul (@jerrymani33).</description>
    <link>https://dev.to/jerrymani33</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F148605%2Fe94db225-5712-42ec-9013-4d2422ff9c89.jpeg</url>
      <title>DEV Community: Arul</title>
      <link>https://dev.to/jerrymani33</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jerrymani33"/>
    <language>en</language>
    <item>
      <title>Android Library (Kotlin) Creation, Access, Deploy, Problems &amp; Fixes Everything You Want to Know</title>
      <dc:creator>Arul</dc:creator>
      <pubDate>Thu, 24 Dec 2020 12:26:19 +0000</pubDate>
      <link>https://dev.to/jerrymani33/android-library-kotlin-creation-access-deploy-problems-fixes-everything-you-want-to-know-263e</link>
      <guid>https://dev.to/jerrymani33/android-library-kotlin-creation-access-deploy-problems-fixes-everything-you-want-to-know-263e</guid>
      <description>&lt;p&gt;Every Android developer knows how time taking is to create a new project from the scratch so rectify this android development have special architecture called modules architecture. We can reduce time, reuse the code by configuring into your project here is an elaborated guide to a modular architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Yq-s0DQX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/11136/0%2A0jaTpg3MHIAY9Rm3" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Yq-s0DQX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/11136/0%2A0jaTpg3MHIAY9Rm3" alt="Photo by [Ashkan Forouzani](https://unsplash.com/@ashkfor121?utm_source=medium&amp;amp;utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral)"&gt;&lt;/a&gt;&lt;em&gt;Photo by &lt;a href="https://unsplash.com/@ashkfor121?utm_source=medium&amp;amp;utm_medium=referral"&gt;Ashkan Forouzani&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Creating a module is pretty simple thanks to the android studio by following steps its do work for you.&lt;/p&gt;

&lt;p&gt;To add a new module to your project for a new device, proceed as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click &lt;strong&gt;File&lt;/strong&gt; &amp;gt; &lt;strong&gt;New&lt;/strong&gt; &amp;gt; &lt;strong&gt;New Module&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Create New Module&lt;/strong&gt; window that appears, Android Studio offers the following device modules:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Phone &amp;amp; Tablet Module&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wear OS Module&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Android TV Module&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Glass Module&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Select the module for the device you want, and then click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Configure your new module&lt;/strong&gt; form, enter the following details:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Application Name&lt;/strong&gt;: This name is used as the title of your app launcher icon for the new module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Module Name&lt;/strong&gt;: This text is used as the name of the folder where your source code and resources files are visible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Package Name&lt;/strong&gt;: This is the Java namespace for the code in your module. It is added as the &lt;a href="https://developer.android.com/guide/topics/manifest/manifest-element#package"&gt;package&lt;/a&gt; attribute in the module's &lt;a href="https://developer.android.com/guide/topics/manifest/manifest-intro"&gt;Android manifest file&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Minimum SDK&lt;/strong&gt;: This setting indicates the lowest version of the Android platform that the app module supports. This value sets the minSdkVersion attribute in the build.gradle file, which you can edit later.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Then click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Create New Module&lt;/strong&gt; window that appears, Android Studio offers the following device modules:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Select the Phone &amp;amp; Tablet Module and then click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click an activity template with which you want to start, and then click &lt;strong&gt;Next&lt;/strong&gt;. If you don’t need an activity, click &lt;strong&gt;Add No Activity&lt;/strong&gt;, click &lt;strong&gt;Finish&lt;/strong&gt;, and then you’re done.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If you chose an activity template, enter the settings for your activity on the &lt;strong&gt;Customize the Activity&lt;/strong&gt; page. Most templates ask for an &lt;strong&gt;Activity Name&lt;/strong&gt;, &lt;strong&gt;Layout Name&lt;/strong&gt;, &lt;strong&gt;Title&lt;/strong&gt;, and &lt;strong&gt;Source Language&lt;/strong&gt;, but each template has activity-specific settings. Click &lt;strong&gt;Finish&lt;/strong&gt;. When you create an app module with an activity template, you can immediately run and test the module on your device.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Android Studio creates all the necessary files for the new module and syncs the project with the new module gradle files. Adding a module for a new device also adds any required dependencies for the target device to the module’s build file.&lt;/p&gt;

&lt;p&gt;REF : &lt;a href="https://developer.android.com/studio/projects/add-app-module"&gt;https://developer.android.com/studio/projects/add-app-module&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Modular Architechture Usage
&lt;/h2&gt;

&lt;p&gt;Let's talk about the usage of modular architecture. Follow below link to use modular architecture in order to WHERE/WHY you want to choose this approach.&lt;br&gt;
&lt;a href="https://blog.mindorks.com/how-to-build-a-modular-android-app-architecture"&gt;&lt;strong&gt;How to build a Modular Android App Architecture?&lt;/strong&gt;&lt;br&gt;
*Working in a team of Android developers and by fixing a feature in the codebase ruins your code in the module? This is…*blog.mindorks.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope the above details explain about modular and let's see how to consume by the in-app module.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p-VEaR35--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/8064/0%2Av3rknMs_Iwrwktck" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p-VEaR35--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/8064/0%2Av3rknMs_Iwrwktck" alt="Photo by [Randy ORourke](https://unsplash.com/@taylor655ce?utm_source=medium&amp;amp;utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral)"&gt;&lt;/a&gt;&lt;em&gt;Photo by &lt;a href="https://unsplash.com/@taylor655ce?utm_source=medium&amp;amp;utm_medium=referral"&gt;Randy ORourke&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  APP -&amp;gt; Modular Communication
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The first point is how to access the modules from your app we can use builder class to configure and get access from the App module.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  APP -&amp;gt; Modular Communication
&lt;/h2&gt;

&lt;p&gt;In Modular define this class&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class LibOptions(val title: String, val body: String /*..more fields */) {

    class Builder {

        private lateinit var title: String
        private lateinit var body: String
        //... more fields

        fun setTitle(title: String): Builder {
            this.title = title
            return this;
        }

        fun setBody(body: String): Builder {
            this.body = body;
            return this;
        }

        fun create(): LibOptions {
            return LibOptions(title, body)
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The above class is a simple builder class that contains details that we want to sent to Modular.&lt;/p&gt;

&lt;p&gt;Next, Declare Singleton INSTANCE of Library to get access from the app.&lt;/p&gt;

&lt;p&gt;For singleton instance creation we can use by following pattern.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;open class SingletonHolder&amp;lt;out T: Any, in A&amp;gt;(creator: (A) -&amp;gt; T) {
    private var creator: ((A) -&amp;gt; T)? = creator
    @Volatile private var instance: T? = null

    fun getInstance(arg: A): T {
        val i = instance
        if (i != null) {
            return i
        }

        return synchronized(this) {
            val i2 = instance
            if (i2 != null) {
                i2
            } else {
                val created = creator!!(arg)
                instance = created
                creator = null
                created
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Want to know more about singleton instance follow below link.&lt;br&gt;
&lt;a href="https://medium.com/@BladeCoder/kotlin-singletons-with-argument-194ef06edd9e"&gt;&lt;strong&gt;Kotlin singletons with argument&lt;/strong&gt;&lt;br&gt;
*object has its limits*medium.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's create Instance LibManger,&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import android.content.Context
import androidx.appcompat.app.AlertDialog

class LibManager  constructor(val context: Context) {

    init {
        // do some stuff
    }

    fun show(options: LibOptions) {
        val builder = AlertDialog.Builder(context)
        builder.setTitle(options.body).setMessage(options.body)
        builder.setNegativeButton("Close") { dialog, which -&amp;gt; dialog?.dismiss() }
        options.body
    }

    companion object : SingletonHolder&amp;lt;LibManager, Context&amp;gt;(::LibManager)
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now we can call this method in the App Module using this singleton class.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LibManager.getInstance(this).show(LibOptions.Builder().setBody("Alert Dialog BODY").setTitle("Alert").create())
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When we create an android module in an android studio it automatically add the below section in App.Gradle&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;implementation project(":library")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;We can easily reuse this module library in every project by using&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File -&amp;gt; New -&amp;gt; Import Module&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;But the problem is the whole module source code must be in the same system to use in mutiple project. For that we can D**eploy **library to maven, jCenter repository then we can consume it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For example, In App.Gradle&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;implementation 'com.domain.library:alert-library:1.0.0'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Deploy &amp;amp; Release&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An Android library is structurally the same as an Android app module. It can include everything needed to build an app, including source code, resource files, and an Android manifest. However, instead of compiling into an APK that runs on a device, an Android library compiles into an Android Archive (AAR) file that you can use as a dependency for an Android app module. Unlike JAR files, AAR files can contain Android resources and a manifest file, which allows you to bundle in shared resources like layouts and drawables in addition to Java classes and methods.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--imayv99b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/5760/0%2AT-OPxl5fec2PLon5" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--imayv99b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/5760/0%2AT-OPxl5fec2PLon5" alt="Photo by [Vidar Nordli-Mathisen](https://unsplash.com/@vidarnm?utm_source=medium&amp;amp;utm_medium=referral) on [Unsplash](https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral)"&gt;&lt;/a&gt;&lt;em&gt;Photo by &lt;a href="https://unsplash.com/@vidarnm?utm_source=medium&amp;amp;utm_medium=referral"&gt;Vidar Nordli-Mathisen&lt;/a&gt; on &lt;a href="https://unsplash.com?utm_source=medium&amp;amp;utm_medium=referral"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There are plenty of platforms for hosting your Android library and create its Gradle or maven dependency. You can choose over &lt;strong&gt;JitPack&lt;/strong&gt; or &lt;strong&gt;JCenter&lt;/strong&gt; or &lt;strong&gt;Maven Central&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ref: Follow this link to configure the publication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JCenter&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://dev.to/mohitrajput987/develop--publish-your-own-sdk-in-android---part-3create-gradle-dependency-4nam"&gt;&lt;strong&gt;Develop &amp;amp; Publish your own SDK in Android - Part 3(Create gradle dependency)&lt;/strong&gt;&lt;br&gt;
*Mohit Rajput ・8 min read This is the 3rd and last part of "Develop &amp;amp; Publish your own SDK in Android" series. We have…*dev.to&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's quite a time to set up configurations mostly preferable for organization because source code kept in private.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JitPack&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://jitpack.io/"&gt;&lt;strong&gt;JitPack | Publish JVM and Android libraries&lt;/strong&gt;&lt;br&gt;
*JitPack makes it easy to release your Java or Android library. Publish straight from GitHub or Bitbucket.*jitpack.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the easiest way to publish no need to create an account and not a lot of configurations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problems &amp;amp; Fixs
&lt;/h2&gt;

&lt;p&gt;The above example didn’t use any external library in the library module. For example if we add some library like stylable toast in library when publish happens its also need to ship with package.&lt;/p&gt;

&lt;p&gt;Simply,&lt;/p&gt;

&lt;p&gt;LibraryA is consumed LibraryB when I use LibraryA in App its doesn't know about LibraryB so it will cause runtime exception(No Class Found Exception).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is also known as &lt;strong&gt;Transitive Dependency&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Transitive Dependency&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A variant of a &lt;a href="https://docs.gradle.org/current/userguide/dependency_management_terminology.html#sub:terminology_component"&gt;component&lt;/a&gt; can have dependencies on other modules to work properly, so-called transitive dependencies. Releases of a module hosted on a &lt;a href="https://docs.gradle.org/current/userguide/dependency_management_terminology.html#sub:terminology_repository"&gt;repository&lt;/a&gt; can provide &lt;a href="https://docs.gradle.org/current/userguide/dependency_management_terminology.html#sub:terminology_module_metadata"&gt;metadata&lt;/a&gt; to declare those transitive dependencies. By default, Gradle resolves transitive dependencies automatically. The version selection for transitive dependencies can be influenced by declaring &lt;a href="https://docs.gradle.org/current/userguide/dependency_constraints.html"&gt;dependency constraints&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To solve this we need to add the “pom” file which contains all dependency details.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A Project Object Model or &lt;strong&gt;POM&lt;/strong&gt; is the fundamental unit of work in &lt;strong&gt;Maven&lt;/strong&gt;. It is an XML &lt;strong&gt;file&lt;/strong&gt; that contains information about the project and configuration details used by &lt;strong&gt;Maven&lt;/strong&gt; to build the project. It contains default values for most projects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;First, We need to import the external library in Gradle by using &lt;strong&gt;api **or **implementation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, In Module.Gradle&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dependencies {
    //...

    api 'com.muddzdev:styleabletoast:2.2.3'   

    // retrofit
    api 'com.google.code.gson:gson:2.8.6'
    api 'com.squareup.retrofit2:retrofit:2.6.1'
    api 'com.squareup.retrofit2:converter-gson:2.6.1'

    //...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Then add this line end of Module.Gradle&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;publishing {
    publications {
        aar(MavenPublication) {
            groupId packageName
            version = libraryVersion
            artifactId project.getName()

            // Tell maven to prepare the generated "*.aar" file for publishing
            artifact("$buildDir/outputs/aar/$**{**project.getName()**}**-release.aar")

            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                // Iterate over the api dependencies (we don't want the test ones), adding a &amp;lt;dependency&amp;gt; node for each
                configurations.api.allDependencies.each {
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', it.group)
                    dependencyNode.appendNode('artifactId', it.name)
                    dependencyNode.appendNode('version', it.version)
                }
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That's it, there is no need to generate pom file on own above code automatically get “&lt;strong&gt;api&lt;/strong&gt;’ and add it to pom file.&lt;/p&gt;

&lt;p&gt;That's all for PART 1.&lt;/p&gt;

&lt;p&gt;Let's see in PART 2.&lt;/p&gt;

&lt;p&gt;Reference:&lt;br&gt;
&lt;a href="https://developer.android.com/studio/projects/android-library.html#aar-contents"&gt;&lt;strong&gt;Create an Android library | Android Developers&lt;/strong&gt;&lt;br&gt;
*An Android library is structurally the same as an Android app module. It can include everything needed to build an app…*developer.android.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/mohitrajput987/develop--publish-your-own-sdk-in-android---part-3create-gradle-dependency-4nam"&gt;&lt;strong&gt;Develop &amp;amp; Publish your own SDK in Android - Part 3(Create gradle dependency)&lt;/strong&gt;&lt;br&gt;
*Mohit Rajput ・8 min read This is the 3rd and last part of "Develop &amp;amp; Publish your own SDK in Android" series. We have…*dev.to&lt;/a&gt;&lt;br&gt;
&lt;a href="https://jitpack.io/"&gt;&lt;strong&gt;JitPack | Publish JVM and Android libraries&lt;/strong&gt;&lt;br&gt;
*JitPack makes it easy to release your Java or Android library. Publish straight from GitHub or Bitbucket.*jitpack.io&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.to/mohitrajput987/develop--publish-your-own-sdk-in-android---part-1know-an-aar-file-g9k"&gt;&lt;strong&gt;Develop &amp;amp; Publish your own SDK in Android - Part 1(Know an AAR file)&lt;/strong&gt;&lt;br&gt;
*"Android is the kind of runaway smash hit that techies spend their careers dreaming about." - Daniel Lyons Mohit Rajput…*dev.to&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>sdk</category>
      <category>kotlin</category>
      <category>developer</category>
    </item>
  </channel>
</rss>
