Hiểu không đúng rồi.
Cross Compiler (CComp) : chỉ đơn giản là một trình biên dịch thực thi việc biên dịch thông qua điều kiện cần và đủ của môi trường mà nó sẽ thực hiện quá trình tạo sản phẩm.
Mỗi lần thực hiện build từ source code ra sản phẩm thì CComp sẽ phải kiểm tra xem cấu hình đang là tạo ra sản phẩm cho môi trường nào rồi thực hiện biên dịch.
Ví dụ để build một ứng dụng lấy tên người dùng hiện tại.
Trên Windows thì sẽ dùng Windows API như GetCurrentUser(), còn Linux thì có thể là whoami, vậy sẽ có việc cấu hình có thể là:
(code này chỉ mang tính chất minh hoạ)
#ifdef __WINDOWS__
#define get_current_user GetCurrentUser
#else
#define get_current_user exec("whoami")
#endif
và trong code thì phải sử dụng hàm get_current_user() chứ ko phải hai hàm riêng của từng hệ điều hành thế kia.
GCC trên Linux là của Linux, chứ không phải Windows.
Cygwin là bản phát triển port bộ tool của GNU (bao giờ GCC) sang Windows. Và nó là một code khác tương tự chứ không chung một bộ code tạo nên GCC.
Các file chạy khi được build hướng tới môi trường nào thì phải tuân thủ cấu trúc file. Ví dụ trên Windows file có extension là EXE có cấu trúc thường gọi là PE, còn cấu trúc file chạy trên Linux là ELF.
Rõ ràng là khác nhau, làm sao có thể vứt một file theo cấu hình của hệ điều khác sang mà có thể chạy được?
Toolchain: là một tập hợp các bộ công cụ dùng để phát triển và tạo ra một sản phẩm hay một hệ thống các sản phẩm.
Java: ko phải là Cross compiler, ko phải toolchain, chỉ là một ngôn ngữ lập trình, OK?. Chỉ có điều là Java không giống các ngôn ngữ lập trình khác, nó chỉ có thể thực thi được khi trên hệ thống đã được cài đặt JVM (Java Virtual Machine). JVM sẽ thực hiện quản lí và thực thi các bytecode do Java compiler sinh ra từ việc build Java source code.
Bất cứ thiết bị nào có cài đặt JVM đều có thể thực thi bytecode sinh ra từ Java compiler. Nói béng ra là, JVM trên Windows hay Linux là một, như nhau, nên mã bytecode đẻ ra như nhau (thực ra cũng có một số khác biệt, nhưng ko nghiên cứu chuyên sâu thì cũng ko cần bận tậm lắm).
Android bản thân đã sử dụng DVM (Dalvik Virtual Machine), là một VM nhỏ hơn JVM dành cho các thiết bị nhỏ bé , nên thực thi code Java bình thường, không hề xoắn.
Khi phát triển Android trên Eclipse, bạn sẽ phải cài đặt ADT Plugin (Android Development Tool) và Android SDK. Khi thực hiện build, bản chất là ADT sẽ gọi tới toolchain của Android, gọi tới công cụ build source Android trên Windows (APT , Android Platform Tools). Bộ tools này sinh ra khi build source code của cả hệ điều hành Android, cấu hình môi trường nào thì sẽ ra platform build của môi trường đó. (Cái này ai làm Android ROM nhiều là biết ngay ấy mà ).