Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java VerifyError:当使用release APK时,验证器拒绝了棒棒糖上的类_Java_Android_Butterknife - Fatal编程技术网

Java VerifyError:当使用release APK时,验证器拒绝了棒棒糖上的类

Java VerifyError:当使用release APK时,验证器拒绝了棒棒糖上的类,java,android,butterknife,Java,Android,Butterknife,当我在5.x设备上安装我的发行版APK时,我遇到了这个错误。当我从Android Studio推送相同的代码时,或者在4.x设备上运行时,不会发生错误 java.lang.VerifyError: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$Vie

当我在
5.x
设备上安装我的发行版APK时,我遇到了这个错误。当我从Android Studio推送相同的代码时,或者在
4.x
设备上运行时,不会发生错误

java.lang.VerifyError: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) (declaration of 'com.myapp.android.ui.activity.MainActivity$$ViewInjector' appears in /data/app/com.myapp.android-2/base.apk)
       at java.lang.Class.classForName(Class.java)
       at java.lang.Class.forName(Class.java:308)
       at java.lang.Class.forName(Class.java:272)
       at butterknife.ButterKnife.findInjectorForClass(ButterKnife.java:298)
       at butterknife.ButterKnife.inject(ButterKnife.java:271)
       at butterknife.ButterKnife.inject(ButterKnife.java:184)
       at com.myapp.android.ui.activity.MyDrawerActivity.onCreate(MyDrawerActivity.java:31)
我在类中插入工具栏和自定义NavigationDrawer

@InjectView(R.id.toolbar) Toolbar mToolbar;
@InjectView(R.id.nav_drawer) MyNavigationDrawer mNavigationDrawer;
第31行:

ButterKnife.inject(this);
使用
gradle assembleerelease
时,Butterknife codegen有什么不同之处吗?我根本不用ProGuard

以下是我的其他Android构建设置:

# Android SDK settings
ANDROID_BUILD_MIN_SDK_VERSION=14
ANDROID_BUILD_TARGET_SDK_VERSION=21
ANDROID_BUILD_SDK_VERSION=21
ANDROID_BUILD_TOOLS_VERSION=21.1.2
Logcat

I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object)
I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object) failed to verify: register v4 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivitya.lang.Object): [0x0]
I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)
I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) failed to verify: register v1 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivity
E/art     (21354): Verification failed on class com.myapp.android.ui.activity.MainActivity$$ViewInjector in /data/app/com.myapp.android-1/base.apk because: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)

清除
build
文件夹解决了问题。不知道为什么艺术会有问题,但达尔维克没有


运行gradle
clean
任务并没有一直清除我的
build
文件夹。我必须手动操作,但是清洁可能对某些人有用。

在我的情况下,原因略有不同


显然,将
synchronized
语句放在
try/catch
块中会导致
VerifyError
,正如报告和上所述。

在我的例子中,原因是proguard。我的应用程序在sumsung note3上关闭,它是android 5.0。
我导入了android-async-http-1.4.9.jar,proguard是:

-dontwarn com.loopj.android.http.**
-keep class com.loopj.android.http.**{*;}
这还不够。我补充说:

-dontwarn cz.msebera.**
-keep class cz.msebera.**{*;}
虫子不见了


因此,如果您遇到这个错误,深层次的原因可能并不明显,需要注意的是proguard文件。

我也遇到了由Google TagManager引发的相同问题

java.lang.VerifyError:Verifier拒绝类com.google.android.gms.tagmanager.tagmanager:com.google.android.gms.common.api.pendingreult.com.google.android.gms.tagmanager.loadContainerDefaultOnly(java.lang.String,int)未能验证:com.google.android.gms.common.api.pendingreult com.google.android.gms.tagmanager.tagmanager.loadContainerDefaultOnly(java.lang.String,int):[0x11]返回“Reference:com.google.android.gms.tagmanager.zzp”,但应来自声明“Reference:com.google.android.gms.common.api.pendingreult”

它发生在合并之后。我的同事将库从
10.0.1
更新为
10.2.1
。干净的建筑不起作用


由于时间的限制,我回滚到旧版本,它成功了。

编辑:由于人们仍在投票这个答案,我想说的是,它是从2017年开始的。我不确定它是否仍然正确。。。我希望它对你们中的一些人仍然有用…

在我的例子中,我只是从“构建、执行、部署”设置中禁用了“即时运行”选项

