Android在编译和反编译时出现error: Error: String types not allowed错误的解决办法


     最近在编译和反编译apk包时出现了如标题所示的错误,经过google在stackoverflow   http://stackoverflow.com/questions/7899767/admob-error-in-eclipse-for-androidconfigchanges上发现比较好的解决办法,可惜依然没有解决我的问题,按照上面的步骤,可能是由于以下几种情况导致

     1、在Android Project配置文件中你使用了当前工程目标版本所没有的特性,针对这种情况只需更改下目标版本就行了
     2、apktool.jar可能不是最新的,针对这种情况下载最新版的apktool.jar就行了
     3、在windows平台上aapt.exe、apktool.bat可能不是最新的,针对这种情况也只需下载最新版
     
     基本上做了如上几个修改,重新反编译、编译,问题基本上能搞定,但当初并没有解决我的问题,继续查看帖子发现在编译和反编译时需用到目标版本平台包framework-res.apk,但我在windows平台上并没有用到这个目标版本平台包,果断的认为有可能是这个导致的问题,经过查看错误信息发现有如下提示,当时就猜测这个是不是自动帮我们生成的目标版本平台包,进入到文件夹中发现真有这么个包,但发现它的修改日期还是前年时候(那时还没有到4.0呢),而我当前的项目目标版本是17(4.2),果断的把apktool文件夹删除,重新反编译、编译就没有标题所示的错误了,apktool文件夹也重新自动生成了



     希望以上一些发现对朋友们能有一点小小的帮助~







<think>好的,我现在要帮用户解决云服务器上的405 Method Not Allowed错误。用户已经尝试过配置error_page将405转为200,但没效果。我需要根据提供的三个引用信息来分析可能的原因解决方案。 首先,引用[3]提到IIS在处理WebAPI请求,可能因为WebDAV模块ExtensionlessUrlHandler的冲突导致405错误。WebDAV模块默认处理PUT、DELETE等方法,如果它优先被匹配,就会阻止这些请求到达应用程序,从而返回405。所以,用户可能需要检查IIS中的WebDAV模块是否被移除。 引用[2]中提供的解决方案是移除WebDAVModuleWebDAV的handler,并且在handlers里添加通配符处理。用户的应用是Asp.Net Core,所以可能需要修改web.config文件,确保这些模块handler被正确移除,同配置aspNetCore处理所有动词路径。 另外,引用[1]中的用户尝试通过Nginx配置将405转为200,但没成功。这可能是因为Nginx虽然返回了200状态码,但请求并未正确被处理,只是掩盖了错误。正确的做法应该是解决根本的模块冲突问题,而不是仅仅修改状态码。 接下来,我需要将这些信息整合成步骤。首先,检查IIS模块中的WebDAV,确保移除。然后检查处理程序映射,确保ExtensionlessUrlHandler或aspNetCore处理所有动词。对于非IIS环境,比如Nginx或Apache,可能需要检查服务器配置是否允许PUT、DELETE等方法,或者是否有其他模块干扰。 另外,还要考虑应用本身的配置,比如CORS设置是否正确,是否允许这些HTTP方法。还要检查防火墙或安全组设置,是否拦截了这些请求。 用户的问题发生在云服务器上,可能涉及到不同的服务器软件,比如IIS、Nginx、Apache等,需要根据具体情况调整解决方案。同,需要提醒用户测试不同环境检查日志,以定位问题根源。</think>### 云服务器405 Method Not Allowed错误解决方案 #### 1. **移除WebDAV模块冲突(IIS环境)** - **问题原因**:IIS默认的WebDAV模块会拦截PUT、DELETE等HTTP方法,与ASP.NET Core的ExtensionlessUrlHandler产生冲突[^3]。 - **解决方法**: 1. 打开云服务器的`web.config`文件,添加以下配置移除WebDAV模块处理程序: ```xml <configuration> <system.webServer> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" /> </modules> <handlers accessPolicy="Read, Script"> <remove name="WebDAV" /> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" /> </handlers> </system.webServer> </configuration> ``` 2. 重启IIS服务或应用程序池。 #### 2. **配置HTTP动词允许列表** - **问题原因**:服务器或中间件未明确允许PUT、DELETE等非常用HTTP方法。 - **解决方法**: - **IIS**:在“处理程序映射”中编辑`ExtensionlessUrlHandler-Integrated-4.0`,设置`Verbs`为`*`(允许所有方法)。 - **Nginx/Apache**:检查配置文件(如`nginx.conf`),确保未限制HTTP方法: ```nginx location / { proxy_pass http://backend; proxy_method PUT DELETE POST GET; # 显式允许所需方法 } ``` #### 3. **检查CORS配置** - **问题原因**:跨域请求未在服务端配置允许的HTTP方法。 - **解决方法**:在ASP.NET Core中配置CORS策略: ```csharp services.AddCors(options => { options.AddPolicy("AllowAll", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() // 允许所有HTTP方法 .AllowAnyHeader(); }); }); ``` #### 4. **验证防火墙与安全组规则** - **问题原因**:云服务器的安全组可能拦截了特定HTTP方法的请求。 - **解决方法**:检查阿里云、腾讯云等平台的安全组配置,确保允许`PUT/DELETE`请求的流量通过。 #### 5. **日志分析与测试验证** - **查看服务器日志**:通过IIS日志、ASP.NET Core日志或Nginx的`error.log`定位具体拦截点。 - **使用工具测试**:通过Postman或curl发送PUT/DELETE请求,观察响应头状态码: ```bash curl -X PUT http://your-domain/api/resource ``` --- ### 常见问题补充 1. **为什么移除WebDAV后仍报405?** 可能是其他模块(如请求过滤模块)拦截了请求,需检查IIS模块列表或服务器中间件配置。 2. **Nginx返回405后如何正确转发?** 避免使用`error_page 405=200`掩盖问题,应检查后端应用是否实际处理了请求[^1]。 3. **Kubernetes环境中如何解决?** 检查Ingress Controller配置(如Nginx Ingress),添加注解允许特定方法: ```yaml annotations: nginx.ingress.kubernetes.io/allow-methods: "PUT, DELETE, POST, GET" ``` ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值