Saya ingin mengetahui cara untuk mereferensikan nomor versi manifes proyek di bagian utama kode. Apa yang saya lakukan sampai sekarang adalah menghubungkan nomor versi dalam file String XML ke manifes (@string/Version). Yang ingin saya lakukan adalah melakukannya sebaliknya, menautkan variabel string XML ke versi di manifes. Alasannya? Saya hanya ingin mengubah nomor versi di satu lokasi, file manifes. Apakah ada cara untuk melakukan ini? Terima kasih!
Bagaimana Anda bisa mendapatkan nomor Versi Manifes dari variabel XML (Tata Letak) Aplikasi?
Jawaban (9)
Saya yakin hal itu sudah dijawab di sini.
String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
OR
int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
- person Aaron Klap; 12.07.2012
Tidak ada cara untuk mengeluarkan versi tersebut secara langsung, tetapi ada dua solusi yang dapat dilakukan.
Versi tersebut dapat disimpan dalam string sumber daya, dan ditempatkan ke dalam manifes dengan:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.somepackage" android:versionName="@string/version" android:versionCode="20">
Seseorang dapat membuat tampilan khusus, dan menempatkannya ke dalam XML. Tampilan akan menggunakan ini untuk menetapkan nama:
context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
Salah satu dari solusi ini memungkinkan penempatan nama versi dalam XML. Sayangnya tidak ada solusi sederhana yang bagus, seperti android.R.string.version
atau semacamnya.
The android:versionName cannot be a resource url, it must be a literal string
- person Griddo; 23.04.2013
AndroidStudio
, manifes versionName
ditimpa oleh manifes yang diatur dalam file build.gradle
- person Adrian C.; 22.03.2016
Anda dapat menggunakan versionName
di sumber daya XML, seperti tata letak aktivitas. Pertama buat sumber daya string di app/build.gradle
dengan cuplikan berikut di node android
:
applicationVariants.all { variant ->
variant.resValue "string", "versionName", variant.versionName
}
Jadi seluruh isi file build.gradle
mungkin terlihat seperti ini:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '24.0.0 rc3'
defaultConfig {
applicationId 'com.example.myapplication'
minSdkVersion 15
targetSdkVersion 23
versionCode 17
versionName '0.2.3'
jackOptions {
enabled true
}
}
applicationVariants.all { variant ->
variant.resValue "string", "versionName", variant.versionName
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
compile 'com.android.support:design:23.3.0'
compile 'com.android.support:support-v4:23.3.0'
}
Kemudian Anda bisa menggunakan @string/versionName
di XML. Android Studio akan menandainya dengan warna merah, tetapi aplikasi akan dikompilasi tanpa masalah. Misalnya, ini dapat digunakan seperti ini di app/src/main/res/xml/preferences.xml
:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="About"
android:key="pref_key_about">
<Preference
android:key="pref_about_build"
android:title="Build version"
android:summary="@string/versionName" />
</PreferenceCategory>
</PreferenceScreen>
variant.resValue "string", "versionName", variant.versionName
di build.gradle
?
- person Arun Shankar; 06.11.2016
Saya memecahkan masalah ini dengan memperluas kelas Preferensi.
package com.example.android;
import android.content.Context;
import android.preference.Preference;
import android.util.AttributeSet;
public class VersionPreference extends Preference {
public VersionPreference(Context context, AttributeSet attrs) {
super(context, attrs);
String versionName;
final PackageManager packageManager = context.getPackageManager();
if (packageManager != null) {
try {
PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0);
versionName = packageInfo.versionName;
} catch (PackageManager.NameNotFoundException e) {
versionName = null;
}
setSummary(versionName);
}
}
}
Kemudian di XML preferensi saya:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.example.android.VersionPreference android:title="Version" />
</PreferenceScreen>
JIKA Anda menggunakan Gradle, Anda dapat menggunakan file build.gradle untuk menambahkan nilai ke sumber daya xml secara terprogram pada waktu kompilasi.
Contoh Kode diambil dari: https://medium.com/@manas/manage-your-android-app-s-versioncode-versionname-with-gradle-7f9c5dcf09bf
buildTypes {
debug {
versionNameSuffix ".debug"
resValue "string", "app_version", "${defaultConfig.versionName}${versionNameSuffix}"
}
release {
resValue "string", "app_version", "${defaultConfig.versionName}"
}
}
sekarang gunakan @string/app_version
sesuai kebutuhan dalam XML
Ini akan menambahkan .debug
ke nama versi seperti yang dijelaskan dalam artikel tertaut ketika dalam mode debug.
Saya menggunakan BuildConfig.VERSION_NAME.toString();
. Apa perbedaan antara itu dan mendapatkannya dari packageManager?
Tidak ada solusi berbasis XML yang berhasil untuk saya, maaf.
Anda tidak dapat menggunakannya dari XML.
Anda perlu memperluas widget yang Anda gunakan dalam XML dan menambahkan logika untuk mengatur teks menggunakan apa yang disebutkan pada jawaban Konstantin Burov.
Solusi termudah adalah dengan menggunakan BuildConfig
.
Saya menggunakan BuildConfig.VERSION_NAME
di aplikasi saya.
Anda juga dapat menggunakan BuildConfig.VERSION_CODE
untuk mendapatkan kode versi.
Terlambat ke permainan, tetapi Anda dapat melakukannya tanpa @string/xyz
dengan menggunakan ?android:attr
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="?android:attr/versionName"
/>
<!-- or -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="?android:attr/versionCode"
/>
<Preference android:title="Version" android:summary="?android:attr/versionName" ></Preference>
, tetapi ditampilkan sebagai ?16843292
.Ada apa?
- person Suge; 26.09.2013