[android][sdk] Add build config to sdk module

Signed-off-by: Andrei Shkrob <github@shkrob.dev>
This commit is contained in:
Andrei Shkrob
2025-08-15 14:55:52 +02:00
committed by Konstantin Pastbin
parent a8353a6a80
commit 3a90f9783d
12 changed files with 82 additions and 28 deletions

View File

@@ -119,7 +119,9 @@ public class MwmApplication extends Application implements Application.ActivityL
sInstance = this;
mOrganicMaps = new OrganicMaps(getApplicationContext());
mOrganicMaps =
new OrganicMaps(getApplicationContext(), BuildConfig.FLAVOR, BuildConfig.APPLICATION_ID,
BuildConfig.VERSION_CODE, BuildConfig.VERSION_NAME, BuildConfig.FILE_PROVIDER_AUTHORITY);
ConnectionState.INSTANCE.initialize(this);

View File

@@ -8,8 +8,11 @@ android {
ndkVersion = '28.2.13676358'
defaultConfig {
buildFeatures {
buildConfig = true
}
defaultConfig {
minSdk = propMinSdkVersion.toInteger()
targetSdk = propTargetSdkVersion.toInteger()

View File

@@ -6,7 +6,6 @@ import android.view.MotionEvent;
import android.view.Surface;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.organicmaps.BuildConfig;
import app.organicmaps.R;
import app.organicmaps.sdk.display.DisplayType;
import app.organicmaps.sdk.location.LocationHelper;
@@ -181,7 +180,7 @@ public final class Map
setupWidgets(context, surfaceFrame.width(), surfaceFrame.height());
final boolean firstStart = mLocationHelper.isInFirstRun();
if (!nativeCreateEngine(surface, surfaceDpi, firstStart, mLaunchByDeepLink, BuildConfig.VERSION_CODE,
if (!nativeCreateEngine(surface, surfaceDpi, firstStart, mLaunchByDeepLink, Config.getVersionCode(),
ROMUtils.isCustomROM()))
{
if (mCallbackUnsupported != null)

View File

@@ -31,6 +31,9 @@ public final class OrganicMaps implements DefaultLifecycleObserver
{
private static final String TAG = OrganicMaps.class.getSimpleName();
@NonNull
private final String mFlavor;
@NonNull
private final Context mContext;
@@ -74,8 +77,10 @@ public final class OrganicMaps implements DefaultLifecycleObserver
return mIsolinesManager;
}
public OrganicMaps(@NonNull Context context)
public OrganicMaps(@NonNull Context context, @NonNull String flavor, @NonNull String applicationId, int versionCode,
@NonNull String versionName, @NonNull String fileProviderAuthority)
{
mFlavor = flavor;
mContext = context.getApplicationContext();
mPreferences = mContext.getSharedPreferences(context.getString(app.organicmaps.sdk.R.string.pref_file_name),
Context.MODE_PRIVATE);
@@ -88,7 +93,7 @@ public final class OrganicMaps implements DefaultLifecycleObserver
Logger.d(TAG, "Settings path = " + settingsPath);
nativeSetSettingsDir(settingsPath);
Config.init(mContext, mPreferences);
Config.init(mContext, mPreferences, flavor, applicationId, versionCode, versionName, fileProviderAuthority);
OsmOAuth.init(mPreferences);
SharedPropertiesUtils.init(mPreferences);
LogsManager.INSTANCE.initFileLogging(mContext, mPreferences);
@@ -158,8 +163,7 @@ public final class OrganicMaps implements DefaultLifecycleObserver
// external storage is damaged or not available (read-only).
createPlatformDirectories(writablePath, privatePath, tempPath);
nativeInitPlatform(mContext, apkPath, writablePath, privatePath, tempPath, app.organicmaps.BuildConfig.FLAVOR,
app.organicmaps.BuildConfig.BUILD_TYPE,
nativeInitPlatform(mContext, apkPath, writablePath, privatePath, tempPath, mFlavor, BuildConfig.BUILD_TYPE,
/* isTablet */ false);
Config.setStoragePath(writablePath);
Config.setStatisticsEnabled(SharedPropertiesUtils.isStatisticsEnabled());

View File

@@ -6,7 +6,7 @@ import android.os.Parcelable;
import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import app.organicmaps.BuildConfig;
import app.organicmaps.sdk.BuildConfig;
import app.organicmaps.sdk.util.StringUtils;
import app.organicmaps.sdk.util.log.Logger;
import dalvik.annotation.optimization.FastNative;

View File

@@ -4,7 +4,6 @@ import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Size;
import androidx.annotation.WorkerThread;
import app.organicmaps.BuildConfig;
import app.organicmaps.sdk.Framework;
import app.organicmaps.sdk.bookmarks.data.Metadata;
import app.organicmaps.sdk.editor.data.FeatureCategory;
@@ -12,6 +11,7 @@ import app.organicmaps.sdk.editor.data.Language;
import app.organicmaps.sdk.editor.data.LocalizedName;
import app.organicmaps.sdk.editor.data.LocalizedStreet;
import app.organicmaps.sdk.editor.data.NamesDataSource;
import app.organicmaps.sdk.util.Config;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -45,7 +45,7 @@ public final class Editor
public static void uploadChanges()
{
if (nativeHasSomethingToUpload() && OsmOAuth.isAuthorized())
nativeUploadChanges(OsmOAuth.getAuthToken(), BuildConfig.VERSION_NAME, BuildConfig.APPLICATION_ID);
nativeUploadChanges(OsmOAuth.getAuthToken(), Config.getVersionName(), Config.getApplicationId());
}
public static native boolean nativeShouldShowEditPlace();

View File

@@ -6,7 +6,7 @@ import android.os.SystemClock;
import androidx.annotation.Keep;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.organicmaps.BuildConfig;
import app.organicmaps.sdk.BuildConfig;
import app.organicmaps.sdk.util.log.Logger;
import java.io.IOException;
import java.io.InputStream;

View File

@@ -5,7 +5,6 @@ import android.content.SharedPreferences;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.preference.PreferenceManager;
import app.organicmaps.BuildConfig;
import app.organicmaps.R;
public final class Config
@@ -14,6 +13,24 @@ public final class Config
@NonNull
private static SharedPreferences mPrefs;
@SuppressWarnings("NotNullFieldNotInitialized")
@NonNull
private static String mFlavor;
@SuppressWarnings("NotNullFieldNotInitialized")
@NonNull
private static String mApplicationId;
private static int mVersionCode;
@SuppressWarnings("NotNullFieldNotInitialized")
@NonNull
private static String mVersionName;
@SuppressWarnings("NotNullFieldNotInitialized")
@NonNull
private static String mFileProviderAuthority;
private static final String KEY_APP_STORAGE = "StoragePath";
private static final String KEY_DOWNLOADER_AUTO = "AutoDownloadEnabled";
@@ -125,6 +142,29 @@ public final class Config
nativeSetBoolean(key, value);
}
@NonNull
public static String getApplicationId()
{
return mApplicationId;
}
public static int getVersionCode()
{
return mVersionCode;
}
@NonNull
public static String getVersionName()
{
return mVersionName;
}
@NonNull
public static String getFileProviderAuthority()
{
return mFileProviderAuthority;
}
public static String getStoragePath()
{
return getString(KEY_APP_STORAGE);
@@ -351,31 +391,37 @@ public final class Config
}
@NonNull
@SuppressWarnings("ConstantConditions") // BuildConfig
public static String getDonateUrl(@NonNull Context context)
{
final String url = getString(KEY_DONATE_URL);
// Enable donations by default if not Google or Huawei. Replace comaps.app/donate/ with localized page.
if ((url.isEmpty() && !BuildConfig.FLAVOR.equals("google") && !BuildConfig.FLAVOR.equals("huawei"))
if ((url.isEmpty() && !mFlavor.equals("google") && !mFlavor.equals("huawei"))
|| url.endsWith("comaps.app/donate/"))
return context.getString(R.string.app_site_url) + "donate/";
return url;
}
public static void init(@NonNull Context context, @NonNull SharedPreferences prefs)
public static void init(@NonNull Context context, @NonNull SharedPreferences prefs, @NonNull String flavor,
@NonNull String applicationId, int versionCode, @NonNull String versionName,
@NonNull String fileProviderAuthority)
{
PreferenceManager.setDefaultValues(context, R.xml.prefs_main, false);
mPrefs = prefs;
mFlavor = flavor;
mApplicationId = applicationId;
mVersionCode = versionCode;
mVersionName = versionName;
mFileProviderAuthority = fileProviderAuthority;
final SharedPreferences.Editor editor = mPrefs.edit();
// Update counters.
final int launchNumber = mPrefs.getInt(KEY_APP_LAUNCH_NUMBER, 0);
editor.putInt(KEY_APP_LAUNCH_NUMBER, launchNumber + 1);
editor.putLong(KEY_APP_LAST_SESSION_TIMESTAMP, System.currentTimeMillis());
editor.putInt(KEY_APP_LAST_INSTALL_VERSION_CODE, BuildConfig.VERSION_CODE);
editor.putInt(KEY_APP_LAST_INSTALL_VERSION_CODE, mVersionCode);
if (launchNumber == 0 || mPrefs.getInt(KEY_APP_FIRST_INSTALL_VERSION_CODE, 0) == 0)
editor.putInt(KEY_APP_FIRST_INSTALL_VERSION_CODE, BuildConfig.VERSION_CODE);
editor.putInt(KEY_APP_FIRST_INSTALL_VERSION_CODE, mVersionCode);
// Clean up legacy counters.
editor.remove("FirstInstallFlavor");

View File

@@ -11,7 +11,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.FileProvider;
import androidx.documentfile.provider.DocumentFile;
import app.organicmaps.BuildConfig;
import app.organicmaps.sdk.util.log.Logger;
import java.io.File;
import java.io.FileInputStream;
@@ -94,7 +93,7 @@ public class StorageUtils
{
try
{
return Utils.getApplicationInfo(context.getPackageManager(), BuildConfig.APPLICATION_ID, 0).sourceDir;
return Utils.getApplicationInfo(context.getPackageManager(), Config.getApplicationId(), 0).sourceDir;
}
catch (final PackageManager.NameNotFoundException e)
{
@@ -150,7 +149,7 @@ public class StorageUtils
@NonNull
public static Uri getUriForFilePath(@NonNull Context context, @NonNull String path)
{
return FileProvider.getUriForFile(context.getApplicationContext(), BuildConfig.FILE_PROVIDER_AUTHORITY,
return FileProvider.getUriForFile(context.getApplicationContext(), Config.getFileProviderAuthority(),
new File(path));
}

View File

@@ -17,7 +17,7 @@ import androidx.annotation.Keep;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import app.organicmaps.BuildConfig;
import app.organicmaps.sdk.BuildConfig;
import app.organicmaps.sdk.util.log.Logger;
import java.io.Closeable;
import java.io.IOException;
@@ -211,7 +211,7 @@ public class Utils
@SuppressWarnings("unused")
public static String getVersion()
{
return BuildConfig.VERSION_NAME;
return Config.getVersionName();
}
// Called from JNI.
@@ -222,7 +222,7 @@ public class Utils
// Please sync with getVersion() in build.gradle
// - % 100000000 removes prefix for special markets, e.g Huawei.
// - / 100 removes the number of commits in the current day.
return (BuildConfig.VERSION_CODE % 1_00_00_00_00) / 100;
return (Config.getVersionCode() % 1_00_00_00_00) / 100;
}
@NonNull

View File

@@ -4,7 +4,7 @@ import android.util.Log;
import androidx.annotation.Keep;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import app.organicmaps.BuildConfig;
import app.organicmaps.sdk.BuildConfig;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

View File

@@ -16,8 +16,9 @@ import androidx.annotation.Keep;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import app.organicmaps.BuildConfig;
import app.organicmaps.R;
import app.organicmaps.sdk.BuildConfig;
import app.organicmaps.sdk.util.Config;
import app.organicmaps.sdk.util.ROMUtils;
import app.organicmaps.sdk.util.StringUtils;
import java.io.File;
@@ -246,9 +247,9 @@ public final class LogsManager
for (String abi : Build.SUPPORTED_ABIS)
sb.append(' ').append(abi);
sb.append("\nApp version: ")
.append(BuildConfig.APPLICATION_ID)
.append(Config.getApplicationId())
.append(' ')
.append(BuildConfig.VERSION_NAME)
.append(Config.getVersionName())
.append("\nLocale: ")
.append(Locale.getDefault())
.append("\nNetworks: ");