[Nook Color Android Development] mateorod:
Brand New Q&A!

Q: So why Botbrew and package management and not flashable zips?

A: Ahhh...the million dollar question, I suppose. After all, almost all system changes have been done with flashable zips everywhere else, right?​

Well, part of the experiment here is to get people comfortable with the idea of package management for their Android device. It is a method that people use with Linux (think Synaptic) and iPhones (Cydia) but is not yet in vogue with Android. But the advantage is not just theoretical, there is tangible and useful value that you will get to experience immediately.​

For instance, installing system apps for ICS makes the most sense when done through a package manager. With the CM repo being compiled on a nightly basis, the system apps themselves are a moving target. What I mean by that is that the services.jar I mod today may break an install tomorrow. If I distribute the file in a flashable zip that people apply over their install every time they upgrade, well, once the Cyanogen repo updates and the services.jar no longer plays nice with the rest of the install, everyone who flashes that zip on a regular basis is in for a nasty surprise that morning.​

With a package manager, the first person who realizes the services.jar is out of date (almost always me) just reports back to the thread. I quickly make a new file and update the Botbrew repo. Users don't have to monitor a thread, or personally make a new file, that only has to be done by one person.​

Now, as is available in this thread, think if there are two different mods to that same services.jar. One user just wants the original mod, while the next would like them both. Neither user has the time or energy to personally decompile and mod the source code for every nightly, but flashing will only install one or the other services.jar. The package management method allows the software distributors to foresee this, and allow for it. That is why you see packages like mateorod-pdroid-v6, something that is just not available for any other nightly install.​

One last benefit, and this one is a bit theoretical. As of right now, Botbrew only has a few people using it to supply software. But as awareness and the user base grows, more developers will see it as a means of reaching a wider audience. Right now, things like scripts and themes rely solely on word-of-mouth. Think of Botbrew as a potential store-front for all manner of software, everything that isn't a user app (because, of course, Google Play and others already do a fine job of that) could be found here, waiting for your perusal and discovery. That day isn't here yet, but by being willing to try a package manager, you are part of the growing user base that will attract devs. Getting users is the hard part, the devs will follow.​

Q: So what is Botbrew, exactly, if it just distributes software?

A: At its base, as inportb will tell you, Botbrew is simply a sophisticated installer, with the capacity to add software repos at will. When you install the repository-meteorod package, you are simply downloading my list of available software. You could add as many repos as you want from the Opkg configuration tab in the menu. However, Botbrew also uses unique maintainer scripts that allow software to be installed with a delicacy and precision not available elsewhere. Modding a live install is no everyday thing, and as Android devices get beefier and more powerful, some of the system-mods can be done live on the device, no pre-made software necessary. That will put the power of every script, theme and mod right in your hands, to apply, try and uninstall at will, without having to flash. There are enormous benefits to this.​

Okay, the package management proselytizing is done...on to practical matters.

Such as...

Package date issues and build selection

Q:

ZOMG!

I just installed a package and now I have BOOTLOOPS! What do I do?

A: As they say, don't panic. Just reboot, and press the 'n' button as Cyanoboot loads. Use the menu to boot into recovery and reflash your ROM. The system app just went out-of-date and you were the lucky first user to discover it. Please come to the thread and report any such occurrence. I check each package on a nightly basis (because I love yooouououo) but I have missed a big repo change before and likely will again. I keep a close eye on the thread, and will update the Botbrew repo as soon as possible.​

Q: What do you mean, a package goes out-of-date?

A: As I said above, ICS is, as of right now, in an experimental and alpha state. What we flash every night isn't even an official release. I think in Cyanogen's perfect world, the amount of users on CM9 as a daily driver would be much less, but with it's popularity and rapidly educated user-base, that genie is out of the bottle. But when the source code used to create these system apps is changed enough, the apps made from the older code are no longer compatible with the newer builds. When that happens...ZOMG! and all that jazz.​

Q: Even though you just explained how it's basically risk free I am cautious by nature. How do I lessen the chances of bootloops?

A: Just flash in the morning. I check these packages almost every night on builds I set to be tested an hour or two before eyeballer and Samiam go live. By the time you wake up in the morning, there is a 95% chance the packages have already been vetted and replaced if necessary.​

Q: How often do the packages go out-of-date?

A: Maybe once every three weeks, although I recently had one go out of date after two days (ouch, right?). If you install the packages only over the latest nightly, you'll likely never notice.​

Q: So how do I know if the build I am using is covered by the Botbrew repo?

A: The absolute best way is to flash a nightly on the day it is released, go into Botbrew and install your packages then. That way you'll always be covered. Those packages will last as long as your nightly is installed. When you feel you are ready to update, just grab the latest nightly and do the same thing again.​

Q: I am real partial to the build from (for example) March 3rd. What if I want to use Botbrew packages on a certain older nightly?

A: At the bottom of this Q&A there is a list of downloadable packages and the build dates they go with. The links download the package which is installable from any browser or file manager, as long as Botbrew is installed.​

Q: What do I need to do after updating to a new nightly?

A: It's real easy. Just launch Botbrew. A screen should automatically appear that supplies you with the list of packages that have been damaged (read: overwritten) by the flash. Select those packages and press reinstall. Then reboot and you're done.​

Q: Does it work on both eyeballer and Samiam303's builds?

