[Nexus 9 Android Development] tjormola:
Hi,

I just didn't like seeing the popup message on every boot so I created a script to generate a modified vendor image based on the factory image with the properties fixed to match the ones of the ROM being used. If you flash the vendor partition with the image this script produces for your CM 12.1 snapshot ROM, the dialog is gone. Please read the comments on the script for more info.

#!/bin/sh

# Author: Tuomas Jormola <tj@solitudo.net>
# License: Public Domain
#
# This script modifies the factory vendor image from Google to be used with
# CM 12.1 on Nexus 9. By flashing the modified vendor image you can get rid
# of the "There's an internal problem with your device. Contact your
# manufacturer for details" popup displayed on device startup.
#
# The script was developed and tested on Ubuntu 15.04 vivid system. The script
# requires bsdtar and sparse image tools from Google. For Ubuntu/Debian based
# distros you can install the following packages to fulfil the dependencies:
# bsdtar android-tools-fsutils
#
# In order to make the image you need to download the Android 5.1.x factory
# image archive for you device from Google at
# https://developers.google.com/android/nexus/images
# or use these direct links for 5.1.1 LMY47X build
#
# "volantisg" for Nexus 9 (LTE):
# https://dl.google.com/dl/android/aosp/volantisg-lmy47x-factory-0adc3016.tgz
#
# "volantis" for Nexus 9 (Wi-Fi):
# https://dl.google.com/dl/android/aosp/volantis-lmy47x-factory-3efdc8d4.tgz
#
# Then you need a CM 12.1 snapshot ROM image. No official CM 12.1 snapshots
# exists as time of writing so you need to build it on your own or find
# some pre-built snapshot somewhere, see e.g.
# http://xdaforums.com/nexus-9/development/rom-cyanogenmod-12-1-t3129778
#
# Now run the script as root, for example:
#
# sudo bash /path/to/make-vendor-image.sh /path/to/volantisg-lmy47x-factory-0adc3016.tgz /path/to/cm-12.1-20150610-UNOFFICIAL-flounder.zip /path/to/modified-vendor-image-from-volantis-lmy47x-for-cm-12.1-20150610-UNOFFICIAL-flounder.img
#
# You can the flash the modified vendor image to the device with fastboot.
# Boot the device to bootloader, connect the device with a USB cable to the
# Linux machine and issue the command
#
# fastboot flash vendor /path/to/modified-vendor-image-from-volantis-lmy47x-for-cm-12.1-20150610-UNOFFICIAL-flounder.img
#
# You have to re-create and re-flash the vendor image each time you flash a
# new build of CM 12.1.

usage() {
echo "Usage: $0 FACTORY_IMAGE_TARBALL CM_ROM_ZIP NEW_VENDOR_IMAGE_FILE"
}

set -e
set -o verbose
set -o xtrace

if test "`id -u`" != 0; then
echo "This script needs to be run as root" 1>&2
exit 1
fi

FACTORY_IMAGE_TARBALL="$1"
CM_ROM_ZIP="$2"
NEW_VENDOR_IMAGE_FILE="$3"

case "$FACTORY_IMAGE_TARBALL" in
volantis*-*-factory-*.tgz)
PRODUCT="`echo $FACTORY_IMAGE_TARBALL | cut -d- -f1`"
BUILD="`echo $FACTORY_IMAGE_TARBALL | cut -d- -f2`"
;;
*)
echo "Invalid factory image tarball" 1>&2
usage
exit 1
;;
esac
if test -z "$CM_ROM_ZIP"; then
echo "No CM ROM zip file given" 1>&2
usage
exit 1
fi
if ! test -r "$CM_ROM_ZIP"; then
echo "CM ROM zip file not readable" 1>&2
usage
exit 1
fi
if test -z "$NEW_VENDOR_IMAGE_FILE"; then
echo "No new vendor image file given" 1>&2
usage
exit 1
fi

TEMP_DIR="`mktemp -d `"

bsdtar vxf "$CM_ROM_ZIP" -C "$TEMP_DIR" system/build.prop

BUILD_FINGERPRINT="`grep 'ro\.build\.fingerprint=' $TEMP_DIR/system/build.prop | cut -d= -f2`"
BUILD_DATE_UTC="`grep 'ro\.build\.date\.utc=' $TEMP_DIR/system/build.prop | cut -d= -f2`"
BUILD_DATE_STR="`LC_ALL=C LC_TIME=C date -ud @$BUILD_DATE_UTC`"

bsdtar xzOf "$FACTORY_IMAGE_TARBALL" "$PRODUCT-$BUILD/image-$PRODUCT-$BUILD.zip" | bsdtar xf - -C "$TEMP_DIR" vendor.img
simg2img "$TEMP_DIR/vendor.img" "$TEMP_DIR/vendor.raw"
mkdir "$TEMP_DIR/mnt"
mount -o loop "$TEMP_DIR/vendor.raw" "$TEMP_DIR/mnt"
perl -pne"s{^(ro\\.vendor\\.build\\.fingerprint)=.+$}{\$1=$BUILD_FINGERPRINT}" -i "$TEMP_DIR/mnt/build.prop"
perl -pne"s{^(ro\\.vendor\\.build\\.date)=.+$}{\$1=$BUILD_DATE_STR}" -i "$TEMP_DIR/mnt/build.prop"
perl -pne"s{^(ro\\.vendor\\.build\\.date\.utc)=.+$}{\$1=$BUILD_DATE_UTC}" -i "$TEMP_DIR/mnt/build.prop"
umount "$TEMP_DIR/mnt"
img2simg "$TEMP_DIR/vendor.raw" "$NEW_VENDOR_IMAGE_FILE"
rm -rf "$TEMP_DIR"