What Is the FQNews Android App? Purpose and Architecture Explained

The FQNews Android app is an open-source news aggregator that enables users to access "wall-outside" (uncensored) RSS feeds without a full VPN client by routing traffic through user-imported proxy nodes (SS/Vmess/Vless/Trojan).

Maintained within the bannedbook/fanqiang repository, the FQNews Android app provides a lightweight solution for circumventing internet censorship. Unlike traditional VPN applications that tunnel all device traffic, this specialized client focuses specifically on news consumption, bundling pre-configured banned-news sources while allowing users to import custom proxy configurations.

Core Purpose and Architecture

According to the repository documentation in fqnews2/README.md, the application serves as a censorship-circumventing news client through four integrated mechanisms. The primary function centers on aggregating RSS and Atom feeds typically inaccessible behind the Great Firewall.

Proxy Node Import and Management

Users initiate connectivity by pasting newline-separated proxy URLs directly into the application interface. The system supports multiple protocols including Shadowsocks (SS), Vmess, Vless, and Trojan nodes.

The storage mechanism relies on Android shared preferences through the PreferenceProvider class:

// In the import-node screen (simplified)
val nodes = clipboardText.split("\n")
nodes.forEach { nodeUrl ->
    // Store each node in the app's shared preferences
    PreferenceProvider.saveNode(nodeUrl.trim())
}

Implementation location: dpreference/src/main/java/me/dozen/dpreference/PreferenceProvider.java

RSS Feed Fetching Through the Great Firewall

Once nodes are configured, background workers fetch configured RSS URLs using the imported proxy settings. The networking layer utilizes OkHttp with dynamic proxy configuration to bypass restrictions.

val request = Request.Builder()
    .url(feedUrl)                     // e.g. https://example.com/rss
    .proxy(Proxy(Proxy.Type.SOCKS, InetSocketAddress(proxyHost, proxyPort)))
    .build()
okHttpClient.newCall(request).enqueue { response ->
    // Parse and cache the feed items
    FeedParser.parse(response.body?.string() ?: "")
}

This logic resides within the net.frju.flym.* package, specifically handling the feed retrieval and parsing pipeline.

Local Caching and Offline Reading

Downloaded articles are stored locally on the device via the app's internal storage mechanisms. This enables offline access to censored content regardless of current network connectivity or proxy availability.

Bundled Default Sources

The application ships with pre-selected "禁闻网" (banned-news) channels, providing immediate access to censored content without requiring manual source configuration.

Automatic Update Mechanism

The FQNews Android app implements a custom update checker that queries remote JSON metadata hosted on GitHub. This bypasses potential Play Store restrictions in certain regions.

val updateUrl = getString(R.string.update_check_url)   // → https://raw.githubusercontent.com/bannedbook/fanqiang/master/fqnews/update.json
val json = okHttpClient.get(updateUrl).body?.string()
val latestVersion = JSONObject(json).getString("version")

The update URL is defined in core/src/main/res/values/strings.xml and points to fqnews/update.json, which contains the latest version information and download links.

Key Source Files and Architecture

Understanding the codebase structure reveals how the components interact:

Summary

  • The FQNews Android app is a specialized news client within the bannedbook/fanqiang ecosystem designed specifically for circumventing censorship.
  • It operates by importing SS/Vmess/Vless/Trojan proxy nodes rather than implementing a full VPN tunnel.
  • The application fetches RSS/Atom feeds through these configured proxies, bypassing Great Firewall restrictions.
  • Content is cached locally for offline reading.
  • Default banned-news sources are bundled for immediate use.
  • Update checking occurs against a remote JSON file hosted on GitHub to ensure users access the latest version despite regional app store restrictions.

Frequently Asked Questions

Does FQNews require a separate VPN application to function?

No. The FQNews Android app functions independently by utilizing user-imported proxy nodes. While it routes traffic through these nodes similarly to a VPN, it does not require a separate VPN client installation. Users simply paste their SS, Vmess, Vless, or Trojan node URLs directly into the app's import interface, which stores them via PreferenceProvider.saveNode().

What types of proxy protocols does FQNews support?

According to the source code analysis, the application supports Shadowsocks (SS), Vmess, Vless, and Trojan protocols. These node URLs are parsed from clipboard input and stored in the device's shared preferences for subsequent use in configuring the OkHttp client's proxy settings.

How does the app handle updates if it's not available through standard app stores?

The FQNews Android app implements an internal update checker that queries https://raw.githubusercontent.com/bannedbook/fanqiang/master/fqnews/update.json. This JSON file, referenced in core/src/main/res/values/strings.xml via the update_check_url string resource, contains the latest version metadata and download links, allowing the app to self-update directly from GitHub.

Can I read articles offline with FQNews?

Yes. The application automatically caches downloaded RSS feed items locally on the device through the FeedParser.parse() workflow. This caching mechanism enables users to read previously fetched articles even when disconnected from the internet or when proxy nodes are unavailable.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →