[Nexus 6  Original Android Development] dankoman:
well log shows monopoly / office are "not available" due to "restriction reason 9," whatever the hell that is. but anyway, it points to a particular method in code which i guess decides whether or not the app should be compatible with your device. anyway, a little hackery can fix it. i'm modifying the play store again and will be doing another gapps build soon. i already tested it and monopoly doesn't show incompatible anymore :D

in the mean time, i threw together a flashable hotfix for just play store that you can download here

geeky details below:

this is the method that was causing the issue:

.method public static isAvailable(Lcom/google/android/finsky/api/model/Document;Lcom/google/android/finsky/api/model/DfeToc;Lcom/google/android/finsky/library/Library;)Z
.locals 9
.param p0, "document" # Lcom/google/android/finsky/api/model/Document;
.param p1, "dfeToc" # Lcom/google/android/finsky/api/model/DfeToc;
.param p2, "library" # Lcom/google/android/finsky/library/Library;

.prologue
const/4 v8, 0x2

const/4 v4, 0x1

const/4 v3, 0x0

.line 51
invoke-virtual {p0}, Lcom/google/android/finsky/api/model/Document;->getBackend()I

move-result v5

if-eqz v5, :cond_2

.line 52
if-eqz p1, :cond_1

.line 53
invoke-virtual {p0}, Lcom/google/android/finsky/api/model/Document;->getBackend()I

move-result v5

invoke-virtual {p1, v5}, Lcom/google/android/finsky/api/model/DfeToc;->getCorpus(I)Lcom/google/android/finsky/protos/Toc$CorpusMetadata;

move-result-object v0

.line 54
.local v0, "corpus":Lcom/google/android/finsky/protos/Toc$CorpusMetadata;
if-nez v0, :cond_2

.line 55
const-string v5, "Corpus for %s is not available."

new-array v4, v4, [Ljava/lang/Object;

invoke-virtual {p0}, Lcom/google/android/finsky/api/model/Document;->getDocId()Ljava/lang/String;

move-result-object v6

aput-object v6, v4, v3

invoke-static {v5, v4}, Lcom/google/android/finsky/utils/FinskyLog;->d(Ljava/lang/String;[Ljava/lang/Object;)V

move v1, v3

.line 74
.end local v0 # "corpus":Lcom/google/android/finsky/protos/Toc$CorpusMetadata;
:cond_0
:goto_0
return v1

.line 58
:cond_1
invoke-virtual {p0}, Lcom/google/android/finsky/api/model/Document;->getBackend()I

move-result v5

const/4 v6, 0x3

if-eq v5, v6, :cond_2

move v1, v3

.line 60
goto :goto_0

.line 64
:cond_2
invoke-virtual {p0}, Lcom/google/android/finsky/api/model/Document;->getAvailabilityRestriction()I

move-result v2

.line 65
.local v2, "restriction":I
if-ne v2, v4, :cond_4

move v1, v4

.line 66
.local v1, "isAvailable":Z
:goto_1
if-nez v1, :cond_3

invoke-virtual {p0}, Lcom/google/android/finsky/api/model/Document;->isAvailableIfOwned()Z

move-result v5

if-eqz v5, :cond_3

invoke-static {p0, p2}, Lcom/google/android/finsky/utils/LibraryUtils;->isOwned(Lcom/google/android/finsky/api/model/Document;Lcom/google/android/finsky/library/Library;)Z

move-result v5

if-eqz v5, :cond_3

.line 67
const-string v5, "%s available because owned, overriding [restriction=%d]."

new-array v6, v8, [Ljava/lang/Object;

invoke-virtual {p0}, Lcom/google/android/finsky/api/model/Document;->getDocId()Ljava/lang/String;

move-result-object v7

aput-object v7, v6, v3

invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

move-result-object v7

aput-object v7, v6, v4

invoke-static {v5, v6}, Lcom/google/android/finsky/utils/FinskyLog;->d(Ljava/lang/String;[Ljava/lang/Object;)V

.line 69
const/4 v1, 0x1

.line 71
:cond_3
if-nez v1, :cond_0

.line 72
const-string v5, "%s not available [restriction=%d]."

new-array v6, v8, [Ljava/lang/Object;

invoke-virtual {p0}, Lcom/google/android/finsky/api/model/Document;->getDocId()Ljava/lang/String;

move-result-object v7

aput-object v7, v6, v3

invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer;

move-result-object v3

aput-object v3, v6, v4

invoke-static {v5, v6}, Lcom/google/android/finsky/utils/FinskyLog;->d(Ljava/lang/String;[Ljava/lang/Object;)V

goto :goto_0

.end local v1 # "isAvailable":Z
:cond_4
move v1, v3

.line 65
goto :goto_1
.end method

what it does is run a bunch of things to decide whether or not the app is compatible, and returns a 0 if incompatible or a 1 if compatible.

here's my new/modified method:

.method public static isAvailable(Lcom/google/android/finsky/api/model/Document;Lcom/google/android/finsky/api/model/DfeToc;Lcom/google/android/finsky/library/Library;)Z
.locals 9
.param p0, "document" # Lcom/google/android/finsky/api/model/Document;
.param p1, "dfeToc" # Lcom/google/android/finsky/api/model/DfeToc;
.param p2, "library" # Lcom/google/android/finsky/library/Library;

.prologue

const/4 v0, 0x1

return v0

.end method

this just returns a constant 1 (everything's compatible yayy!) instead of running compatibility checks. easy peasy :p