java – 在Studio <17上运行Android Studio验证错误
作者:互联网
我正在将一个应用程序从Eclipse移植到Android Studio,并且在尝试在API小于17的模拟器上运行应用程序时遇到验证错误.我很感激有关如何处理此问题的任何指导.这是在API 8仿真器上的logcat中显示的内容:
12-27 01:48:27.189 431-431/com.zigzagworld.icjl.tanachbible W/dalvikvm: VFY: register1 v10 type 12, wanted 10
12-27 01:48:27.189 431-431/com.zigzagworld.icjl.tanachbible W/dalvikvm: VFY: rejecting opcode 0x70 at 0x005e
12-27 01:48:27.189 431-431/com.zigzagworld.icjl.tanachbible W/dalvikvm: VFY: rejected Lcom/zigzagworld/fonts/GlyphMetrics;.<init> (SSS[S)V
12-27 01:48:27.189 431-431/com.zigzagworld.icjl.tanachbible W/dalvikvm: Verifier rejected class Lcom/zigzagworld/fonts/GlyphMetrics;
随着应用程序崩溃java.lang.VerifyError,紧接着(毫不奇怪).相同的.apk文件将在API级别17及更高级别上正常运行. API 17及更高版本有不同的代码路径,但GlyphMetrics类在某些时候使用,无论API级别如何. (如果不同的代码路径可以对类在加载时是否生成验证错误产生影响,有人请告诉我!)
GlyphMetrics类是一个非常简单的容器,用于处理我们在app中使用的home-brew位图字体的一些度量信息:
package com.zigzagworld.fonts;
import static com.zigzagworld.fonts.Diacritics.LOWER_DIACRITIC;
import static com.zigzagworld.fonts.Diacritics.UPPER_DIACRITIC;
/**
* Represents the layout metrics for a glyph.
*
* @author Ted Hopp
*/
public final class GlyphMetrics {
public static final short[] EMPTY_EXCLUSION = new short[0];
public static final short[][] EMPTY_EXCLUSIONS = { EMPTY_EXCLUSION, EMPTY_EXCLUSION };
/** The width of the glyph image, in pixels. */
public short width;
/** The height of the glyph image, in pixels. */
public short height;
/**
* The distance in pixels between the top of the glyph image and the
* baseline of the line. A positive value means that the top of the glyph
* should be above the baseline of the line; a negative value means that the
* top of the glyph should be below the baseline of the line.
*/
public short baseline;
/**
* The upper and lower axes for placement of diacriticals. Each axis is the
* distance from the left of the glyph image at which diacriticals should be
* centered. (The formatting algorithm for the font may move diacriticals
* from this position to avoid interference between glyphs.)
*/
public short[] axes;
/**
* The upper and lower exclusion zone arrays. If there are <i>n</i> upper
* (say) zones, the upper array has length length 2*<i>n</i>. The array has
* the left edge of the first zone, the right edge of the first zone, the
* left edge of the second zone, etc. The lower zone data are organized in
* the same way.
*/
public short[][] zones;
public GlyphMetrics(short width, short height, short baseline, short[] layoutData) {
this.width = width;
this.height = height;
this.baseline = baseline;
axes = new short[2];
width >>= 1; // for the rest of this, we need the half-width
if (layoutData == null || layoutData.length == 0) {
axes[UPPER_DIACRITIC] = axes[LOWER_DIACRITIC] = width;
zones = EMPTY_EXCLUSIONS;
} else {
axes[UPPER_DIACRITIC] = layoutData[0];
if (layoutData.length < 2) {
axes[LOWER_DIACRITIC] = width;
} else {
axes[LOWER_DIACRITIC] = layoutData[1];
}
if (layoutData.length < 5) {
zones = EMPTY_EXCLUSIONS;
} else {
int nUpper = layoutData[2] << 1;
zones = new short[2][];
zones[UPPER_DIACRITIC] = new short[nUpper];
System.arraycopy(layoutData, 3, zones[UPPER_DIACRITIC], 0, nUpper);
int lowerStart = 3 + nUpper;
if (layoutData.length < 2 + lowerStart) {
zones[LOWER_DIACRITIC] = EMPTY_EXCLUSION;
} else {
int nLower = layoutData[lowerStart++] << 1;
zones[LOWER_DIACRITIC] = new short[nLower];
System.arraycopy(layoutData, lowerStart, zones[LOWER_DIACRITIC], 0, nLower);
}
}
}
}
}
(导入UPPER_DIACRITIC和LOWER_DIACRITIC分别是常量0和1.)
我正在使用带有Gradle插件com.android.tools.build:gradle:2.0.0-alpha3和JDK 1.7.0_80的Android Studio 2.0 Preview 4构建它.这是.apk模块的build.gradle文件:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '23.0.2'
defaultConfig {
applicationId "com.zigzagworld.icjl.tanachbible"
minSdkVersion 8
targetSdkVersion 23
versionCode 10800310
versionName "3.1.0"
manifestPlaceholders = [
appName: "App",
v8TOCActivityName: "BaseTOCActivity",
v8PurchaseActivityName: "PurchaseActivity",
v17TOCActivityName: "TOCActivity",
v17PurchaseActivityName: "PurchaseActivity",
]
}
signingConfigs {
// redacted for this post
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//noinspection GroovyAssignabilityCheck
signingConfig // redacted
}
}
flavorDimensions "market"
productFlavors {
google {
dimension "market"
manifestPlaceholders = [
appName: "App_Google",
v8TOCActivityName: "TOCActivity_Google",
v8PurchaseActivityName: "GooglePurchaseActivity",
v17TOCActivityName: "TOCActivity_Google",
v17PurchaseActivityName: "GooglePurchaseActivity"
]
}
amazon {
dimension "market"
manifestPlaceholders = [
appName: "App_Amazon",
v8TOCActivityName: "BaseTOCActivity",
v8PurchaseActivityName: "PurchaseActivity",
v17TOCActivityName: "TOCActivity",
v17PurchaseActivityName: "PurchaseActivity"
]
}
sideLoad {
dimension "market"
manifestPlaceholders = [
appName: "App_Unlicensed",
v8TOCActivityName: "BaseTOCActivity",
v8PurchaseActivityName: "PurchaseActivity",
v17TOCActivityName: "TOCActivity",
v17PurchaseActivityName: "PurchaseActivity"
]
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:support-annotations:23.1.1'
compile project(':Tanach Data')
googleCompile project(':Google Vending')
amazonCompile project(':Amazon Vending')
}
问题出现在调试版本类型中,因此此时ProGuard不在图片中.
解决方法:
花了好几天后,我发现将gradle插件从2.0.0-alpha3降级到1.5.0会使问题消失.
这是我们努力保持在最前沿的代价.
标签:android,java,eclipse,verifyerror,android-studio-2-0 来源: https://codeday.me/bug/20190824/1706749.html