diff --git a/build.gradle b/build.gradle
index 2d23332685..b26d194f86 100644
--- a/build.gradle
+++ b/build.gradle
@@ -72,7 +72,7 @@ allprojects {
group = 'org.microg.gms'
ext.appVersionCode = 241017000
ext.baseVersion = ext.appVersionCode.toString()[0..1] + '.' + ext.appVersionCode.toString()[2..3] + '.' + ext.appVersionCode.toString()[4..5]
- version = "0.3.0." + ext.baseVersion.replaceAll("\\.", "")
+ version = "0.3.1." + ext.baseVersion.replaceAll("\\.", "")
ext.isReleaseVersion = true
}
diff --git a/play-services-base/core/src/main/java/org/microg/gms/common/PackageUtils.java b/play-services-base/core/src/main/java/org/microg/gms/common/PackageUtils.java
index 9c70aa49da..8de170fa61 100644
--- a/play-services-base/core/src/main/java/org/microg/gms/common/PackageUtils.java
+++ b/play-services-base/core/src/main/java/org/microg/gms/common/PackageUtils.java
@@ -27,6 +27,7 @@
import android.util.Log;
import androidx.annotation.Nullable;
+import com.google.android.gms.common.BuildConfig;
import org.microg.gms.utils.ExtendedPackageInfo;
import java.lang.reflect.Method;
@@ -60,7 +61,7 @@ public static boolean isGooglePackage(Context context, String packageName) {
*/
@Deprecated
public static boolean callerHasExtendedAccessPermission(Context context) {
- return context.checkCallingPermission("org.microg.gms.EXTENDED_ACCESS") == PackageManager.PERMISSION_GRANTED;
+ return context.checkCallingPermission(BuildConfig.BASE_PACKAGE_NAME + ".microg.gms.EXTENDED_ACCESS") == PackageManager.PERMISSION_GRANTED;
}
public static void assertGooglePackagePermission(Context context, GooglePackagePermission permission) {
@@ -80,6 +81,11 @@ public static boolean callerHasGooglePackagePermission(Context context, GooglePa
packageCandidate
);
+ // See https://github.com/ReVanced/GmsCore/issues/10.
+ ExtendedPackageInfo extendedPackageInfo = new ExtendedPackageInfo(context, packageName);
+ if (!extendedPackageInfo.isInstalled())
+ return true;
+
if (new ExtendedPackageInfo(context, packageName).hasGooglePackagePermission(permission)) {
return true;
}
@@ -240,7 +246,7 @@ public static String getAndCheckPackage(Context context, String suggestedPackage
if (packageName != null && suggestedPackageName != null && !packageName.equals(suggestedPackageName)) {
throw new SecurityException("UID [" + callingUid + "] is not related to packageName [" + suggestedPackageName + "] (seems to be " + packageName + ")");
}
- return PackageSpoofUtils.spoofPackageName(context.getPackageManager(), packageName);
+ return packageName;
}
@Nullable
diff --git a/play-services-base/core/src/main/kotlin/org/microg/gms/common/PackageSpoofUtils.kt b/play-services-base/core/src/main/kotlin/org/microg/gms/common/PackageSpoofUtils.kt
index 4d4a36643b..b1cf598651 100644
--- a/play-services-base/core/src/main/kotlin/org/microg/gms/common/PackageSpoofUtils.kt
+++ b/play-services-base/core/src/main/kotlin/org/microg/gms/common/PackageSpoofUtils.kt
@@ -10,7 +10,7 @@ import java.util.*
/**
* Utilities to spoof package information.
*/
-internal object PackageSpoofUtils {
+object PackageSpoofUtils {
private const val TAG = "SpoofUtils"
private const val META_SPOOF_PACKAGE_NAME =
BuildConfig.BASE_PACKAGE_NAME + ".android.gms.SPOOFED_PACKAGE_NAME"
diff --git a/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java b/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java
index 30c1d61c5f..b72e7881ad 100644
--- a/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java
+++ b/play-services-base/src/main/java/org/microg/gms/common/MultiConnectionKeeper.java
@@ -27,6 +27,7 @@
import android.content.pm.ResolveInfo;
import android.os.IBinder;
import android.util.Log;
+import com.google.android.gms.base.BuildConfig;
import java.util.HashMap;
import java.util.HashSet;
@@ -179,7 +180,7 @@ public boolean isMicrog(ResolveInfo resolveInfo) {
if (resolveInfo == null || resolveInfo.serviceInfo == null) return false;
if (resolveInfo.serviceInfo.name.startsWith("org.microg.")) return true;
try {
- PermissionInfo info = context.getPackageManager().getPermissionInfo("org.microg.gms.EXTENDED_ACCESS", 0);
+ PermissionInfo info = context.getPackageManager().getPermissionInfo(BuildConfig.BASE_PACKAGE_NAME + ".microg.gms.EXTENDED_ACCESS", 0);
return info.packageName.equals(resolveInfo.serviceInfo.packageName);
} catch (PackageManager.NameNotFoundException e) {
return false;
diff --git a/play-services-core/src/main/AndroidManifest.xml b/play-services-core/src/main/AndroidManifest.xml
index 4a344d1366..f3301a8a8a 100644
--- a/play-services-core/src/main/AndroidManifest.xml
+++ b/play-services-core/src/main/AndroidManifest.xml
@@ -62,15 +62,15 @@
android:protectionLevel="dangerous" />
@@ -98,7 +98,7 @@
-
+
@@ -128,7 +128,7 @@
+ android:permission="${basePackageName}.microg.gms.PROVISION" />
diff --git a/play-services-core/src/main/java/org/microg/gms/auth/AuthManager.java b/play-services-core/src/main/java/org/microg/gms/auth/AuthManager.java
index b2016e2239..4d81ec231e 100644
--- a/play-services-core/src/main/java/org/microg/gms/auth/AuthManager.java
+++ b/play-services-core/src/main/java/org/microg/gms/auth/AuthManager.java
@@ -15,6 +15,7 @@
import androidx.annotation.RequiresPermission;
import com.google.android.gms.base.BuildConfig;
+import org.microg.gms.common.PackageSpoofUtils;
import org.microg.gms.common.PackageUtils;
import org.microg.gms.settings.SettingsContract;
@@ -269,7 +270,10 @@ public AuthResponse requestAuth(boolean legacy) throws IOException {
}
AuthRequest request = new AuthRequest().fromContext(context)
.source("android")
- .app(packageName, getPackageSignature())
+ .app(
+ PackageSpoofUtils.spoofPackageName(context.getPackageManager(), packageName),
+ PackageSpoofUtils.spoofStringSignature(context.getPackageManager(), packageName, getPackageSignature())
+ )
.email(accountName)
.token(getAccountManager().getPassword(account))
.service(service)
diff --git a/play-services-core/src/main/java/org/microg/gms/auth/loginservice/AccountAuthenticator.java b/play-services-core/src/main/java/org/microg/gms/auth/loginservice/AccountAuthenticator.java
index 7891ddfbd1..7eb7c194ce 100644
--- a/play-services-core/src/main/java/org/microg/gms/auth/loginservice/AccountAuthenticator.java
+++ b/play-services-core/src/main/java/org/microg/gms/auth/loginservice/AccountAuthenticator.java
@@ -34,6 +34,7 @@
import org.microg.gms.auth.AuthManager;
import org.microg.gms.auth.AuthResponse;
import org.microg.gms.auth.login.LoginActivity;
+import org.microg.gms.common.PackageSpoofUtils;
import org.microg.gms.common.PackageUtils;
import java.util.Arrays;
@@ -107,7 +108,7 @@ public Bundle getAuthToken(AccountAuthenticatorResponse response, Account accoun
Intent i = new Intent(context, AskPermissionActivity.class);
i.putExtras(options);
i.putExtra(KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response);
- i.putExtra(KEY_ANDROID_PACKAGE_NAME, app);
+ i.putExtra(KEY_ANDROID_PACKAGE_NAME, PackageSpoofUtils.spoofPackageName(context.getPackageManager(), app));
i.putExtra(KEY_ACCOUNT_TYPE, account.type);
i.putExtra(KEY_ACCOUNT_NAME, account.name);
i.putExtra(KEY_AUTHTOKEN, authTokenType);