Faits:
A. Le 26 février 2012, X._ a été arrêté dans le cadre d'une instruction conduite par le Ministère public du canton de Genève (ci- après: le Ministère public) et portant sur un trafic de stupéfiants. Il lui est reproché en substance d'avoir pris part à un trafic d'héroïne et d'avoir hébergé des personnes séjournant illégalement en Suisse. Le Tribunal des mesures de contrainte du canton de Genève (ci-après: le Tmc) a ordonné la détention provisoire de X._ jusqu'au 28 mai 2012. Par ordonnance du 29 mai 2012, cette détention a été prolongée jusqu'au 29 juillet 2012. Le prénommé a présenté une requête de mise en liberté provisoire le 21 juin 2012. Par ordonnance du 27 juin 2012, le Tmc a rejeté cette requête, au motif qu'il existait des charges suffisantes ainsi que des risques de fuite et de réitération. Statuant sur recours de l'intéressé, la Chambre pénale de recours de la Cour de justice du canton de Genève (ci-après: la Cour de justice) a confirmé cette décision par arrêt du 31 juillet 2012. Elle a retenu que les charges étaient suffisantes, que les risques précités étaient bien réalisés et que le principe de la proportionnalité était respecté.
Le 19 juillet 2012, le Ministère public a renvoyé X._ en jugement pour infraction à la loi fédérale sur les stupéfiants (LStup; RS 812.121) et violation de la loi fédérale sur les étrangers (LEtr; RS 142.20). Par ordonnance du 20 juillet 2012, le Tmc a ordonné sa mise en détention pour des motifs de sûreté, en retenant notamment l'existence des risques de fuite et de réitération.
B. Agissant par la voie du recours en matière pénale, X._ demande au Tribunal fédéral d'annuler l'arrêt de la Cour de justice et d'ordonner sa mise en liberté immédiate, subsidiairement de renvoyer la cause à l'instance précédente pour nouvelle décision. Il requiert en outre l'octroi de l'assistance judiciaire. La Cour de justice et le Ministère public ont renoncé à se déterminer.

