До сих пор я нашел единственный способ установить versionCodeMajor
в Android Studio 3.2.1 через AndroidManifest.xml
и отключить InstantRun .
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:versionCodeMajor="8" [...]
'причина установки его в build.gradle
файле, который вы получаете
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.example.xxx.myapplicationp"
minSdkVersion 'P'
targetSdkVersion 'P'
versionCode 127
//versionCodeMajor 8
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
Не удалось найти метод versionCodeMajor () для аргументов
Итак, установив выбранный вами основной номер кода версиив AndroidManifest.xml
и отключив InstantRun , вы можете получить его следующим образом:
static long getAppVersionCode(Context context) throws PackageManager.NameNotFoundException {
PackageInfo pinfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
long returnValue = Long.MAX_VALUE;
//if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P
&& !"P".equals(Build.VERSION.CODENAME) /* This 'cause the dev preview */) {
returnValue = pinfo.versionCode;
} else {
returnValue = pinfo.getLongVersionCode();
Log.d("AAA", "Full long value: " + returnValue);
Log.d("AAA", "Major Version Code (your chosen one) " + (returnValue >> 32)); // 8 in this scenario
Log.d("AAA", "Version Code (your chosen one) " + (int)(returnValue & 0x00000000ffffffff)); // 127 in this scenario
}
return returnValue;
}
или вы можете использовать PackageInfoCompat , например:
static long getAppVersionCode(Context context) throws PackageManager.NameNotFoundException {
PackageInfo pinfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
long returnValue = Long.MAX_VALUE;
returnValue = PackageInfoCompat.getLongVersionCode(pinfo);
if (BuildConfig.DEBUG) {
int majorCode = (int)(returnValue >> 32);
int versionCode = (int)(returnValue & 0x00000000ffffffff); // or simply returnValue
Log.d("AAA", "Full long value: " + returnValue);
Log.d("AAA", "Major Version Code (your chosen one) " + majorCode); // 8 in this scenario
Log.d("AAA", "Version Code (your chosen one) " + versionCode); // 127 in this scenario
}
return returnValue;
}
И это должно ответить, как его использовать или способ.
Для того, когда и зачем его использовать ... Я думаю, это зависит от вас ... как, как вы указали, документация говорит вам, отмечая, почему вы должны его использовать.То, что говорит доктор, это то, что вы должны представлять своим пользователям только хорошо известный versionNumber.
Я полагаю, они добавляют еще несколько битов в versionCode, потому что им нужно большее число для их версий ^^ '
Тем не менее, если вы не установите versionCodeMajor
в AndroidManifest.xml
или в файле build.gradle
(когда он его обработает), или вы установите его на 0
, тогда это значение будет идентично старому versionNumber
устаревшему полю.