Olá, Vítor!
Obrigado por prestigiar nosso curso de Xamarin!
O certo não seria programar dentro de cada "projeto" dentro da solução ?
Você está correto.
A solução que você mencionou se chama "Compilação Condicional" (para detalhes, veja:
https://developer.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/part_4_-_platform_divergence_abstraction_divergent_implementation/#Conditional_Compilation). A estratégia de Compilação Condicional funciona melhor em soluções baseadas em Shared Asset Projects (Projetos de Recursos Compartilhados).
Isso que acabei de de dizer significa que, infelizmente para você, a compilaçao condicional como "#if ANDROID" não funciona com PCL (Portable Class Library), que é aquele projeto portátil que usamos no curso, compartilhado entre as plataformas. Para a compilação condicional "#if ANDROID" funcionar, você teria que criar um novo projeto, mas em vez de "Xamarin Forms (Portable Class Library)", você teria que escolher "Xamarin Forms (Shared Asset Projects)".
A estratégia adequada para variação de funcionalidade por plataforma em PCL é o uso de abstração, registro e injeção de dependência. Significa que você não deveria utilizar "ifs" no meio de um projeto PCL, e sim chamar métodos de uma interface. Cada projeto de plataforma (iOS, Android, WinPhone, etc) teria então uma implementação concreta, ou seja, uma classe implementando essa interface genérica. Cada vez que o projeto PCL requisitar a funcionalidade que varia por plataforma, o Xamarin procura no projeto da plataforma (iOS, Android, WinPhone, etc) qual a class implementa a interface requisitada. Por exemplo, o jeito "correto" de chamar um método "genérico" via PCL seria através do Serviço de Injeção de Dependência do Xamarin Forms:
DependencyService.Get<IMinhaInterfaceMultiplataforma>().MostrarMensagem("Alura Cursos Online");
Infelizmente, não vimos o conceito de DependencyService
na parte 1 do curso. Mas felizmente abordaremos DependencyService
no curso 2, quando utilizamos o banco de dados e a Câmera do Android. Se você tiver paciência, em breve a parte 2 do curso será lançada (está nas últimas edições) e veremos detalhes de como implementar isso. Por enquanto, você pode dar uma olhada em como o serviço de dependência do Xamarin Forms funciona.
https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/dependency-service/introduction/
Mas se mesmo assim você quiser utilizar código condicional num projeto PCL, existe uma forma "alternativa" (não conte pra ninguém!) de fazer isso:
if (Device.OS == TargetPlatform.iOS)
else if (Device.OS == TargetPlatform.Android)
else if (Device.OS == TargetPlatform.WindowsPhone)
Boa sorte e bons estudos!