《信息同步系统的设计与实现-学位论文.doc》由会员分享,可在线阅读,更多相关《信息同步系统的设计与实现-学位论文.doc(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、58 题 目: 信息同步系统的设计与实现 摘 要: 本系统正是针对那些恶意应用的,详细的阐述了信息同步系统之手机安全卫士的开发流程,包括手机防盗、通讯卫士、软件管理、进程管理、手机杀毒、系统优化、高级工具、设置中心等功能模块。整体项目采用MVC框架,是对安卓知识点的综合应用,用到的技术有(活动,服务,广播接收者,内容提供这,唤醒机制,数据库,自定义标题,自定义控件,小部件,进程间通讯等)。本项目是通过xml文件对页面进行布局,后台使用java代码实现每一个业务逻辑流程,完成页面中的每一个需求。本系统采用安卓作为开发平台,使用安卓开发工具作为开发环境,后台使用sqlite数据库进行数据的存储和传
2、输,来实现手机卫士之的数据共享和业务逻辑的交互。关键词:手机卫士;安卓开发平台;MVC框架;数据库。 Abstract: The system is aimed at those malicious applications, describes in detail the mobile phone security guards of the development process, including mobile phone anti-theft, communication guard, software management, process management, mobile p
3、hone antivirus, system optimization, advanced tools, set the center function module. The whole project using the MVC framework, it is a comprehensive application for Android knowledge point, use of Technology (activities, services, broadcast receivers, content providing this, wake-up mechanism, data
4、base, a custom title, custom controls, small parts, inter process communication). The project is through the XML file layout on the page, the background using java code to achieve each business logic process, complete the needs of each page in the. This system uses the android as the development pla
5、tform, using the Android development tools as the development environment, the background using SQLite database for data storage and transmission, interaction to achieve mobile phone guards of the sharing of data and business logic. Keywords: mobile phone guardian, Android development platform, MVC
6、framework, database目录目录21 绪论31.1 背景31.2 开发思路和计划32 系统需求52.1 范围52.2 定义52.3功能需求53 模块一:系统优化模块53.1 系统优化-界面设计53.2 系统优化-代码实现71、CleanCacheActivity类实现系统加速的清理缓存界面类,内部实现了扫面手机及清理缓存的操作。主要代码如下:72、 清单文件需要添加权限:165.4 系统优化处理流程163.5 子功能模块的测试174 模块二:高级工具模块204.2高级工具处理的流程图204.3主要类介绍214.4 高级工具页面设计214.5高级工具代码实现221、更新MainAc
7、tivity的item点击事件处理代码,点击“高级工具”项目时打开对应的页面:222、AToolsActivity的实现代码:223、高级工具-号码归属地查询244、 创建android component:NumberQueryActivity,并勾选layout文件的创建选项:numberqueryactivity_layout.xml。265、NumberQueryActivity的实现代码:276、 测试页面284.6高级工具-常用号码查询,ExpandableListView的使用305模块三:设置中心模块375.1设置中心的更新377.2设置中心代码实现387.3设置中心-更改归属
8、地显示风格417.4测试运行效果528 技术控制:541. Dalvik文件格式分析542. Dex文件解析错误!未定义书签。2.1 定位修改文件错误!未定义书签。10 参考文献:57 1 绪论 1.1 背景 本次开发是由安博教育和学校发起,学生自主选题的一次毕业设计。 伴随智能手机的不断普及,移动互联网的快速发展,伴随着3G时代的到来,智能手机的广泛应用,安卓成为活跃用户量最大的移动终端操作系统,并且安卓操作系统是开放源代码的,所以每个人都可以开发出一个安卓应用,导致安卓的应用数不胜数。由于安卓的开源,导致每个人可以对安卓端的软件进行编写,而有些开发者在应用中加入一些非法的代码,窃取用户的隐
9、私,使得手机的安全问题日益明显,手机安全问题关注度日益提高。 随着Android平台的发展和普及,Android已经成为恶意代码的下一个肆虐之地,这里我把一些漏洞的原理和技巧加以整理总结,起到抛砖引玉的作用,希望大家能够把这些知识用到以后反病毒和软件保护的工作中. 不需要懂得信息安全的人是幸福的,而我们的职责是保障他们的幸福。 1.2 开发思路和计划 在和指导老师多次交流后,确定实现方案的要点和工作计划。 整体项目采用MVC框架,是对android知识点的综合应用,用到的技术有 activity,service,broadcast,content provider,Notification,s
10、qlite数据库,自定义title,自定义控件,widget,aidl进程间通讯等,本项目所实现的功能如下: 手机防盗: 根据预设参数,判断手机是否被盗,根据自定义协议发送手机中SIM卡的信息和手机的位置信息给安全号码。可远程通过短信指令,给手机设置锁屏密码,远程锁定手机屏幕,远程格式化手机SD卡,恢复出厂设置,极大的保护用户的隐私安全,通过aidl注册admin设备,一般用户无法卸载该程序。 通讯卫士: 来电号码归属地显示,来电归属地位置的调整,来电黑名单/短信黑名单管理。电话短信备份和还原,保护手机的数据和通讯安全。 软件管理: 系统软件和本地软件,可以显示软件的详细信息,启动、删除、分享
11、应用程序。程序锁可以指定要保护的程序,用户进入要保护的程序之前必须输入密码。 进程管理: 显示当前系统运行的进程信息,显示系统内存信息,可以杀死某个进程,批量杀死进程,通过桌面widget实时展现用户当前的手机内存状态。 手机杀毒: 从服务器下载最新的病毒库,根据程序的包名和程序的数字签名识别病毒,提示用户并查杀恶意软件,使吸费木马无处可藏。 系统优化: 清理手机缓存,提高手机性能,优化电池管理。 高级工具: 手机号码归属地查询,更改归属地位置,常用号码查询。 设置中心: 可以对是否开启防盗、是否开启程序锁服务等功能进行设置,还可以更改来去电显示的风格。 和研究任何其它软件项目一样,我做的毕业
12、设计也经历了从选题,调研,熟悉开发环境,实验关键技术,查找类似的相关系统的资料;系统概要设计,数据库结构设计,功能模块开发,功能模块测试,系统调试和系统试运行和修改。如下1.2-1开发计划流程图:选题调查研究资料查询开发环境熟悉学习android技术概要设计数据库的设计功能模块开发和详细设计功能模块测试项目调试和修改需求分析 图1.2-1开发计划流程图2 系统需求2.1 范围本次开发的系统为信息同步系统之手机安全卫士。用于广大Android手机用户,包括手机防盗 、通讯卫士、 软件管理 、进程管理、 流量统计 、手机杀毒、系统优化、高级工具、设置中心2.2 定义MS MobileSafe (信
13、息同步系统之手机安全卫士)的缩写。 2.3功能需求1) 系统优化: 清理手机缓存,提高手机性能,优化电池管理。2) 高级工具: 手机号码归属地查询,更改归属地位置,常用号码查询。3) 设置中心: 可以对是否开启防盗、是否开启程序锁服务等功能进行设置,还可以更改来去电显示的风格。 3 模块一 系统优化模块3.1 系统优化-界面设计1)布局: Android提供的ProgressBar Widget控件,ScrollView内部只能放一个 布局,然后在改布局内在添加其他的布局;情况A:ScrollView-LinearLayout-LinearLayout情况B:ScrollView-Relati
14、veLayout-LinearLayoutA,B情况,都会导致ScrollView的滚动条占用一定空间只有将A,B情况的最后LinearLayout改成RelativeLayout,才能是ScrollView的滚动条不占用空间 每个item的布局文件:MainActivity添加代码: case 6: /系统优化 intent = new Intent(MainActivity.this, CleanCacheActivity.class); startActivity(intent); break;3.2 系统优化-代码实现1、CleanCacheActivity类实现系统加速的清理缓存界面
15、类,内部实现了扫面手机及清理缓存的操作。主要代码如下:1) 利用Handler来实现UI线程的更新的,通过配合Handler来实现timer功能的。 private Handler handler = new Handler() public void handleMessage(android.os.Message msg) switch (msg.what) case ADD_ONE_RESULT: /扫描到一条 final String packname = (String) msg.obj; / 获取这些应用程序的图标,名称,展现在界面上。 View child = View.infl
16、ate(getApplicationContext(), R.layout.cache_item, null); / 为child注册一个监听器。清理缓存调用系统的缓存清理功能。 child.setOnClickListener(new View.OnClickListener() 点击child时响应的点击事件 Override public void onClick(View v) / 判断SDK的版本号 if (Build.VERSION.SDK_INT = 9) / 跳转至“清理缓存”的界面(可以通过:设置-应用程序-点击任意应用程序后的界面) Intent intent = new
17、Intent(); intent.setAction(android.settings.APPLICATION_DETAILS_SETTINGS); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse(package: + packname); startActivity(intent); else Intent intent = new Intent(); intent.setAction(android.intent.action.VIEW); intent.addCategory(Intent.CAT
18、EGORY_DEFAULT); intent.addCategory(android.intent.category.VOICE_LAUNCH); intent.putExtra(pkg, packname); startActivity(intent); ); / 为child中的控件设置数据 ImageView iv_icon = (ImageView) child.findViewById(R.id.iv_cache_icon); iv_icon.setImageDrawable(getApplicationIcon(packname); TextView tv_name = (Text
19、View) child.findViewById(R.id.tv_cache_name); tv_name.setText(getApplicationName(packname); TextView tv_size = (TextView) child.findViewById(R.id.tv_cache_size); tv_size.setText(缓存大小 : + Formatter.formatFileSize(getApplicationContext(), cacheinfo.get(packname); / 将child添加到ll_clean控件上。 ll_clean.addVi
20、ew(child); break; ; ; 2) 扫描出带有缓存的应用程序 private void scanPackages() / 开启一个异步任务扫描带有缓存的应用程序 new AsyncTask() / 存储手机中所有已安装的应用程序的包信息 List packinfos; Override protected Void doInBackground(Void. params) int i = 0; for (PackageInfo info : packinfos) / 获取到应用程序的包名信息 String packname = info.packageName; getSize(
21、pm, packname); i+; try Thread.sleep(100); catch (InterruptedException e) / TODO Auto-generated catch block e.printStackTrace(); publishProgress(i); return null; Override protected void onPreExecute() cacheinfo = new HashMap(); packinfos = pm.getInstalledPackages(0); pd.setMax(packinfos.size(); tv_cl
22、ean_cache_status.setText(开始扫描.); super.onPreExecute(); Override protected void onPostExecute(Void result) tv_clean_cache_status.setText(扫描完毕. + 发现有 + cacheinfo.size() + 个缓存信息); super.onPostExecute(result); Override protected void onProgressUpdate(Integer. values) pd.setProgress(values0); tv_clean_ca
23、che_status.setText(正在扫描 + values0 + 条目); super.onProgressUpdate(values); .execute(); 3)通过反射的方式调用packageManager中的方法 private void getSize(PackageManager pm, String packname) try / 获取到getPackageSizeInfo。调用getPackageSizeInfo方法需要在清单文件中配置权限信息: Method method = pm.getClass().getDeclaredMethod(getPackageSize
24、Info, new ClassString.class, IPackageStatsObserver.class); / 执行getPackageSizeInfo方法 method.invoke(pm, new Objectpackname, new MyObersver(packname); catch (Exception e) e.printStackTrace(); 4) 执行packageManager中的getPackageSizeInfo方法时需要传入IPackageStatsObserver.Stub接口,该接口通过aidl调用。 private class MyObersve
25、r extends IPackageStatsObserver.Stub private String packname; public MyObersver(String packname) this.packname = packname; Override public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException / 以下是根据ApplicationsState代码中的SizeInfo对象中定义的 / 缓存大小 long cacheSize = pStats
26、.cacheSize; / 代码大小 long codeSize = pStats.codeSize; / 数据的大小 long dataSize = pStats.dataSize; / 判断这个包名对应的应用程序是否有缓存,如果有,则存入到集合中。 if (cacheSize 0) Message msg = Message.obtain(); msg.what = ADD_ONE_RESULT; msg.obj = packname; handler.sendMessage(msg); cacheinfo.put(packname, cacheSize); 5) 获取到应用程序的名称 p
27、rivate String getApplicationName(String packname) try PackageInfo packinfo = pm.getPackageInfo(packname, 0); return packinfo.applicationInfo.loadLabel(pm).toString(); catch (Exception e) e.printStackTrace(); return packname; 6) 获取到应用程序的图标 private Drawable getApplicationIcon(String packname) try Pack
28、ageInfo packinfo = pm.getPackageInfo(packname, 0); return packinfo.applicationInfo.loadIcon(pm); catch (Exception e) e.printStackTrace(); return getResources().getDrawable(R.drawable.ic_launcher); / 显示扫描的进度 private ProgressBar pd; / 提示扫描的状态 private TextView tv_clean_cache_status; / 系统的包管理器 private P
29、ackageManager pm; / 显示所有带有缓存的应用程序信息 private LinearLayout ll_clean; / 存放缓存信息 private Map cacheinfo; private Handler handler = new Handler() public void handleMessage(android.os.Message msg) switch (msg.what) case ADD_ONE_RESULT: /扫描到一条 final String packname = (String) msg.obj; / 获取这些应用程序的图标,名称,展现在界面上
30、。 View child = View.inflate(getApplicationContext(), R.layout.cache_item, null); / 为child注册一个监听器。 child.setOnClickListener(new View.OnClickListener() / 点击child时响应的点击事件 Override public void onClick(View v) / 判断SDK的版本号 if (Build.VERSION.SDK_INT = 9) / 跳转至“清理缓存”的界面(可以通过:设置-应用程序-点击任意应用程序后的界面) Intent int
31、ent = new Intent(); intent.setAction(android.settings.APPLICATION_DETAILS_SETTINGS); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse(package: + packname); startActivity(intent); else Intent intent = new Intent(); intent.setAction(android.intent.action.VIEW); intent.addCategory(
32、Intent.CATEGORY_DEFAULT); intent.addCategory(android.intent.category.VOICE_LAUNCH); intent.putExtra(pkg, packname); startActivity(intent); ); / 为child中的控件设置数据 ImageView iv_icon = (ImageView) child.findViewById(R.id.iv_cache_icon); iv_icon.setImageDrawable(getApplicationIcon(packname); TextView tv_na
33、me = (TextView) child.findViewById(R.id.tv_cache_name); tv_name.setText(getApplicationName(packname); TextView tv_size = (TextView) child.findViewById(R.id.tv_cache_size); tv_size.setText(缓存大小 : + Formatter.formatFileSize(getApplicationContext(), cacheinfo.get(packname); / 将child添加到ll_clean控件上。 ll_c
34、lean.addView(child); break; ; ; 7) 扫描出带有缓存的应用程序 private void scanPackages() / 开启一个异步任务扫描带有缓存的应用程序 new AsyncTask() / 存储手机中所有已安装的应用程序的包信息 List packinfos; Override protected Void doInBackground(Void. params) int i = 0; for (PackageInfo info : packinfos) / 获取到应用程序的包名信息 String packname = info.packageName; getSize(pm, packname); i+;