A: The answer is yes, with a catch. Eyeballer clobbers his builds every night, which means he is using no prebuilts from earlier builds and everything in his build is fresh made from that night's source. Samiam currently does not. That means that if you are using Samiam's builds, I recommend you read your build.prop in /system and find the ro.build.date. The date that is there is the last time Sam clobbered, and you will need to use a package that corresponds with that date. You can download the package and save it to your sdcard, and whenever you update, simply check the build date. If he clobbers, pick the corresponding package and go from there. The list of older packages are at the bottom of this post.​

Q: OpenGL? Do I need different packages if I do/do not have that enabled?

A: Nope. The packages work with or without OpenGL functionality.​

Q: What about the (totally kick-butt) incremental updates that Team Win is distributing through GooManager?

A: The diff-cm.zips actually break the mechanism Botbrew uses to determine if a flash has been performed (symlinks). For now, we just hope user education will carry us until we come up with a more permanent solution. You

WILL

have to repair the packages after a flash. Just go into Botbrew and select the germane packages and reboot.​

Installation problems and errors

Q: I just ran "su -c v6" and the terminal returned only a "$"! What gives?

A: That is an unfortunate side-effect of the package installation (one I hope I recently fixed!). Launch Botbrew, go to the v6 package and press reinstall. The script will work in the terminal as before, no reboot necessary.​

Q: I pressed Auto-remove, but it failed! What went wrong?

A: It is an unfortunate bug in Opkg, the engine that powers Botbrew, where the autoremoval process sometimes fails. Just try it again until it works. I find that when it fails for me, the third try finishes the removal process completely.​

Q: I just tried to install a mateorod package, but the install failed because of "check_data_file_clashes" and "file is already provided by * android-framework*"?

A: Yep, that is a designed file conflict, added to the packages to protect the integrity of the backups and prevent users from accidentally losing functionality they really wanted. The error means you already have a mateorod-whatever package installed. Look for it in the installed packages screen, uninstall that package first, and then try to install your other mateorod package.​

Q: Can I get (your favorite mod, script, or theme) supported by a package from Botbrew?

A: We can certainly try. Botbrew is only limited to offering packages we can figure out how to make. Request it in the thread, and maybe we can find a way to package it up together.​

Older Packages

These packages are available for those of you running an older nightly who do not wish to flash an update. If your build is past any of the dates below, you can install directly from Botbrew!

If Botbrew is installed, the packages below can be installed directly from any browser or file manager.

ONLY install one package at a time!

3/10-4/14

PDroid only

android-framework-pdroid_1.3.2-2_encore.opk

Pdroid+v6

android-framework-pdroid-v6_1.3.2-2_encore.opk

v6 only

android-framework-services-v6.opk_0.0.4-5

4/17-5/05

PDroid only

android-framework-pdroid_1.3.2-4

PDroid+v6

android-framework-pdroid-v6_1.3.2-4

v6 only

android-framework-services-v6_0.0.4-6

5/05-5/06

(Ouch, right?)

PDroid only

android-framework-pdroid_1.3.2-5

PDroid+v6

android-framework-pdroid-v6_1.3.2-5

v6 only

android-framework-services-v6_0.0.4-7

5/07-5/10

(Ouch again, amirite?)

PDroid only

android-framework-pdroid_1.3.2-6

PDroid+v6

android-framework-pdroid-v6_1.3.2-6

v6 only

android-framework-services-v6_0.0.4-8

5/11-5/14

(It is starting to feel personal)

PDroid only

android-framework-pdroid_1.3.2-7

PDroid+v6

android-framework-pdroid-v6_1.3.2-7

v6 only

android-framework-services-v6_0.0.4-9

5/15-5/18

(It is

PDroid only

android-framework-pdroid_1.3.2-8

PDroid+v6

android-framework-pdroid-v6_1.3.2-8

v6 only

android-framework-services-v6_0.0.4-10

5/19-5/26

PDroid only

android-framework-pdroid_1.3.2-9

PDroid+v6

android-framework-pdroid-v6_1.3.2-9

v6 only

android-framework-services-v6_0.0.4-12

5/26-5/27

PDroid only

android-framework-pdroid_1.3.2-10

PDroid+v6

android-framework-pdroid-v6_1.3.2-10

v6 only

android-framework-services-v6_0.0.4-13

5/27-5/30

PDroid only

android-framework-pdroid_1.3.2-11

PDroid+v6

android-framework-pdroid-v6_1.3.2-11

v6 only

android-framework-services-v6_0.0.4-14

5/31-6/03

PDroid only

android-framework-pdroid_1.3.2-12

PDroid+v6

android-framework-pdroid-v6_1.3.2-12

v6 only

android-framework-services-v6_0.0.4-15

6/03-6/07

PDroid only

android-framework-pdroid_1.3.2-13

PDroid+v6

android-framework-pdroid-v6_1.3.2-13

v6 only

android-framework-services-v6_0.0.4-16

6/08-6/10

PDroid only

android-framework-pdroid_1.3.2-14

PDroid+v6

android-framework-pdroid-v6_1.3.2-14

v6 only

android-framework-services-v6_0.0.4-17

Current nightlies and any Android 4.0.3 builds are always supported by the package in repository-mateorod

*Note: There is no version 11 for the android-framework-services-v6 package.

If you are running samiam's builds, the package you need will depend on how recently he clobbered! Check the build date in the build.prop and choose your package accordingly!