我为每个ABI
创建multiple apk's,我这样做是为每个apk分配单独的版本代码。
ext.abiCodes = ['armeabi-v7a':1, mips:2, x86:3]
import com.android.build.OutputFile
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def baseAbiVersionCode =
project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))
if (baseAbiVersionCode != null) {
output.versionCodeOverride =
baseAbiVersionCode * 1000 + variant.versionCode
}
}
}
这是我的dafaultConfig
,以下versionCode
适用于universalApk
defaultConfig {
versionCode 74
versionName "1.0.2"
}
我在versionCode
附加了每个服务请求,我还在其中一个活动中显示versionCode
。所以我需要正确的versionCode
来执行这些操作,我使用此代码来获取versionCode
int versionCode = BuildConfig.VERSION_CODE;
现在的问题是,它显示versionCode
中陈述的defaultConfig
而不是实际代表构建的versionCode
。
我需要知道如何获得分配给此版本的1000
,可能是某个大于dafaultConfig
的数字,而不是{ linkId: 960,
link: 8,
text: individuals }
中分配的数字<span *ngFor="let item of items"
(click)="triggerClick()"
[attr.data-link-id]="item.linkId"
[attr.data-link]="item.link"
class="level_modal">
{{ item.text }}
</span>
}
答案 0 :(得分:3)
要检查版本代码,您可以使用PackageInfo和PackageManager
try {
PackageInfo pInfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
String version = pInfo.versionName; //version name
int verCode = pInfo.versionCode; //version code
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
答案 1 :(得分:2)
您不应该阅读构建配置文件,构建配置文件将显示默认配置。
您应该使用PackageInfo
try {
PackageInfo pInfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
String version = pInfo.versionName;
Log.e("name","name"+version);
Log.e("Code","code"+pInfo.versionCode);
}catch (Exception e){
e.printStackTrace();
}
对于armeabi-v7a将显示1001,对于mips将显示1002,对于x86显示1003
答案 2 :(得分:1)
我问了类似的here。
由于访问BuildConfig.VERSION_CODE
似乎比访问PackageInfo
便宜,因此我认为,在一种变通方法中,可以在这些情况下继续使用BuildConfig.java来检索versionCode
,这并不是与我们之前使用mergedFlavor.versionCode
并优于BuildConfig.VERSION_CODE
的情况一样好,但是由于进行了此更改是为了缩短构建时间,因此我非常乐意接受它。
首先,您应在每种口味中设置versionCode
,而不是defaultConfig
,例如:
flavorDimensions 'default'
productFlavors {
hellotest {
versionCode 20
}
hellotest1 {
versionCode 10
}
}
然后从上方更新代码:
ext.abiCodes = ['armeabi-v7a':1, mips:2, x86:3]
import com.android.build.OutputFile
android.applicationVariants.all { variant ->
// Get the versionCode statically defined in each flavor.
def versionCode = variant.productFlavors.get(0).versionCode
// Create a custom buildConfigField with the versionCode
variant.buildConfigField('int', 'OVERRIDEN_VERSION_CODE', "${versionCode}")
variant.outputs.each { output ->
def baseAbiVersionCode =
project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))
if (baseAbiVersionCode != null) {
output.versionCodeOverride =
baseAbiVersionCode * 1000 + variant.versionCode
// Update the BuildConfig.OVERRIDEN_VERSION_CODE with the new versionCode.
// OVERRIDEN_VERSION_CODE is just an example name, you can give the name you want.
variant.buildConfigField('int', 'OVERRIDEN_VERSION_CODE', "${output.versionCodeOverride}")
}
}
}
此后,您将可以通过项目中任何地方的versionCode
访问正确的BuildConfig.OVERRIDEN_VERSION_CODE
。