adb install failed_PARSE_FAILED_MANIFEST_MALFORMED 怎么解决

Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
[问题点数:20分,结帖人lovelj2012]
Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
[问题点数:20分,结帖人lovelj2012]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2015年9月 移动开发大版内专家分月排行榜第二2015年6月 移动开发大版内专家分月排行榜第二2014年12月 移动开发大版内专家分月排行榜第二2014年7月 移动开发大版内专家分月排行榜第二2013年12月 移动开发大版内专家分月排行榜第二2013年11月 移动开发大版内专家分月排行榜第二2013年10月 移动开发大版内专家分月排行榜第二
2014年11月 移动开发大版内专家分月排行榜第三2014年2月 移动开发大版内专家分月排行榜第三
2013年9月 移动平台大版内专家分月排行榜第二
2013年11月 移动开发大版内专家分月排行榜第三
2015年9月 移动开发大版内专家分月排行榜第二2015年6月 移动开发大版内专家分月排行榜第二2014年12月 移动开发大版内专家分月排行榜第二2014年7月 移动开发大版内专家分月排行榜第二2013年12月 移动开发大版内专家分月排行榜第二2013年11月 移动开发大版内专家分月排行榜第二2013年10月 移动开发大版内专家分月排行榜第二
2014年11月 移动开发大版内专家分月排行榜第三2014年2月 移动开发大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。Context.startActivity抛异常分析 - 简书
下载简书移动应用
写了26378字,被70人关注,获得了198个喜欢
Context.startActivity抛异常分析
下面的这个异常,相信很多开发者都看着比较眼熟,如下:
04-02 17:00:22.565 E/AndroidRuntime( 1484): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity
context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at android.app.ContextImpl.startActivity(ContextImpl.java:1370)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at android.app.ContextImpl.startActivity(ContextImpl.java:1357)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at android.content.ContextWrapper.startActivity(ContextWrapper.java:322)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at com.example.xiaoweiz.myapplication1.MainActivity$1.onClick(MainActivity.java:62)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at android.view.View.performClick(View.java:4869)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at android.view.View$PerformClick.run(View.java:20243)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at android.os.Handler.handleCallback(Handler.java:815)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at android.os.Handler.dispatchMessage(Handler.java:104)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at android.os.Looper.loop(Looper.java:194)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at android.app.ActivityThread.main(ActivityThread.java:5590)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at java.lang.reflect.Method.invoke(Native Method)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at java.lang.reflect.Method.invoke(Method.java:372)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:964)
04-02 17:00:22.565 E/AndroidRuntime( 1484):
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:759)
它一般是由如下的代码触发的:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("mgj://sub"));
getApplication().startActivity(intent);
一般我们都会在Activity的上下文中来启动另一个Act,比如act.startActivity(intent),这样做不会有这个问题,因为如果是在act中调用的,走的是另外的代码分支,Activity有重载这个方法。原理上讲是因为系统知道要将这个被启动的act放在哪个task里面,默认是和调用startActivity的act同一个task中,比如A启动B,那么系统会将B放入A所在的task中,但如果B在AndroidManifest.xml的&activity&中申明了独特的android:taskAffinity属性,那么B将会出现在一个新的task里,而不是和A一样,默认一个act的taskAffinity值就是app的包名。
另外,当启动的act最终是被放在一个新task中,这个结论一般我们也可以看到打开效果上有所不同,系统默认如果切task的话会有一个明显的切换动画,如果是在同一个task里打开的act,是不会有明显的切换动画,感觉上有点从一个app跳到了另一个app。这是一个经验性的发现,可以很方便地帮助我们识别这一结果,供参考。
偶尔我们可能没有act这样的Context,而是需要在像Application这样的Context中启动act,像上面出问题的代码,通过其调用栈我们发现最终出错是在ContextImpl.startActivity方法中,那我们去看下其源码,如下:
public void startActivity(Intent intent, Bundle options) {
warnIfCallingFromSystemProcess();
// 就是下面这个检测干的好事!!!
if ((intent.getFlags()&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) {
throw new AndroidRuntimeException(
"Calling startActivity() from outside of an Activity "
+ " context requires the FLAG_ACTIVITY_NEW_TASK flag."
+ " Is this really what you want?");
mMainThread.getInstrumentation().execStartActivity(
getOuterContext(), mMainThread.getApplicationThread(), null,
(Activity) null, intent, -1, options);
通过上面的源码我们发现了问题的根本原因,要fix这个问题也很简单,添加如下代码intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);即可。
当再次运行时发现这个烦人的Exception已经消失了,很不错,这里可能有些读者会觉得,那既然加了这个Intent.FLAG_ACTIVITY_NEW_TASK,那么启动后SubActivity应该是被放在新的task里面了吧,这里先贴下SubActivity的申明,如下:
SubActivity的申明
到底task栈是怎样的,我们可以在命令行通过这样的命令来观察adb shell dumpsys activity activities然后在输出中搜索running activities,一般建议将上面的输出重定向到一个文件中方便查看、搜索,具体结果如下:
task栈内容
我们发现SubActivity和启动它的MainActivity在同一个TaskRecord中,并不是我们想的那样会在新的Task里面,当然实际中我们依据上面介绍的经验从打开动画上就能得出同样的结论。那么我们到底要怎么做才能真正将SubActivity放在一个全新的task栈中呢?我们上面也提到了,可以修改act的taskAffinity属性来做到,改动如下图:
SubActivity增加taskAffinity后的申明
之后我们再次启动,再通过命令行工具看下这时的task栈内容,如下:
task栈内容2
我们发现这次才真正做到了将SubActivity放在了一个全新的task栈中,其实通过这次启动的效果我们也能感觉到,因为有个较明显的切换过程。
另外发现在使用android:taskAffinity这个属性时,如果指定的值不含.,在AS里Run的时候会报这样的错误:Failure [INSTALL_PARSE_FAILED_MANIFEST_MALFORMED]所以建议大家在设这个值时可以考虑采用类似java包名的做法,当然了设置这个值还是需要比较谨慎的,因为绝大部分情况是不需要改这些值的,因为改了后行为可能会出乎你的意料,比如会多出来个明显的切换效果,就像官方建议act的singleTask之类的启动模式也不要随便设置一样,最终都需要开发者做好各种测试。
我们在开发过程中会遇到各种各样的问题、坑,特别是Android平台,不过庆幸的是我们有源码,这是一切的根本,也就是说绝大部分问题只要我们愿意都可以从中找到问题的答案,虽然有时比较花时间,但却是提高的途径。也告诉我们出现问题时不要慌张,冷静地去寻找问题的root cause,这才是正确的解决问题的思路。
最后分享一个讲task栈的内容。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
被以下专题收入,发现更多相似内容:
玩转简书的第一步,从这个专题开始。
想上首页热门榜么?好内容想被更多人看到么?来投稿吧!如果被拒也不要灰心哦~入选文章会进一个队...
· 119720人关注
分享Android开发的知识,教程,解析,前沿信息,都可以,欢迎大家投稿~
内容可搞笑,可逗比,另外欢迎申请管理员
· 18569人关注
Android老鸟给新人的建议、资源。
更优质的原创内容,欢迎关注技术公众号,微信搜索:“Open软件开发小组”或者“open_dev”
· 10577人关注
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
选择支付方式:ANDROID百科_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
ANDROID百科
上传于||文档简介
&&A​N​D​R​O​I​D​百​科
大小:1.19KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢二次元同好交流新大陆
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2592)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED',
blogAbstract:'一般为AndroidManifest.xml中的activity的问题这次主要是因为activity在另外一个package里面,但是package名称第一次字母是大写,所以出错把package名称第一个大写字母改成小写字母后,就成功了',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:3,
permalink:'blog/static/',
commentCount:1,
mainCommentCount:1,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}2123人阅读
我的解决方案是:删除掉&permission-tree /&
******************************************
在Eclipse進行Android app的開發, 在進行編譯要進行測試APP寫得如何居然出現了錯誤 !!Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
我的天呀 !! 找了許多的相關資料 !! 都指向 AndroidManifest.xml 有問題 !! 有的原因是activity所在的包的名字里有大寫字母, 比如你的testActivity在&& src/Test/testActivty.java的話就會出錯 !! 將Test改成test就可以了。
還有遇到的是多了一個空白的:
&meta-data&&/meta-data&
將它刪掉後, 就可以成功進行測試囉 !!
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2293次
排名:千里之外}

我要回帖

更多关于 adb install failed 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信