尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Android手机安全卫士项目:从Eclipse环境搭建到Android Studio迁移实战

Android手机安全卫士项目:从Eclipse环境搭建到Android Studio迁移实战 简介本资源是一套面向Android应用开发初学者与课程设计者的完整手机安全卫士实战项目基于Android 4.x–6.x平台与Eclipse开发环境构建聚焦移动终端常见安全防护功能实现如病毒查杀、权限管理、进程清理、流量监控与骚扰拦截等核心模块。压缩包共含全套可运行源码与配套技术文档总大小19.23MB涵盖Java源文件、XML布局资源、AndroidManifest配置、assets与res资源目录以及需求分析、架构设计、关键算法说明与测试报告等完整文档材料结构清晰、注释充分便于理解MVC分层逻辑与Android四大组件协同机制。已有340人学习下载所有代码均经真机与模拟器双重验证可直接导入Eclipse编译运行适合作为Android课程设计、毕业设计参考或安全类App二次开发基础模板。 网上搜到“基于AndroidEclipse的手机安全卫士”这种资源包时别急着双击解压先想清楚一件事这大概率是2013到2016年之间的毕设或课程设计项目开发工具是EclipseADT不是你现在电脑上装的Android Studio。很多同学下载完满怀期待地导入结果要么报错要么看不懂结构最后只能搁置。这篇博文就是从实操角度把这个项目从环境搭建、功能拆解、源码阅读到迁移Android Studio、写毕设文档的全过程捋清楚让这份“过时”的源码重新变成你能上手、能讲明白的东西。1. 拿到项目先别急着打开这类资源的底细和文件结构1.1 为什么网上大量Android项目都是Eclipse时代的产物Android开发早期官方推荐的就是Eclipse加ADT插件配合SDK Manager下载各个版本的Android API。后来Google在2013年推出Android Studio预览版直到2017年左右才逐渐把Eclipse项目彻底边缘化。这就导致一个现象大量已经公开的源码、课程设计、毕业设计生成日期都集中在2013到2016年工具链自然是Eclipse。手机安全卫士又是那几年Android方向的热门选题和商城、图书管理、记事本并称“毕设四大天王”所以你在资源站搜“Android 安全卫士”跳出来的几乎都是这个技术组合。这不是坏事。Eclipse工程和Android Studio工程在底层都是同一个东西——AndroidManifest.xml、res目录、src目录、Android SDK的依赖换成你熟悉的话讲就像同一道菜换了口锅。只要掌握了转换方法老工程照样能跑、能改、能答辩。1.2 解压后先做三件事我拿到任何一份这样的资源包第一步永远是“只解压不双击”先看清楚包里有什么。典型的解压后你会看到这么几个目录或文件Android手机安全卫士/ ├─ src/ # Java源码通常是com.xxx.securityguard这种包名 ├─ res/ # 布局、图片、字符串、主题等资源 ├─ assets/ # 内置文件比如号码归属地数据库、病毒特征库 ├─ libs/ # 引用的第三方jar包 ├─ AndroidManifest.xml # 核心配置文件 ├─ project.properties # Eclipse工程属性记录了target SDK版本 ├─ .classpath / .project # Eclipse工程元数据 └─ 开题报告.doc / 任务书.doc / 论文.doc / 答辩PPT.ppt这三件事按顺序做打开project.properties看target那一行写的是android-19还是android-22之类这决定了你需要安装哪个版本的SDK Platform。打开AndroidManifest.xml统计里面注册了多少个Activity、Service、BroadcastReceiver。这一步能让你快速知道项目规模。打开doc或根目录下的论文文档重点看“系统功能模块设计”那部分。别怪我没提醒你很多资源里的文档是拼凑的图和代码对不上是常态但对功能模块的大致描述还是有参考价值。2. 环境还原Eclipse加ADT加SDK版本匹配是让项目跑起来的关键2.1 版本匹配关系别用新版Eclipse把老项目跑起来的第一大坑就是版本。Eclipse本身也不算老古董但到了Eclipse 4.7以上Oxygen及之后ADT插件的支持就开始出问题。我实测下来最稳的组合是组件推荐版本说明JDK1.7或1.8如果你要跑比较老的ADT插件JDK8最稳Eclipse4.4 Luna 或 4.5 Mars对ADT兼容性最好ADT插件23.0.6最后一个正式版之后的版本不再更新Android SDK Platform根据project.properties里的target安装例如android-19、android-22有人问我电脑上装着JDK 17直接用不行吗不行。ADT 23.0.6在JDK 8以上环境里会报各种诡异错误比如java.lang.NoClassDefFoundError这跟你代码一点关系都没有纯粹是开发工具版本和JDK版本打架。我的建议是在电脑上单独放一个JDK 8目录Eclipse用eclipse.ini里的-vm参数强制指定别去动系统全局的JAVA_HOME。2.2 一步一步把项目导入Eclipse环境准备好之后按下面这些步骤操作能少走不少弯路解压资源包把整个项目文件夹放到一个不含中文和空格的路径下。很多老项目对路径极其敏感中文路径会出现资源加载异常。打开Eclipse先设置SDK路径Window → Preferences → Android填上你的Android SDK目录。用SDK Manager确认project.properties里指定的Platform已经装好。比如需要android-19就勾选Android 4.4.2装好。File → Import → Existing Projects into Workspace选择项目目录勾选Copy projects into workspace。项目导入后右键项目名选Properties → Android检查Project Build Target是否和原来的target一致。如果列表里没有对应版本回到第3步补装。如果libs目录下有jar包右键jar包Build Path → Add to Build Path。这一步经常被忽略漏了就会报ClassNotFoundException。Project → Clean等Eclipse自动编译一遍。看到R.java正常生成基本就成功一大半了。2.3 常见报错排查表就算版本匹配老项目也难免有些“年久失修”的小毛病。我整理了一份高频问题对照表你照着查报错信息真正原因解决方案Unable to resolve target android-19没装对应的SDK PlatformSDK Manager里补装Didnt find class xxx on pathlibs下的jar包没加进Build Path右键jar包Add to Build PathActivity not foundAndroidManifest.xml里没注册这个Activity补注册检查包名是否匹配No such table数据库第一次创建没成功检查Assets二进制数据库是否拷贝到/data/data/包名/databases/R cannot be resolved to a variable资源文件有编译错误检查res目录下是否有非法文件名或布局错误Conversion to Dalvik format failed with error 1依赖冲突或重复引用检查libs目录里是否有重复jar包Eclipse: Unable to load class org.apache.catalina.startup.Bootstrap这其实是Tomcat插件报的和安全卫士项目无关忽略或者关掉相关插件提示老项目模拟器跑起来普遍卡顿推荐用真机。系统版本过高时部分老代码比如短信监听、来电挂断可能受权限策略影响但这不影响你学习和演示。如果只是跑通验收建议优先找android 6.0以下系统的真机或者低版本模拟器镜像。3. 功能模块拆解手机安全卫士到底由哪些部分组成手机安全卫士的功能模块是这套源码最有价值的部分。无论界面多老旧核心功能逻辑放到今天也依然值得学。我拆解过的同类项目里功能集合大同小异下面按“最常出现、最可能出现在你的毕设文档里”的顺序来讲。3.1 手机防盗广播接收器加短信指令的经典组合手机防盗的逻辑非常典型用户提前设置一个安全号码如果手机SIM卡被更换系统自动检测并用短信告知安全号码用户也可以主动发短信指令远程执行定位、锁屏、擦除数据。技术上分三块SIM卡更换检测读取当前SIM卡的IMSI或手机号和保存在SharedPreferences里的安全值比对。短信指令处理写一个SmsReceiver继承BroadcastReceiver注册监听android.provider.Telephony.SMS_RECEIVED在receiv里解析短信内容。指令一般设计成#lock#、#location#这样的自定义协议。GPS定位回传用LocationManager获取经纬度通过SmsManager把定位结果发回安全号码。核心代码大概长这样public class SmsReceiver extends BroadcastReceiver { Override public void onReceive(Context context, Intent intent) { Object[] pdus (Object[]) intent.getExtras().get(pdus); for (Object pdu : pdus) { SmsMessage sms SmsMessage.createFromPdu((byte[]) pdu); String sender sms.getOriginatingAddress(); String content sms.getMessageBody(); if (#location#.equals(content)) { LocationManager lm (LocationManager) context.getSystemService( Context.LOCATION_SERVICE); Location loc lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); if (loc ! null) { String result lat: loc.getLatitude() ,lng: loc.getLongitude(); SmsManager.getDefault().sendTextMessage(sender, null, result, null, null); } } } } }这个模块是答辩时最容易展开讲的部分。老师问“广播接收器怎么用”“界面怎么刷新结果”的时候你都能拿这段代码当例子。3.2 病毒查杀APK的MD5和特征库比对病毒查杀是安全卫士的另一个核心功能实现思路也比较直观扫描手机上所有已安装APK的安装文件计算文件哈希值再和内置的病毒特征库比对如果匹配就判定为病毒。技术要点通过PackageManager.getInstalledPackages()拿到所有应用信息然后得到ApplicationInfo.sourceDir这个字段就是APK在手机里的绝对路径。对sourceDir对应的文件计算MD5或SHA1。计算方式不复杂用MessageDigest配合FileInputStream一点一点读出来。特征库放在assets目录下或者SQLite表里每一条记录是一个病毒APK的哈希值。扫描引擎通常封装成一个独立类比如VirusScanEngine里面提供一个类似scanAllApk(Context)的静态方法返回结果集合界面层再配合ListView把结果渲染出来。毕设文档里画一张“病毒查杀流程图”再贴一段MD5计算的代码这个模块就站得住。3.3 通讯拦截黑名单加广播优先级来电拦截和短信拦截是所有安全卫士项目里“代码量最大”的地方。短信拦截相对容易在SmsReceiver里判断黑名单号码和关键字命中后用abortBroadcast()把广播终止掉系统短信应用就收不到这条短信了。来电拦截在老代码里通常走的是反射调用ITelephony内部接口的方式典型代码是这样的Class? clazz Class.forName(com.android.internal.telephony.ITelephony); Method method clazz.getMethod(endCall); method.setAccessible(true); Method getITelephony clazz.getMethod(getITelephony); Object iTelephony getITelephony.invoke(null); method.invoke(iTelephony);这段代码放到Android 8.0以上已经是过时方案但在当时是“标准答案”。如果你迁移到新系统后发现挂断失效不用慌这是系统权限收紧导致的行为变化不是你的代码写错了。答辩时可以大大方方说“出于系统安全策略限制高版本手机上此功能展示受限”。黑名单管理一般会用到SQLite数据库表结构通常是黑名单号码表、关键字表、拦截记录表。理解这一点对后面看数据库代码会有很大帮助。3.4 进程管理、垃圾清理、流量监控软件管家的内容这三块功能在网络安全卫士中通常归入“软件管家”或者“手机加速”模块。进程管理ActivityManager.getRunningAppProcesses()获取进程列表除了系统进程之外都可以列出来勾选后调用killBackgroundProcesses()清理。注意老代码里还可能直接调用forceStopPackage()这也是高版本系统已经被限制的API。垃圾清理遍历应用缓存目录/data/data/包名/cache和外部缓存计算文件大小再递归删除。这个模块代码简单界面效果直观演示时很讨喜。流量监控核心是TrafficStats类TrafficStats.getTotalRxBytes()可以拿到手机开机以来累计接收的字节数。多数实现是定时记录快照然后计算差值画出类似流量环或进度条。3.5 号码归属地、软件更新、超强工具等其他模块号码归属地是安全卫士的老栏目。老版本做法是内置一个address.db数据库放在assets目录里首次打开时复制到/data/data/包名/databases/然后用SQL语句查询来电或短信的号码前缀。有的项目还会做一个悬浮窗来电时把归属地显示在屏幕上这就用到了系统弹窗权限SYSTEM_ALERT_WINDOW。模块总览我整理成一张表方便你对照源码找代码功能模块核心类主要API/技术涉及权限手机防盗SmsReceiver, GPSService, LostFindActivityBroadcastReceiver、SmsManager、LocationManagerRECEIVE_SMS、ACCESS_FINE_LOCATION病毒查杀VirusScanEngine, AntivirusActivityPackageManager、MessageDigest(MD5)无特殊权限短信拦截SmsReceiverabortBroadcastRECEIVE_SMS来电拦截CallReceiver, CallSafeActivityITelephony反射、黑名单库READ_PHONE_STATE进程管理ProcessManagerActivityActivityManagerKILL_BACKGROUND_PROCESSES垃圾清理CleanCacheActivity递归遍历文件无特殊权限归属地查询AddressService, AddressDaoSQLite查询SYSTEM_ALERT_WINDOW软件管理AppManagerActivityPackageManager无特殊权限4. 源码阅读路线顺着四大组件把项目走一遍很多人在拿到源码后最痛苦的事是把每个Java文件从头看到尾看完就忘。手机安全卫士项目再怎么小也有十几个甚至二三十个类正确的读法不是按字母序读而是顺着Android的系统骨架走。4.1 第一站AndroidManifest.xml这是阅读任何Android项目的入口。一个不严谨但高效的做法把这文件里的四个标签分别列表格。比如你数出application activity android:name.ui.SplashActivity / activity android:name.ui.HomeActivity / activity android:name.ui.LostFindActivity / service android:name.service.GPSService / receiver android:name.receiver.SmsReceiver / receiver android:name.receiver.BootReceiver / /application看到这个结构你的脑内就建立了一个地图UI层集中在ui包后台服务在service包广播接收器在receiver包。接下来读代码就顺了。4.2 第二站入口Activity和Application绝大多数项目入口是SplashActivity闪屏页它会在onCreate里延迟一两秒后跳转到主界面。主界面HomeActivity一般是一个GridView或ListView里面排列“手机防盗”“病毒查杀”“程序管理”等入口。这其实是整个App的导航中心。有自定义Application的项目比如MyApplication一定要看onCreate因为很多全局工具、数据库初始化都写在这里。老项目里你可能还会看到CrashHandler这类崩溃日志收集类这是加分项答辩时可以拿出来讲。4.3 第三站数据库与dao层安全卫士的数据库操作集中在两个地方一是assets/address.db号码归属地二是运行时创建的lostfind.db或security.db黑名单、病毒库、防盗设置。dao层类一般以xxxDao结尾方法都是标准的getWritableDatabase()、query、insert、delete、update。阅读dao层时不用逐行看重点抓住三件事数据表有哪些字段。哪些方法被哪些功能模块调用。数据库升级时怎么处理的onUpgrade方法有没有写。4.4 第四站跟一条完整的业务闭环我强烈建议你从项目里挑一个“业务闭环”完整跟一遍比如手机防盗。串联方式是LostFindActivity设置安全号码→SmsReceiver收到短信→ 判断指令 → 调用LocationManager定位 →SmsManager发送短信。这条链涉及Activity、BroadcastReceiver、系统服务、SharedPreferences读取走完一遍你对整个项目的理解立刻通透了。我的经验是给每条链路画一张手写调用流程图然后对着代码看一遍再对照文档里的图改一遍这个项目基本就是你的了。5. 想把项目迁到Android Studio看这一节就够了5.1 Eclipse侧导出Gradle工程如果你的电脑已经放弃Eclipse直接在Android Studio里打开老工程是不行的。正确做法是在Eclipse里做一次导出右键项目 → Export → Android → Generate Gradle build files这一步会在项目根目录生成build.gradle、settings.gradle、gradle.properties这些文件。之后用Android Studio的Open an existing Android Studio project选择项目目录Studio会自动导入。不过这个自动生成的build.gradle配置通常很老因为ADT 23.0.6集成的是老版本Gradle。导入后经常提示Gradle版本不兼容。我建议直接用Android Studio新建一个空工程把老项目里的src、res、assets、libs四个目录手动拷贝到新工程对应位置同时把AndroidManifest.xml整体替换新民 新工程生成的Manifest。这种方式看着原始但可控性最高报错了也好查。5.2 Android Studio里的gradle配置调整主build.gradle的写法AGPAndroid Gradle Plugin在7.x时代和ADT自动生成的文件完全是两个世界。你至少需要把buildToolsVersion、compileSdkVersion、minSdkVersion、targetSdkVersion这些字段补上同时dependencies里的语法从compile改成implementationandroid { compileSdkVersion 30 buildToolsVersion 30.0.3 defaultConfig { applicationId com.example.securityguard minSdkVersion 19 targetSdkVersion 23 versionCode 1 versionName 1.0 } } dependencies { implementation fileTree(dir: libs, include: [*.jar]) }如果你是第一次迁移targetSdkVersion可以先设置成23而不是最新的33因为目标版本越高系统越严格老代码运行报错的可能性越大。跑通后再逐步往上调。5.3 运行时权限、FileProvider、明文流量的适配这是迁移过程中最麻烦的部分也是我踩坑最多的地方动态权限Android 6.0API 23以后危险权限不能只写在Manifest里要在运行时调用requestPermissions。老安全卫士几乎绕不开短信、定位、读联系人所以你得在对应功能代码前补上检查和请求逻辑。最粗暴的兼容写法是if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) ! PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECEIVE_SMS}, 1); }FileProvider如果应用有安装APK、分享文件这类的功能在Android 7.0以后直接使用file://会抛出FileUriExposedException。需要在Manifest里注册FileProvider并配置file_paths.xml。很多迁移后“一点就崩”的Bug都出在这。明文HTTP流量Android 9.0API 28以后默认禁止使用http://明文请求。如果你没有用到网络请求或者请求的URL不是https需要在Manifest的application节点加android:usesCleartextTraffictrue。5.4 迁移后常见bug汇总Bug表现原因处理方式点击功能直接闪退6.0以上没有动态授权补运行时权限请求安装APK时提示文件Uri暴露7.0以上禁止file://配置FileProvider无法定位未申请定位权限或定位服务未开启检查权限和LocationManager设置广播收不到短信部分手机管家软件拦截在系统设置里允许自启动和后台运行布局显示异常或方向错乱老项目缺少不同分辨率适配用Android Studio的Layout Inspector逐页排查使用http连接失败9.0以上默认禁明文usesCleartextTraffictrue或改用https重要提示把项目从Eclipse迁到Android Studio的目的不是让老代码“看起来能用”而是让你能继续改代码、加新功能。如果只是答辩演示在低版本系统的模拟器上跑Eclipse老工程也完全够用不必强求迁移。先掂量清楚哪个方案投入产出比更高。6. 毕业设计文档怎么写出彩目录结构、论文图表与答辩准备6.1 标准论文目录结构手机安全卫士这套系统毕设论文的骨架几乎有一套“行规”式结构。照着下面这个目录搭基本不会错摘要和关键词第1章 绪论选题背景、研究意义、国内外研究现状、主要研究内容第2章 相关技术介绍Android平台架构、四大组件、SQLite数据库、Eclipse开发环境、Java语言第3章 系统分析可行性分析、功能性需求分析、非功能性需求分析、用例图第4章 系统设计系统总体架构设计、功能模块划分、数据库设计、E-R图、数据表设计第5章 系统实现各功能模块的实现流程、界面截图、核心代码说明第6章 系统测试测试环境、功能测试用例、测试结果分析、性能分析总结与展望参考文献、致谢这套结构本身不新鲜但只要内容充实、图表完整老师挑不出大毛病。6.2 论文中最容易拿分的地方文档写得好不好关键不在字多而在图表和代码选得准。我建议你用“一图一表一代码”的方法填充每个模块小节一图功能流程图或模块结构图。可以画简单的方框图不需要漂亮但要逻辑准确。一表功能测试用例表。表格要包含用例编号、测试功能、操作步骤、预期结果、实际结果、是否通过。一代码该模块最核心的一段代码。注意不是把整个类贴进去而是挑最能体现技术亮点的部分比如手机防盗里的短信指令解析、病毒查杀里的MD5计算。测试用例表示例用例编号测试功能操作步骤预期结果实际结果是否通过TC01黑名单短信拦截将一个号码加入黑名单发送短信短信被拦截无系统通知短信被拦截通过TC02病毒查杀点击病毒查杀按钮显示已安装应用扫描结果正常显示通过TC03找回手机-获取位置向被守护手机发送#location#收到含经纬度的短信回复收到回复信息通过6.3 答辩高频问题清单答辩时老师很少让你从头念PPT基本都是围绕“系统实现细节”和“技术难点”提问。我整理了几个出现频率最高的问题你提前想好答案系统用了多少Activity每个Activity的作用是什么广播接收器在什么场景下被使用为什么用广播接收器数据库是怎么设计的几个表字段是什么来电拦截功能怎么实现的高版本系统上为什么失效病毒查杀的特征库怎么来的准确率如何这个系统目前有什么不足如果继续开发你打算怎么做最后一个问题尤其重要别回答“没有不足”那等于告诉老师你对自己的系统不熟。你可以说“定位精度依赖GPS信号在室内不够稳定”“病毒特征库更新依赖手动导入未来想接云查杀接口”“界面布局使用的是旧版本控件后续可以迁移到Material Design”。说一两点再展望一下改进方向老师就会觉得你确实有研究。最后再分享一点个人经验这些年帮人看过不少类似项目我最大的感受是源码是别人的知识是自己的。很多同学拿到资源包后就当“交差工具”最后答辩现场被老师多问两句就露馅。我的做法是在跑通老项目、读完代码之后自己重新搭一个简化版比如只做手机防盗和黑名单拦截两个核心模块重新敲一遍第一天敲的时候你会发现“明明代码我都看懂了一写就懵”。这是正常的也是这个项目真正变成你能力的一部分必经的过程。这个简化版不用精美能把关键技术想明白、能讲清楚它就是你的了。本文还有配套的精品资源点击获取
返回列表