Android实战学习群482189902。热心免费提供解答,帮助新手快速入门。
看返回值onActivityResult()createShorcut()生产viewshortcut是一个文本一个图片。liveFolder和shortcut添加机制流程差不多。添加快捷方式会去启动一下应用程序(后退出)。自己添加快捷方式的重点:1 要呈现在列表里,要在intent filter里加东西(2:check IntentFilter())2 return的intent以返回字符和图标用以显示(7:completeAddShortcut())。新建项目尝试添加shortcut新建activitymanifest中注册,intent-filter action属性为CREATE_SHORTCUT完成了列表里的动作。再完成显示的动作:onCreate()中不启动,不setContentView();设置shortcut文本图片;返回shortcut的intent;关闭窗体finish();
导入launcher2文件夹(app)代码。manifest.xml找到主activity,属性和其他主activity有所不同,按home键到这个launcher app。 Launcher.javaonCreate()启动:AppWidgetManager,AppWidgetHost,AppWidgetHostView之间的关系?? appWidget如何显示出来的?launcher和其他app在不同进程,通过content provider共享数据,添加widget时在数据库插入一条数据。launcher通过观察者模式一直监听,发现有插入数据,驱动出来,在更新launcher界面的显示。 跟踪快捷方式添加:查dialog的onClick()ctrl+o搜索onClick()
Sundy私塾之-Android高级应用课程Stage3_Lesson1 AppWidget及Launcher_1Launcher节目元素标准名称及四大操作什么是launcher? Home Screen,Work Space,Hot Seats,AppWidget,Wall PaperAllAppList(AllApps)界面也属于launcher,是GridView 开发自己的launcher,何如启动时加载自己的launcher,看系统的intent filter 添加liveFolder到桌面,打开是个窗体。 动态墙纸比较麻烦 AppWidget 桌面不规则的图
System.exit(0);粗暴,直接垃圾回收。Process.killProcess()正常的退出进程流程 看application回调函数看生命周期。回调打印log:启动:app createdapp config changed退出:我们的进程 pid504 died,但没调用application的回调,也没调用activity的destroy。跟踪发现Process.killProcess()也没被调用,还是比较粗暴,专门做进程管理用到,一般还是不要使用,让系统自己管理。 疑问1,为什么我的应用(进程)没有退出?因为系统管理?资源充足,没有真正退出?疑问2,还是不明确进程如何消亡。可能系统自己管理,表象的退出是否消亡都不一定?application回调的跟踪没看到terminate和lowMemory。这个例子里,我们的应用返回应该还没消亡吧?不同步伤不起啊。
5 空进程(退出的情况)(1)等待垃圾回收(2)长按home显示最近运行程序,再次进入更快显示。 我的进程为何总是退步出去?---引出进程的生命周期,重点,启动和消亡。 启动过程:PackageManager启动activity;PackageManager依赖PackageManagerService系统服务;PackageManagerService服务去start主activity。发现进程不存在,通知Zygote守护进程去实例化一个DalvikVM虚拟机进程并且把自己装载进来。PackageManager如何查到主activity的,和manifest的索引映射有关。 消亡:系统资源不够,自动释放;和adbshell中kill 进程id 效果一样。系统不会kill active的进程。底层,系统类库层有个守护的进程服务依赖于kernel中的LowMemoryKiller软驱动。手动关掉进程的方法:1 当前acitivity直接调用finish()方法。当前activity的destroy,把当前activity消亡。进程还在。2 System.exit(0) 退出进程。3 Process
Stage2-Lesson3Android应用开发基础及原理概要_7 Manifest文件 “元素就是类”,manifest也有java文件。属性映射到类的属性。 进程识别通过包名来识别。 主题将@替换成?
Stage2_Lesson3 Android应用开发基础及原理概要_6 调用应用程序资源getResources().get各种资源() Android:的方式提供系统资源给我们。 Manifest1 全局配置文件2 程序入口标签元素都是小写manifest,application标签有且仅有一个。同一级别标签和顺序无关,除了activity别名必需跟在activity后(target)。属性:name,label等。属性都是可选的。
结论:长宽高用dp字体用sp 系统应用程序都支持多语言。看拍照程序。 android支持图片格式png,jpg,gif。一般用png位图 演示animation。两种动画,放在animation(tweened)下和drawable(frame by frame)下。 menu,如camara菜单中嵌套按钮。
Stage2-Lesson3Android应用开发基础及原理概要_4 应用程序资源目录介绍
contentResolver的query()也可能用到intent对象。launcher 系统自带应用程序,位置/package/apps/.包括home screen,application list。widget,小插件,在桌面上的,如日期时间,天气notification,提醒。 framework源码:/framework/base/core/java/android/app//framework/base/core/java/android/content//framework/base/media/java/android/media/ 用到第三方底层类库,和驱动相关,所以没放到core下,对native。
Android是基于linux的多用户操作系统。每个应用程序都是使用不同的用户。一个应用程序有一个userid。每个进程有自己的虚拟机实例,所以每个应用程序相对独立。例外情况:可以让两个应用程序共享同一个userid,彼此之间共享资源;应用程序可以请求访问系统资源,如通讯录、短信等。但需要安装的时候被授权。 七大件:四大组件intentlauncher&widgetnotification数据在android中是程序私有的。如通讯录中数据是通讯录私有,其他程序想访问,不能直接提供数据结构,提供一种机制让其他程序访问;content provider提供了多个程序间数据交互的机制;content provider暴露出一些标准api来对数据进行操作。Broadcast receiver 对外部事件作出相应;程序通过Context.sendBroadcast()将自己的intent广播出去。四大组件都需要在manifest中注册。三大组件都需要intent支持:传递intent启动一个activity;传递intent启动一个service;通过一个intent加入一个广播;intent可以简单理解为参数,但是“活”的,有时会传递微小的流程单元(定义)。
Sundy私塾之-Android高级应用课程Stage2-Lesson3Android应用开发基础原理概要_1 掌上设备开发特点
dex2jar classes.dex sundyandroiddemo.jarsundyandroiddemo.jar解压成很多class文件,带打包路径。Xjad 用户界面工具直接反编译jar文件。对比java文件:有些差异。axmlprinter,将apk解压的xml反压缩。工具不是很好,id是乱的,不然apktool。 总结apk是个压缩包。反编译实际是要反编译dalvik二进制dex文件和压缩的xml文件。完成反编译工具组合:apktool+dex2jar+xjadapktool:让xml可读dex2jar+xjad:dex恢复java源码
反编译出来是,(运行时的)中间语言Smali。dexdump:dex-》Smali(不好读)只反编译dex够吗?需要反编译xml。发现manifest,layout等xml也被编译压缩过,res会被压缩,只有raw文件夹下文件保持原状。图片图标不变。 apktool进行第一次反编译,编译成Smali。开源的。下载:apktool1.4.1.tar.bz2下载:apktool-install-windows-r04 -brut1.tar.bz2(for windows 批处理)java -jar apktool.jar 启动jar包。用apktool.bat拷贝到sdk的工具目录下,方便直接输入命令:apktool d SundyAndroidDemo.apk SundyAndroidDemo生成有smali文件夹,每个java对应一个smali,有包目录结构。用dexdump是全部在一个smali文件中。xml可读,和原始文件有差别。文件对比工具:beyond compare反编译:dex-》jar包-》(class可选/可省)-》javadex2jar,开源工具。jar包-》java,java范畴,很成熟,有很多工具。如xjad核心:JD,JDCore(引擎)
assets和res(raw)的区别,如何选择?raw通过R直接访问;asserts通过路径访问,且方便建立子文件夹,参见AssetManager。内置一些mp3,建议在asset下,不要增加R映射额外开销,且更灵活。应用程序目录结构介绍-对比生成的apk安装包的路径。res资源包,类似rar压缩包要先解压才正常访问。首选asset。文件特别小,文件不多的时候用res。 应用程序目录结构介绍:srcgenassertsres drawable layout values xmlAndroidManifest.xml多了一个proguard.cfg 反编译apk:android.jar包已经在虚拟机或者真机的ROM中,不用每次装。META-INF-一下签名配置。res-类似,无内容的没有。AndroidManifest.xml-一样的。classes.dex-在虚拟机跑的可执行二进制文件。resources.arsc-资源是索引文件。文件对应和转换:.java->(JDK)->.class->(DX)->.dexaapt工具将一堆打包成apk各工具在android sdk,platform-tools下:aapt.exe,aidl.exe,dx.bat(dx.jar)认识apk文件: dex xml压缩 (思路就是要反编译这两块)看两个演示:case1,:直接通过apktool反编译成smalicase2,先dex然后xml: dex2jar xjad-对比一下java axmlprinter2 反编译dex文件:SDK提供的工具dexdumpSDK tools下也是工具。dex反编译后是什么文件?命令:dexdump -d SundyAndroidDemo/classes.dex > SundyAndroidDemo/classes.txt(>写到一个文件,>>追加到一个文件)
aaaa