Considérant en droit:
1. Selon l'<ref-law>, le recours en matière pénale est ouvert contre les décisions rendues en matière pénale, dont font partie les décisions relatives à la détention provisoire ou pour des motifs de sûreté au sens des <ref-law> (<ref-ruling> consid. 1 p. 23). Selon l'art. 81 al. 1 let. a et let. b ch. 1 LTF, l'accusé a qualité pour agir. La détention du recourant se fonde désormais sur l'ordonnance de mise en détention pour des motifs de sûreté du 19 juillet 2012, qui est postérieure à la décision litigieuse de refus de mise en liberté datée du 27 juin 2012. Les motifs de maintien en détention sont toutefois les mêmes, l'ordonnance de mise en détention pour des motifs de sûreté renvoyant de surcroît expressément à l'ordonnance litigieuse. Le recourant conserve donc un intérêt actuel et pratique à l'examen de ses griefs (<ref-law>). Pour le surplus, le recours est formé en temps utile (<ref-law>) contre une décision rendue en dernière instance cantonale (<ref-law>) et les conclusions présentées sont recevables au regard de l'<ref-law>.
2. Dans un grief d'ordre formel qu'il convient d'examiner en premier lieu, le recourant se plaint d'une violation de son droit d'être entendu, au motif qu'un jugement sur lequel se fonde l'arrêt attaqué ne figurait pas au dossier.
2.1 Tel qu'il est garanti à l'art. 29 al. 2 Cst., le droit d'être entendu comprend notamment le droit pour l'intéressé de s'exprimer sur les éléments pertinents avant qu'une décision ne soit prise touchant sa situation juridique, ainsi que le droit de consulter le dossier (<ref-ruling> consid. 3.2 p. 272; <ref-ruling> consid. 5.1 p. 293; <ref-ruling> consid. 3.2 p. 494 et les arrêts cités). En particulier, la personne concernée par une procédure de mise en détention doit pouvoir accéder aux éléments de preuve y relatifs, tels que les résultats de l'enquête de police et des autres mesures d'investigation, de manière à pouvoir contester efficacement la mesure de détention (<ref-ruling> consid. 5b p. 339; <ref-ruling> consid. 4-6 p. 299 ss).
2.2 En l'occurrence, l'arrêt attaqué mentionne effectivement un jugement rendu le 14 mai 2012 dans une autre affaire portant le n° xxx. Il est fait référence audit jugement pour corroborer les charges pesant sur le recourant dans la présente procédure. La Cour de justice relève sur cette base que l'intéressé est mêlé depuis longtemps à des trafiquants opérant notamment dans son studio, que son frère et un comparse y avaient entreposé de l'héroïne et qu'il semble ressortir de la procédure xxx que le studio du recourant était connu pour servir au trafic d'héroïne. Elle mentionne également que le recourant a été interpellé dans le cadre de cette procédure en juin 2011.
Ces éléments ont indéniablement pesé dans l'appréciation de la Cour de justice, qui s'y réfère largement pour étayer les charges justifiant le maintien en détention. Elle considère notamment que les événements précités auraient dû « aiguillonner [la] curiosité » du recourant quant aux activités des personnes qu'il héberge. Elle dénie sur cette base toute crédibilité aux allégations de l'intéressé quant à sa prétendue ignorance des activités déployées par les individus logeant dans son studio. Les faits tirés du jugement rendu le 14 mai 2012 dans la cause n° xxx ont donc une incidence sur la décision attaquée, de sorte que le recourant devait être en mesure de se déterminer à leur sujet.
La Cour de justice retient certes que ce jugement a été rendu en audience publique et qu'il est accessible à chacun. Il n'en demeure pas moins que c'est l'arrêt attaqué qui lui donne pour la première fois de l'importance dans la présente cause, de sorte qu'on ne saurait reprocher au recourant d'avoir omis de s'exprimer sur ce point. De plus, rien n'indique que le recourant a effectivement eu accès au jugement en question. L'intéressé allègue qu'il n'était pas partie à la procédure n° xxx et que le jugement du 14 mai 2012 ne figurait pas au dossier de la présente cause lorsqu'il l'a consulté, ce qui n'est contredit ni par le Ministère public ni par la Cour de justice. Ce jugement ne figure au demeurant pas non plus dans la copie du dossier transmise à la Cour de céans. Dans ces conditions, il y a lieu de constater que le recourant n'a pas pu consulter ledit jugement. Or, compte tenu des éléments retenus sur cette base pour étayer les charges pesant sur le recourant, ce dernier devait être en mesure de se déterminer à ce sujet pour contester efficacement la mesure de détention. Son droit d'être entendu a donc été violé de ce point de vue.
2.3 Cette violation du droit d'être entendu ne peut pas être guérie dans la présente procédure de recours, ne serait-ce que parce que le Tribunal fédéral ne revoit pas librement les faits (art. 97 et 105 LTF; <ref-ruling> consid. 2.2 p. 204; <ref-ruling> consid. 5.1 p. 390; <ref-ruling> consid. 2.2.3 p. 135 et les références citées). Le recours doit donc être admis pour ce motif, sans qu'il soit nécessaire d'examiner les autres griefs soulevés par le recourant (cf. ATF <ref-ruling> consid. 5.1 p. 390). Il appartiendra à la Cour de justice de rendre une nouvelle décision à brève échéance, après avoir donné au recourant l'occasion de se déterminer au sujet des faits retenus sur la base du jugement rendu le 14 mai 2012 dans la cause n° xxx.
3. L'admission du recours pour ce motif formel n'a pas pour conséquence la mise en liberté immédiate du recourant (cf. <ref-ruling> consid. 3b p. 64; <ref-ruling> consid. 5g p. 308; <ref-ruling> consid. 5d p. 93). Les charges pesant sur l'intéressé apparaissent en effet à première vue suffisantes et le maintien en détention est justifié à tout le moins par un risque de fuite, dans la mesure où le recourant, de nationalité française, déclare lui-même avoir toute sa famille en Albanie, sa fiancée au Maroc et aucune attache particulière avec la Suisse. La demande de mise en liberté doit donc être rejetée.
4. Il s'ensuit que le recours doit être admis partiellement et l'arrêt attaqué annulé. La cause est renvoyée à la Cour de justice pour qu'elle rende, à brève échéance, une nouvelle décision prise dans le respect du droit d'être entendu du recourant. La demande de mise en liberté est rejetée. Il n'y a pas lieu de percevoir de frais judiciaires (<ref-law>). Le recourant obtenant partiellement gain de cause, l'Etat de Genève versera une indemnité à titre de dépens à son conseil (<ref-law>). Vu l'issue du recours, la demande d'assistance judiciaire est sans objet.

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est partiellement admis. L'arrêt attaqué est annulé et la cause est renvoyée à la Cour de justice du canton de Genève, Chambre pénale de recours, pour nouvelle décision dans le sens des considérants.
2. La demande de mise en liberté immédiate est rejetée.
3. Il n'est pas perçu de frais judiciaires.
4. L'Etat de Genève versera au conseil du recourant une indemnité de 2'000 fr. à titre de dépens.
5. Le présent arrêt est communiqué au mandataire du recourant, au Ministère public et à la Cour de justice du canton de Genève, Chambre pénale de recours.
Lausanne, le 7 septembre 2012
Au nom de la Ire Cour de droit public
du Tribunal fédéral suisse
Le Président: Fonjallaz
Le Greffier: Rittener