¿Cómo se debe comenzar a desarrollar un producto de hardware Android desde cero?

Se requerirá mucha paciencia y, debido a la falta de documentación, será frustrante.

Lo primero que debe centrarse es el factor de forma del dispositivo. ¿Es un reloj inteligente, TV, teléfono, tableta o es un dispositivo sin cabeza?
Una vez finalizada la definición del formulario del dispositivo, el siguiente paso importante sería decidir qué hardware utilizar para darle vida.

Por nuestra conveniencia, supongamos que estamos construyendo un reloj inteligente.

Ahora queremos averiguar cuáles son los componentes básicos que se necesitan para nuestro producto. Entonces, para nuestro reloj inteligente, queremos lo siguiente:

1) Un procesador + RAM decentemente potente basado en especificaciones decididas
2) Conectividad inalámbrica (Bluetooth, WiFi)
3) Un buen pmic (administración de energía)
4) pantalla LED
5) Sensores: giroscopio, acelerómetro, etc.

Entonces, en base a estas características, me gustaría buscar una plataforma preparada (son sorprendentemente fáciles de encontrar).
Al elegir una solución tan preparada se ahorra mucho tiempo, ya que la placa no tiene que ser creada desde cero y el nuevo hardware no tiene que sintetizarse específicamente según los requisitos individuales. Esto no solo ahorra mucho tiempo, sino que es significativamente más barato que la alternativa.

Entonces tenemos el SoC y el hardware básico. Al comprar este hardware, se proporciona uno con el Paquete básico de soporte de placa (BSP) y los controladores para el hardware individual adquirido.
Nuevamente tendré que hacer algunas suposiciones aquí. Supongamos que obtenemos un cargador de arranque (uboot) y un kernel de Linux del proveedor. Este kernel podría ser androidizado, de lo contrario, eche un vistazo a todos los parches del kernel que necesita agregar a esta versión del kernel de Linux para androidize su kernel.
los básicos son: Binder, Ashmem, WakeLocks, Alarm, LowMemKiller.
Los siguientes son útiles:
https://source.android.com/devic…
http://elinux.org/Android_Kernel…

El núcleo ya estará formado por los controladores para admitir el hardware que viene junto con la plataforma que se compra al proveedor.

Así que ahora construya este Bootloader y Kernel y aplíquelo al dispositivo. Obtenga un espacio de usuario minimalista que admita una consola, busybox, toolbox para que pueda ejecutar comandos de shell básicos y realizar pruebas para ver si las cosas funcionan bien.
Ahora viene el marco de Android (espacio de usuario). Elija la versión de Android que sea más adecuada para este producto. Descargue el código fuente de AOSP.

En el directorio de compilación, agregue definiciones de dispositivo para su hardware. La variedad de definiciones de dispositivos y varios cambios están documentados en el sitio web de Android / Google o están fácilmente disponibles en línea (no entraré aquí).

Una vez que se han agregado las definiciones de compilación para el producto, a través de .mk (makefiles) elija los componentes que deben compilarse desde la fuente AOSP. Los componentes se pueden agregar y quitar según su conveniencia. Construye el AOSP.
Vuelva a particionar el almacenamiento en el dispositivo de la manera que necesita la estructura del sistema de archivos de Android y luego muestre las imágenes integradas en el almacenamiento.

En un mundo ideal, debería poner en funcionamiento Android, pero en nuestro mundo cruel y de prueba, se requerirá una gran cantidad de depuración y corrección de errores en esta etapa para poner en funcionamiento el dispositivo Android con la capacidad de ejecutar aplicaciones.