앱(Layout) XML 변수에서 매니페스트 버전 번호를 얻으려면 어떻게 해야 합니까?
프로젝트 매니페스트 버전 번호를 코드 주요 부분에 참조할 수 있는 방법을 알고 싶습니다.지금까지 제가 하고 있는 일은 String XML 파일의 버전 번호를 매니페스트(@string/Version)에 연결하는 것입니다.제가 하고 싶은 일은 반대로, 문자열 XML 변수를 매니페스트의 버전에 연결하는 것입니다.그 이유는?매니페스트 파일 한 곳에서 버전 번호만 변경하면 됩니다.이것을 할 수 있는 방법이 없을까요?감사합니다!
버전을 직접 꺼낼 수 있는 방법은 없지만, 두 가지 해결 방법이 있습니다.
버전은 리소스 문자열에 저장될 수 있으며 다음과 같은 방법으로 매니페스트에 배치될 수 있습니다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.somepackage" android:versionName="@string/version" android:versionCode="20">사용자 정의 뷰를 만들어 XML에 배치할 수 있습니다. 뷰는 이를 사용하여 이름을 할당합니다.
context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
이 둘 중 하나의 솔루션은 버전 이름을 XML로 지정할 수 있습니다. 불행히도 다음과 같은 좋은 간단한 솔루션은 없습니다.android.R.string.version아니면 그런 비슷한 것.
사용할 수 있습니다.versionName활동 레이아웃과 같은 XML 리소스에서 사용할 수 있습니다.먼저 에서 문자열 리소스를 생성합니다.app/build.gradle에 다음과 같은 토막글로android노드:
applicationVariants.all { variant ->
variant.resValue "string", "versionName", variant.versionName
}
그래서 전체적으로build.gradle파일 내용은 다음과 같습니다.
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'
}
그러면 사용할 수 있습니다.@string/versionNameAndroid Studio는 빨간색으로 표시하지만 앱은 문제없이 컴파일됩니다.예를 들어, 이는 에서 이와 같이 사용될 수 있습니다.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>
Gradle을 사용하는 경우 컴파일 시 build.gradle 파일을 사용하여 xml 리소스에 프로그래밍적으로 값을 추가할 수 있습니다.
다음에서 추출된 코드 예제: https://medium.com/ @manas/manage-your-manages-app-s-version code-version name-with-gradle-7f9c5dcf09bf
buildTypes {
debug {
versionNameSuffix ".debug"
resValue "string", "app_version", "${defaultConfig.versionName}${versionNameSuffix}"
}
release {
resValue "string", "app_version", "${defaultConfig.versionName}"
}
}
지금사용@string/app_versionXML에 필요에 따라
추가됩니다..debug디버그 모드일 때 링크된 문서에 설명된 버전 이름으로.
선호도 클래스를 확장하여 이 문제를 해결했습니다.
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);
}
}
}
그런 다음 기본 설정 XML에서:
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.example.android.VersionPreference android:title="Version" />
</PreferenceScreen>
사용합니다.BuildConfig.VERSION_NAME.toString();. 패키지 매니저에서 받는 것과 어떤 점이 다릅니까?
XML 기반 솔루션이 저에게 적용되지 않았습니다. 죄송합니다.
XML에서는 사용할 수 없습니다.
XML에서 사용하고 있는 위젯을 확장하고 논리를 추가하여 콘스탄틴 부로프의 답변에 언급된 내용을 사용하여 텍스트를 설정해야 합니다.
가장 쉬운 해결책은 사용하는 것입니다.BuildConfig.
사용합니다.BuildConfig.VERSION_NAME
사용할 수도 있습니다.BuildConfig.VERSION_CODE버전 코드를 가져올 수 있습니다.
경기에 늦었지만, 당신은 그것을 필요 없이 할 수 있습니다.@string/xyz을 이용하여?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"
/>
언급URL : https://stackoverflow.com/questions/4471025/how-can-you-get-the-manifest-version-number-from-the-apps-layout-xml-variable
'programing' 카테고리의 다른 글
| naN 플로트를 c에서 생성하는 방법은? (0) | 2023.09.18 |
|---|---|
| MySQL 각각 여러 행으로 여러 테이블 결합 (0) | 2023.09.13 |
| Spring Boot 응용 프로그램을 시작할 때 RMI TCP 연결 오류가 발생했습니다. (0) | 2023.09.13 |
| GitHub 웹사이트에서 디렉토리/폴더 이름을 변경하는 방법은? (0) | 2023.09.13 |
| GCD의 블록 내에 NSAutorelease Pool을 만들어야 합니까? (0) | 2023.09.13 |