This repository contains an Android application that reads and manages a BibTeX library hosted on Dropbox. The app expects a single .bib file (typically named bibliography.bib) inside a Dropbox folder and provides a lightweight UI for browsing, searching and opening associated files.
- Browse and search BibTeX entries parsed from a single
.bibfile stored on Dropbox - On-demand download of file attachments from Dropbox via a content provider (no persistent DB required)
- Open entry attachments and links (URL/DOI/file) from the Book details view
- Fuzzy, token-aware searching (order-insensitive, typo-tolerant)
- Search flags to limit searches to specific fields (title, author, keywords, journal, abstract, year, or any)
- Save and re-apply searches from the sidebar (quick access); delete saved searches from the sidebar
- Simple library management (add/remove a Dropbox folder as a library)
- Module:
app/ - Build system: Gradle (use the included
gradlew) - Convenience wrapper:
Makefile(top-level) - Typical output after a successful build:
unsigned-app.apkat repository root (copied from the module APK path by the Makefile)
- Android SDK and a JDK compatible with the Android Gradle Plugin
- Android 6.0+ (API 23+) by default — change
minSdkin the modulebuild.gradle.ktsif you need a different minimum - Kotlin compatible with the project (follow
build.gradle.ktsversions) - A Dropbox account and an App Key to access Dropbox files
- Add Dropbox credentials to your local environment or Gradle properties. A common approach:
- Put non-committed secrets in
local.propertiesor in your CI environment variables. - Example key name used by the project:
DROPBOX_APP_KEY(see project Gradle scripts for exact usage). - Keep secrets out of source control. Use
local.propertiesor encrypted CI variables.
- Put non-committed secrets in
The Makefile is a small convenience layer over the Gradle wrapper. Key variables defined in the Makefile:
BUILD_TYPE— Gradle assemble task (defaults toassembleRelease)APK_PATH— expected module output APK pathOUTPUT_NAME— filename copied to the repository root after a successful build (unsigned-app.apk)
You can review or update these variables within the top of Makefile to match custom package names, build types (debug vs release) or different output paths.
All commands below are executed from the project root.
-
Build (default Make target also copies the APK):
make— runs the Makefile default (build + copy-apk)make build— runs the Gradle assemble task defined byBUILD_TYPEmake copy-apk— copies the built APK fromAPK_PATHtounsigned-app.apkin the repo root
-
Install to a connected device:
make install— runsbuild,copy-apk, thenadb install -r unsigned-app.apk
-
Build and launch:
make run— installs and launches the app using thePACKAGE_NAME/MAIN_ACTIVITYdefined in the Makefile
-
Clean:
make clean— runs./gradlew cleanto remove build artifacts
-
Lint:
make lint— runs Gradle lint tasks
-
View logs:
make logcat— tails the device log for the app's PID (Makefile resolves the PID for the package)
Notes:
- If you prefer a debug APK for faster iteration, edit the Makefile:
- Set
BUILD_TYPE = assembleDebug - Set
APK_PATH = app/build/outputs/apk/debug/app-debug.apk
- Set
- Ensure
gradlewis executable:chmod +x gradlewif needed.
By default the Makefile copies the module APK to the repository root with the name unsigned-app.apk. If you change build variant or flavor, update APK_PATH in the Makefile to the correct output location.
You can use Gradle directly if you want more detailed output or to troubleshoot build issues:
- Make a debug build:
./gradlew assembleDebug
- Make a release build:
./gradlew assembleRelease
- Run unit tests:
./gradlew :app:testDebugUnitTest
- Print a stacktrace on failure:
./gradlew assembleDebug --stacktrace