Pkmmte/PkRSS: a fluent chain, a PageTracker, and a ProGuard keep rule
A powerful RSS feed manager for Android
At a glance
- What is it?
- An Android RSS library whose entire surface is a chain of method calls: start from a context, load a url, choose between an asynchronous finish and a synchronous one, and let the library keep track of which page you reached. The version in the README is from 2015 and its Gradle snippet uses a configuration that has since been removed.
- Who is it for?
- Use PkRSS if you are building an Android app that reads feeds and want one-line asynchronous loading with pagination handled for you rather than assembling requests by hand. Two checks first.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Probably not. The repository last received commits 105 months ago, on February 11, 2018.
- What is it written in?
- Mainly Java, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Star history
- Pkmmte/PkRSS100 ★ · +0
| Repository | 2026-08-18 | 2026-10-23 |
|---|---|---|
| Pkmmte/PkRSS | 100 | 100 |
0 Stars in the last 66 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The whole API is a chain that ends in async or get
Loading a feed is one line, and the shape of that line is the design.
PkRSS.with(this).load(url).async();You start from a context, hand it a url, and terminate the chain with the call that determines when the work happens. `async()` returns control immediately and does the fetch in the background. The README says the library offers a fluent API for flexible requests, often one line of code, and points to a separate sample application for a fuller picture. The wider surface is listed rather than shown: custom parsers, marking articles as read or favourited, an instance builder, custom article objects and request cancelling. So what you get is a small chainable front end with the parser and the article model left replaceable.
nextPage works because a PageTracker holds the position
Pagination is the part that explains why the library exists rather than a plain HTTP call.
PkRSS.with(this).load(url).nextPage().callback(this).async();Two things happen in that line. `nextPage()` asks for the page after the current one, and `callback(this)` registers the object that will receive it. The reason `nextPage()` needs no argument is that PkRSS keeps track of which page was last loaded using a component called a PageTracker, so the position is state the library holds rather than something the caller tracks. If you want to override that, there is a `page(int)` call to name a page explicitly, and the search variant uses the same mechanism.
PkRSS.with(this).load(url).search(query).page(int).get();That last line is the synchronous path, returning a search result for a term on a given feed rather than a page of items.
The Gradle snippet uses a configuration that has been removed
The dependency instructions offer three routes, and one of them is now a historical artefact.
compile 'com.pkmmte.pkrss:pkrss:1.2'The Gradle line uses the `compile` configuration, which was removed from Gradle years after this README was written, so a current build will not accept it as written. The Maven block is a plain dependency declaration and is unaffected.
<dependency>
<groupId>com.pkmmte.pkrss</groupId>
<artifactId>pkrss</artifactId>
<version>1.2</version>
</dependency>The third route is to download the latest JAR from the release page, which implies dropping a file into a project by hand. Both that and the version number are consistent with a library distributed in the era before Android libraries moved to a hosted repository as the default.
Two build files and two CI configurations are checked in
The top level of the repository carries both build systems at once: a Gradle setup with a build file, a settings file, a Gradle properties file, a wrapper directory and the wrapper scripts for both shells, and a Maven POM beside them. There is also a checked-in IDE module file with the project name in it, which is the kind of file that usually belongs to a developer's machine rather than to everyone else's. Continuous integration is configured twice as well, with a Travis configuration and a Circle configuration side by side. None of this is explained in the README, so a contributor has to work out which build is authoritative before making a change, and the honest summary is that the packaging reflects a period when both ecosystems were in use rather than a deliberate dual-build setup.
ProGuard needs two lines, one of which names OkHttp
The shrinking configuration section is short and specific.
-keep class com.pkmmte.pkrss.Callback{ *; }
-dontwarn com.squareup.okhttp.**The first rule keeps the library's callback class with all of its members, which is what you need because the library instantiates callbacks reflectively or names them from configuration. The second rule does not keep anything: it tells the shrinker to stop warning about the OkHttp package, which is the HTTP layer underneath the fluent API. That line is the more informative one for a reader, since it names the transport the library uses even though the README never mentions OkHttp itself. If you are integrating this into an app that runs R8 or ProGuard, both lines are required for the chain to keep working after shrinking.
The sample application lives in another repository
Documentation is spread across four links rather than sitting in the repository. There is a project website hosted on the account's GitHub pages, a release page used for the JAR download, a separate repository holding a full sample application under the name TechDissected, and a generated Javadoc site. The README calls the sample application the reference for what the fluent chain looks like in a real app, and points to the Javadoc for the parts it only lists. For a library of this size that is a reasonable arrangement, but it does mean that reading the code in this repository gives you the implementation while understanding the API requires three other places. The library module itself sits in a directory named after the artifact.
Releases stopped in 2015, commits ran to 2018
The version history is short and the gap between it and the repository activity is the thing to note. The initial release is 1.1.1 from 2014-08-20, followed by 1.1.2 a week later and then 1.2 in September 2015, which is the version the dependency snippets ask for. The last push to master is dated 2018-02-11, more than two years after that release, so the repository has received changes that were never published as a new artifact. Anyone pinning 1.2 is pinning September 2015 code regardless of what the commit log shows after that. The project is not archived, it is licensed under Apache 2.0 with a 2014 copyright, and it names a single author with a personal site rather than a team or an organisation.
Editorial conclusion
Use PkRSS if you are building an Android app that reads feeds and want one-line asynchronous loading with pagination handled for you rather than assembling requests by hand. Two checks first. The Gradle dependency line uses the `compile` configuration, which current Gradle versions reject, so plan on translating it. And treat the 1.2 coordinate as frozen: the newest release tag is from 2015 while the last push to master is dated 2018-02-11, so there may be later commits that were never published to Maven.
Frequently asked questions
What does PkRSS do?
It is a fluent and flexible RSS feed manager library for Android. You start a chain from a context, load a url, and end with async for a background fetch or get for a synchronous one, with nextPage, search, page, callback and cancel among the calls available.
How does PkRSS handle pagination?
With a PageTracker that keeps track of which page was last loaded, so nextPage() needs no argument. You can bypass that state and name a page directly with page(int), and the same mechanism is used for paginated search queries.
How do I add PkRSS to an Android project?
The README gives a Gradle line using the compile configuration and a Maven dependency block for com.pkmmte.pkrss:pkrss version 1.2, or a JAR download from the release page. The Gradle configuration named there has since been removed from Gradle, so that line needs translating for a current build.
What ProGuard rules does PkRSS need?
Two lines: a keep rule for com.pkmmte.pkrss.Callback with all members, and a dontwarn rule for the com.squareup.okhttp package, which is the HTTP layer the library uses underneath its fluent API.
Is PkRSS still maintained?
The repository is not archived, but the newest release is 1.2 from 2015-09-25 and the last push to master is dated 2018-02-11, so the published artifact is older than the commit history. The license is Apache 2.0 with a 2014 copyright.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/pkmmte-pkrss)Star history chart for your README
[](https://hysenlabs.com/projects/pkmmte-pkrss)Was this useful?