Also some really cool build logic

So I’ve covered in another post how I got to create a build.xml file for the MinimalBible. The actual process of writing the build.xml file is another story entirely.

First, a few disclaimers. Google’s version of the Apache HttpClient is old and outdated. You can’t just include the httpclient library in your project, as it produces errors. Also, I wanted an entirely automated, one-click build. That meant no copying in a new library by hand. Especially since said new library would not be compatible with code expecting a vanilla HttpClient (see Compatibility notes number 2). It’s possible there would be no compatibility issues, but I never followed this path. Finally, I had run into this problem when I was using Maven to build the jSword library. The solution I used then was to do a shaded build, which basically manipulated the bytecode to look for the library in a different path. Thus, all the code referencing org.apache.http could instead reference org.apache.shaded.http, or something similar.

So, knowing that I was going to write a build script using Ant, I now had to figure out how to do something similar to the Maven shaded build. Very long story short, JarJar was the plugin I found to do the trick (ironically, searching “JarJar” on Google yielded the library and not the character as the first result. I’m OK with this). I had a couple of reservations since the most recent version of jarjar was released November 2012, but so far it’s panned out all right.

Now I needed to edit the jar task in Ant to use the new JarJar plugin. The existing jar task that I copied from And-bible did most of the work, but did not include the shaded build. The JarJar Getting Started page had most of the information I needed on getting this set up for MinimalBible. Honestly, the only thing I really needed that wasn’t documented was including multiple jars at a time. I didn’t want to manually list out a ]7 for every jar file that needed to get built in with jSword, so after a lot of digging around, I found the . It doesn’t seem to be officially documented, so using some information found on Stack Overflow, I hacked together a solution that allowed me to include the jSword dependencies, while excluding the libraries used for testing.

So at this point, I’ve now got a shaded build for jSword working as expected. I’m now ready to start focusing on MinimalBible code exclusively, and I can easily include building jSword as a part of building MinimalBible. In the future I’ll need to work on stripping out more of the code that goes into jSword that isn’t needed (it’s currently an 18MB library), but for now I’ve got a stable, consistent, one-click build working. I’ll call that good.

When we're talking about starting a project, I think it's incredibly important to make sure you're clear on why it is that the project is being undertaken. On that note, what exactly is MinimalBible?

MinimalBible is going to be a Bible reading and study app for the Android platform with three goals in mind:

  1. Usability
  2. Efficiency
  3. Simplicity

In my opinion, the current offerings for a Bible app could really use some improvement. The three main apps I'm aware of are: YouVersion, ESV, and AndBible. I have a few issues with each:

  • YouVersion - Tends to be very slow, and I think it tries to accomplish way too much (friends, videos, plans, etc.). Additionally, I'd prefer having a pure offline app, YouVersion gives me a lot of notifications if my data is off.
  • ESV - Hasn't been updated in a while, and from conversations with people, it tends to crash on some devices. Additionally, it's hard to share verses, bookmarks, etc
  • AndBible - The interface just seems to be very out of date. I like how focused it is, but it doesn't take advantage of a lot of modern UI design. It does use the same backing library I'm planning on though. So in addition to changing a lot of things that I think are frustrating in other Bible apps, there are a few things I want to do in addition:

  • Infinite scroll - I don't want to keep clicking buttons to switch between chapters, disrupting how they flow. I'd like to be able to scroll through an entire book at a time.

  • Search - Search functionality seems to be problematic for everyone. I'd like to get a more fuzzy search implemented, as the current searches I've used haven't been very helpful unless I already know most of the text.

  • Footnotes/Commentary - I think it would be great to make it easier to view Commentaries or footnotes inline. This will take some work to get a usable UI, but trying to view footnotes especially is challenging with the apps listed above.

So I'm hoping to use this site to document my ongoing development and progress, so other people can use this as a resource in the future! Looking forward to taking this journey, and I'd appreciate prayers for grace and strength to go through with this!