为此:

  • 转到“文件”>“设置”>“生成、执行、部署”>“即时运行”
  • 取消选中“启用即时运行…”框,然后单击“确定”按钮

  • 在我的例子中,错误消息说的方法是“坏的”,有一些未知的错误。从Kotlin lambda更改为常规循环解决了我的问题

    之前(有错误):

    之后:

    fun validZipCode(zipcode: String): Boolean {
    
        val validRegexes = arrayOf(
                "0[0-9]{1}[0-9]{2}", 
                "1[0-2]{1}[0-9]{2}", 
                "1[3-4]{1}[0-9]{2}",
                "19[0-9]{2}", 
                "2[0-1]{1}[0-9]{2}"
        )
    
        for (regex in validRegexes) {
            if (zipcode.matches(regex.toRegex())) {
                return true
            }
        }
    
        return false
    }
    
    简单的(3)步骤对我来说很有效:

    1-从android studio build的顶部菜单-->clean project

    I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object)
    I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object) failed to verify: register v4 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivitya.lang.Object): [0x0]
    I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)
    I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) failed to verify: register v1 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivity
    E/art     (21354): Verification failed on class com.myapp.android.ui.activity.MainActivity$$ViewInjector in /data/app/com.myapp.android-1/base.apk because: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)
    
    2-从android studio build的顶部菜单-->制作项目

    I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object)
    I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object) failed to verify: register v4 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivitya.lang.Object): [0x0]
    I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)
    I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) failed to verify: register v1 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivity
    E/art     (21354): Verification failed on class com.myapp.android.ui.activity.MainActivity$$ViewInjector in /data/app/com.myapp.android-1/base.apk because: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)
    
    3-从android studio build的顶部菜单-->重建项目

    I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object)
    I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.inject(butterknife.ButterKnife$Finder, com.myapp.android.ui.activity.MainActivity, java.lang.Object) failed to verify: register v4 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivitya.lang.Object): [0x0]
    I/art     (21354): Verification error in void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)
    I/art     (21354): void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity) failed to verify: register v1 has type Reference: com.myapp.android.ui.activity.MainActivity but expected Reference: com.myapp.android.ui.activity.LoggedInNavActivity
    E/art     (21354): Verification failed on class com.myapp.android.ui.activity.MainActivity$$ViewInjector in /data/app/com.myapp.android-1/base.apk because: Verifier rejected class com.myapp.android.ui.activity.MainActivity$$ViewInjector due to bad method void com.myapp.android.ui.activity.MainActivity$$ViewInjector.reset(com.myapp.android.ui.activity.MainActivity)
    

    所有设置..

    我的应用程序在大多数平台上都可以运行,但在Android 5.1上立即崩溃。我开始怀疑新的D8DEX编译器在阅读了谷歌关于它有多棒的信息后。禁用D8,所以它使用原始的DX编译器,是唯一对我有效的事情。 Project clean/invalidate缓存没有修复它。 我有一些已同步的块,但删除它们并不能修复它。 关闭instant run无法解决此问题。 禁用proguard并没有修复它

    以下是禁用D8的方法:
    -在项目根目录中创建一个名为gradle.properties的文件(如果不存在)
    -在它里面放一行:android.enableD8=false

    您将收到不推荐使用的警告。希望谷歌能在完全删除不推荐的DX之前修复D8。我不知道是什么在我的代码触发它。我正在使用Android Studio 3.2.1和gradle版本4.6。
    编辑:我已经报告了这个错误,谷歌开发人员正在积极调查

    ,这可能对在调试构建中遇到这个问题的人也有帮助

    我也面临着同样的错误,我没有配置GoogleAPI控制台项目。 因此配置Google API控制台项目如下
    并在出现提示时指定应用程序的程序包名称。您还需要提供签名证书的SHA-1哈希值。有关信息,请参阅验证您的客户端。

    验证在某些情况下是否会引发错误,如果我们更改了A类的定义,但是类B是使用类A的旧版本编译的。
    这就是为什么如果我们清除项目并用同一版本的Java一起重建所有类,它就会得到解决

    下面的链接列出了可能发生验证错误的一些场景。

    能否显示logcat输出?在异常发生之前,日志中可能有一些附加信息。(在Dalvik中有,不知道艺术展是什么。)我添加了在错误之前显示的日志。我马上看到一个问题。第2行显示了一个名为
    LoggedInNavActivitya
    的父类,
    a
    不是实际名称。另一个突出的问题是,
    LoggedInNavActivity
    甚至不再存在于我的代码库中。。。我刚才删除了那个文件。这一次解决了我的问题,如果没有你的回答,我肯定不会轻易找到根本原因。谢谢!如果清除项目不起作用,请尝试使用文件->使缓存无效/重新启动…->Invalidate和RestartDid清除项目和使缓存无效/重新启动。不确定是哪一个,但当我同时使用这两个函数时,它都起作用了。我在stdlib函数上遇到了同样的问题。这就是bug