Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
2d7db8a
feat: Implement Constellation service stub and TS.43 scaffolding
Lyapsus Jan 18, 2026
6dc74bc
feat: Implement TS.43 EAP-AKA parsing logic and unit tests
Lyapsus Jan 18, 2026
4685214
fix constellation binder codes and IMSI requests
Lyapsus Jan 21, 2026
78f8033
Implement Google Constellation client with API key auth and full Clie…
Lyapsus Jan 24, 2026
981e469
RCS Constellation implementation with DroidGuard fixes
Lyapsus Feb 1, 2026
f3154bb
Sessions 116-119: Parity fixes, PII sanitization, error callback alig…
Lyapsus Feb 23, 2026
9adaf9d
S220: Remove 32 extra .so from dl_iterate_phdr — tachyon_registration…
Lyapsus Apr 8, 2026
c31c642
S220: Add force_manual_msisdn test setting for manual number entry te…
Lyapsus Apr 8, 2026
4652507
S220 checkpoint: all accumulated changes before dead code cleanup
Lyapsus Apr 8, 2026
ffe0d45
Remove dead code: loadStockNativeLibs, mmapStockApk, native hooking, …
Lyapsus Apr 8, 2026
26587f3
Remove forceLoadSkippedDex (no-op on standard microG, only worked wit…
Lyapsus Apr 8, 2026
1730b81
Remove spoofBuildFields (no-op on locked-bootloader target devices)
Lyapsus Apr 8, 2026
b303e71
Clean up comments: deduplicate, trim stale references, normalize punc…
Lyapsus Apr 8, 2026
ecd9366
Merge upstream master into rcs-constellation
Lyapsus Apr 8, 2026
df50115
Fix EAP-AKA crypto bugs in Ts43Client
Lyapsus Apr 8, 2026
b1a5a9c
Add diagnostic logging for DroidGuard VM lifecycle
Lyapsus Apr 8, 2026
a11a141
Rewrite TS.43 entitlement flow to use JSON EAP relay
Lyapsus Apr 8, 2026
a1c90d4
Fix TS.43 steelman bugs: PRF carry, cookies, ODSA phase 2
Lyapsus Apr 8, 2026
cce0fbc
Fix EAP relay loop, identity byte length, update tests
Lyapsus Apr 8, 2026
d6fbd00
Restore DG environment spoofing removed in S221
Lyapsus Apr 8, 2026
def427f
Add Asterism AIDL types, skip Conscrypt on Android 10+
Lyapsus Apr 9, 2026
15b9dd7
Bump gmsVersion to 26.02.33, fix CL placeholder in version strings
Lyapsus Apr 9, 2026
c3e5440
Fix STOCK_TARGET_SDK 34 -> 36 to match stock GMS 26.02.33
Lyapsus Apr 9, 2026
a52976a
Fix Conscrypt crash, purge {{cl}} placeholder from all version strings
Lyapsus Apr 9, 2026
c80b440
Steelman fixes: stock versionCode, getInstallerPackageName, FLAG_DEBU…
Lyapsus Apr 9, 2026
95882b5
Fix DG request versionCode: was 204714000 (v20.47.14), now 260233029
Lyapsus Apr 9, 2026
f5d9c52
S225: Replace DgVmClassLoader with stock DexClassLoader in DG VM chain
Lyapsus Apr 9, 2026
fc507c3
S225: DexClassLoader fix PROVEN causal via isolation test
Lyapsus Apr 9, 2026
3b10ad5
S227 trick sweep: remove PM proxy, revert permissions and CryptAuth f…
Lyapsus Apr 9, 2026
e60a234
S228: delete dead PM proxy code (-720 lines), fix CI lint
Lyapsus Apr 9, 2026
fa05e4a
S228: remove accidental files, revert local-dev gradle config
Lyapsus Apr 10, 2026
ed036d7
CI: upload GmsCore APK as build artifact
Lyapsus Apr 10, 2026
f69b1f7
S229: prune diagnostic code and dead DG experiments
Lyapsus Apr 10, 2026
4651b18
Fix MissingPermission lint error in NetworkHandleProxyFactory
Lyapsus Apr 10, 2026
0cacc73
CI: narrow APK artifact to vtmDefault only
Lyapsus Apr 10, 2026
496c7e6
Revert chimera class rewrites to upstream
Lyapsus Apr 10, 2026
34bba43
Revert auth sprawl: LoginActivity, CheckinManager, AppCertManager
Lyapsus Apr 10, 2026
e0d945f
Strip DG diagnostic logging, keep functional changes
Lyapsus Apr 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,10 @@ jobs:
run: "./gradlew assemble${{ matrix.target }}"
- name: "Execute Gradle lint"
run: "./gradlew lint${{ matrix.target }}"
- name: "Upload GmsCore APK (vtmDefault)"
if: always()
uses: actions/upload-artifact@v4
with:
name: GmsCore-vtmDefault-${{ matrix.target }}
path: play-services-core/build/outputs/apk/vtmDefault/**/*.apk
if-no-files-found: warn
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def execResult(... args) {
}

def ignoreGit = providers.environmentVariable('GRADLE_MICROG_VERSION_WITHOUT_GIT').getOrElse('0') == '1'
def gmsVersion = "25.09.32"
def gmsVersion = "26.02.33"
def gmsVersionCode = Integer.parseInt(gmsVersion.replaceAll('\\.', ''))
def vendingVersion = "40.2.26"
def vendingVersionCode = Integer.parseInt(vendingVersion.replaceAll('\\.', ''))
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.asterism;
parcelable GetAsterismConsentRequest;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.asterism;
parcelable GetAsterismConsentResponse;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.asterism;
parcelable SetAsterismConsentRequest;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.asterism;
parcelable SetAsterismConsentResponse;
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.google.android.gms.asterism.internal;

import com.google.android.gms.asterism.internal.IAsterismCallbacks;
import com.google.android.gms.asterism.GetAsterismConsentRequest;
import com.google.android.gms.asterism.SetAsterismConsentRequest;
import com.google.android.gms.common.api.ApiMetadata;

interface IAsterismApiService {
void getAsterismConsent(IAsterismCallbacks callbacks, in GetAsterismConsentRequest request, in ApiMetadata metadata) = 0;
void setAsterismConsent(IAsterismCallbacks callbacks, in SetAsterismConsentRequest request, in ApiMetadata metadata) = 1;
void getIsPnvrConstellationDevice(IAsterismCallbacks callbacks, in ApiMetadata metadata) = 2;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.google.android.gms.asterism.internal;

import com.google.android.gms.asterism.GetAsterismConsentResponse;
import com.google.android.gms.asterism.SetAsterismConsentResponse;
import com.google.android.gms.common.api.ApiMetadata;
import com.google.android.gms.common.api.Status;

oneway interface IAsterismCallbacks {
void onConsentFetched(in Status status, in GetAsterismConsentResponse response, in ApiMetadata metadata) = 0;
void onConsentRegistered(in Status status, in SetAsterismConsentResponse response, in ApiMetadata metadata) = 1;
void onIsPnvrConstellationDevice(in Status status, boolean result, in ApiMetadata metadata) = 2;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.constellation;
parcelable GetIidTokenRequest;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.constellation;
parcelable GetIidTokenResponse;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.constellation;
parcelable GetPnvCapabilitiesRequest;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.constellation;
parcelable GetPnvCapabilitiesResponse;
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// AIDL parcelable declaration
package com.google.android.gms.constellation;
parcelable IdTokenRequest;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.constellation;
parcelable PhoneNumberInfo;
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// AIDL parcelable declaration
package com.google.android.gms.constellation;
parcelable PhoneNumberVerification;
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// AIDL parcelable declaration
package com.google.android.gms.constellation;
parcelable SimCapability;
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// AIDL parcelable declaration
package com.google.android.gms.constellation;
parcelable VerificationCapability;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.constellation;
parcelable VerifyPhoneNumberRequest;
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
package com.google.android.gms.constellation;
parcelable VerifyPhoneNumberResponse;
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.google.android.gms.constellation.internal;

import android.os.Bundle;
import com.google.android.gms.common.api.ApiMetadata;
import com.google.android.gms.constellation.internal.IConstellationCallbacks;
import com.google.android.gms.constellation.GetIidTokenRequest;
import com.google.android.gms.constellation.GetPnvCapabilitiesRequest;
import com.google.android.gms.constellation.VerifyPhoneNumberRequest;

/**
* Constellation API Service interface for phone number verification.
*
* CRITICAL: Transaction codes from Messages decompilation (IConstellationApiService.java):
* - TRANSACTION_verifyPhoneNumberV1 = 1
* - TRANSACTION_verifyPhoneNumberSingleUse = 2
* - TRANSACTION_verifyPhoneNumber = 3
* - TRANSACTION_getIidToken = 4
* - TRANSACTION_getPnvCapabilities = 5
*
* AIDL syntax "= X" means FIRST_CALL_TRANSACTION + (X - 1) = 1 + (X - 1) = X
* So to get code N, use = (N - FIRST_CALL_TRANSACTION + 1) = (N - 1 + 1) = N... no wait
* Actually = X means FIRST_CALL_TRANSACTION + X = 1 + X, so:
* - = 0 gives code 1
* - = 1 gives code 2
* - = 2 gives code 3
* - etc.
*/
interface IConstellationApiService {
void verifyPhoneNumberV1(IConstellationCallbacks callbacks, in Bundle bundle, in ApiMetadata metadata) = 0;
void verifyPhoneNumberSingleUse(IConstellationCallbacks callbacks, in Bundle bundle, in ApiMetadata metadata) = 1;
void verifyPhoneNumber(IConstellationCallbacks callbacks, in VerifyPhoneNumberRequest request, in ApiMetadata metadata) = 2;
void getIidToken(IConstellationCallbacks callbacks, in GetIidTokenRequest request, in ApiMetadata metadata) = 3;
void getPnvCapabilities(IConstellationCallbacks callbacks, in GetPnvCapabilitiesRequest request, in ApiMetadata metadata) = 4;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.google.android.gms.constellation.internal;

import com.google.android.gms.common.api.ApiMetadata;
import com.google.android.gms.common.api.Status;
import com.google.android.gms.constellation.PhoneNumberInfo;
import com.google.android.gms.constellation.GetIidTokenResponse;
import com.google.android.gms.constellation.GetPnvCapabilitiesResponse;
import com.google.android.gms.constellation.VerifyPhoneNumberResponse;

/**
* Constellation callbacks interface.
*
* Method names and transaction codes from Messages APK decompilation:
* - Code 1: onPhoneNumberVerified (for V1/SingleUse flows)
* - Code 2: onPhoneNumberVerificationsCompleted (for verifyPhoneNumber)
* - Code 3: onIidTokenGenerated
* - Code 4: onGetPnvCapabilitiesCompleted
*/
oneway interface IConstellationCallbacks {
// Transaction code 1: Phone numbers verified (from V1/SingleUse flows)
void onPhoneNumberVerified(in Status status, in List<PhoneNumberInfo> phoneNumbers, in ApiMetadata metadata) = 0;

// Transaction code 2: Verify phone number completed (for code 3 request)
void onPhoneNumberVerificationsCompleted(in Status status, in VerifyPhoneNumberResponse response, in ApiMetadata metadata) = 1;

// Transaction code 3: IID token generated
void onIidTokenGenerated(in Status status, in GetIidTokenResponse response, in ApiMetadata metadata) = 2;

// Transaction code 4: Get PNV capabilities completed
void onGetPnvCapabilitiesCompleted(in Status status, in GetPnvCapabilitiesResponse response, in ApiMetadata metadata) = 3;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.google.android.gms.phenotype.internal;

import com.google.android.gms.common.api.Status;

interface IGetStorageInfoCallbacks {
oneway void onStorageInfo(in Status status, in byte[] data) = 1;
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.google.android.gms.phenotype.internal;

import com.google.android.gms.common.api.internal.IStatusCallback;
import com.google.android.gms.phenotype.internal.IGetStorageInfoCallbacks;
import com.google.android.gms.phenotype.internal.IPhenotypeCallbacks;
import com.google.android.gms.phenotype.Flag;
import com.google.android.gms.phenotype.RegistrationInfo;
Expand Down Expand Up @@ -32,4 +33,6 @@ interface IPhenotypeService {
oneway void syncAllAfterOperation(IPhenotypeCallbacks callbacks, long p1) = 23; // returns via callbacks.onSyncFinished()
oneway void setRuntimeProperties(IStatusCallback callbacks, String p1, in byte[] p2) = 24;
// oneway void setExternalExperiments(IStatusCallback callbacks, String p1, in List<byte[]> p2) = 25;
oneway void getStorageInfo(IGetStorageInfoCallbacks callbacks) = 26;
oneway void commitToConfigurationV2(IPhenotypeCallbacks callbacks, in byte[] data) = 30;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

package com.google.android.gms.asterism;

import android.os.Parcel;
import androidx.annotation.NonNull;
import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;

@SafeParcelable.Class
public class GetAsterismConsentRequest extends AbstractSafeParcelable {
@Field(1)
public int requestCode;
@Field(2)
public int asterClientType;

@Constructor
public GetAsterismConsentRequest(@Param(1) int requestCode, @Param(2) int asterClientType) {
this.requestCode = requestCode;
this.asterClientType = asterClientType;
}

@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
CREATOR.writeToParcel(this, dest, flags);
}

public static final SafeParcelableCreatorAndWriter<GetAsterismConsentRequest> CREATOR = findCreator(GetAsterismConsentRequest.class);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

package com.google.android.gms.asterism;

import android.os.Parcel;
import androidx.annotation.NonNull;
import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;

@SafeParcelable.Class
public class GetAsterismConsentResponse extends AbstractSafeParcelable {
@Field(1)
public int requestCode;
@Field(2)
public int consentState;
@Field(3)
public String iidToken;
@Field(4)
public String gaiaToken;
@Field(5)
public int consentVersion;

@Constructor
public GetAsterismConsentResponse(@Param(1) int requestCode, @Param(2) int consentState,
@Param(3) String iidToken, @Param(4) String gaiaToken, @Param(5) int consentVersion) {
this.requestCode = requestCode;
this.consentState = consentState;
this.iidToken = iidToken;
this.gaiaToken = gaiaToken;
this.consentVersion = consentVersion;
}

@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
CREATOR.writeToParcel(this, dest, flags);
}

public static final SafeParcelableCreatorAndWriter<GetAsterismConsentResponse> CREATOR = findCreator(GetAsterismConsentResponse.class);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

package com.google.android.gms.asterism;

import android.os.Bundle;
import android.os.Parcel;
import androidx.annotation.NonNull;
import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;

@SafeParcelable.Class
public class SetAsterismConsentRequest extends AbstractSafeParcelable {
@Field(1)
public int requestCode;
@Field(2)
public int asterClientType;
@Field(4)
public long timestamp;
@Field(5)
public int consentSource;
@Field(6)
public Bundle extras;
@Field(7)
public int consentVariant;

@Constructor
public SetAsterismConsentRequest(@Param(1) int requestCode, @Param(2) int asterClientType,
@Param(4) long timestamp, @Param(5) int consentSource, @Param(6) Bundle extras,
@Param(7) int consentVariant) {
this.requestCode = requestCode;
this.asterClientType = asterClientType;
this.timestamp = timestamp;
this.consentSource = consentSource;
this.extras = extras;
this.consentVariant = consentVariant;
}

@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
CREATOR.writeToParcel(this, dest, flags);
}

public static final SafeParcelableCreatorAndWriter<SetAsterismConsentRequest> CREATOR = findCreator(SetAsterismConsentRequest.class);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

package com.google.android.gms.asterism;

import android.os.Parcel;
import androidx.annotation.NonNull;
import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;

@SafeParcelable.Class
public class SetAsterismConsentResponse extends AbstractSafeParcelable {
@Field(1)
public int requestCode;
@Field(2)
public String iidToken;
@Field(3)
public String gaiaToken;

@Constructor
public SetAsterismConsentResponse(@Param(1) int requestCode, @Param(2) String iidToken, @Param(3) String gaiaToken) {
this.requestCode = requestCode;
this.iidToken = iidToken;
this.gaiaToken = gaiaToken;
}

@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
CREATOR.writeToParcel(this, dest, flags);
}

public static final SafeParcelableCreatorAndWriter<SetAsterismConsentResponse> CREATOR = findCreator(SetAsterismConsentResponse.class);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/*
* SPDX-FileCopyrightText: 2026 microG Project Team
* SPDX-License-Identifier: Apache-2.0
*/

package com.google.android.gms.constellation;

import android.os.Parcel;
import androidx.annotation.NonNull;
import com.google.android.gms.common.internal.safeparcel.AbstractSafeParcelable;
import com.google.android.gms.common.internal.safeparcel.SafeParcelable;
import com.google.android.gms.common.internal.safeparcel.SafeParcelableCreatorAndWriter;

/**
* Request to get an Instance ID token.
*/
@SafeParcelable.Class
public class GetIidTokenRequest extends AbstractSafeParcelable {
@Field(1)
public Long subscriptionId;

@Constructor
public GetIidTokenRequest(@Param(1) Long subscriptionId) {
this.subscriptionId = subscriptionId;
}

@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
CREATOR.writeToParcel(this, dest, flags);
}

public static final SafeParcelableCreatorAndWriter<GetIidTokenRequest> CREATOR = findCreator(GetIidTokenRequest.class);
}
Loading