如何修改apk文件[apk文件修改、图标、美化、去广告]完全教程
一、首先搭建jdk环境。
下载完后,点击安装。然后设置运行环境参数:
用鼠标右击“我的电脑”->属性->高级->环境变量
系统变量->新建->变量名:JAVA_HOME 变量值:D:\Program Files\Java\jdk170(这是我的安装路径这个不是固定的,比如你安装到C:\Program Files,就填C:\Program Files\Java\jdk170)
系统变量->编辑->变量名:Path 在变量值的最前面加上:%JAVA_HOME%\bin;(若已经有Path项,无须另外新建,直接在后面加,但需用;与前面已有的项分隔开)
系统变量->新建->变量名:CLASSPATH 变量值:
;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dtjar;%JAVA_HOME%\lib\toolsjar;
最后测试下环境变量是否设置成功
点开始菜单-运行-在这里输入cmd-回车-输入javac
1如果出现如下信息:
用法:javac
其中,可能的选项包括:
-g 生成所有调试信息
-g:none 不生成任何调试信息
-g:{lines,vars,source} 只生成某些调试信息
-nowarn 不生成任何警告
-verbose 输出有关编译器正在执行的 *** 作的消息
-deprecation 输出使用已过时的 API 的源位置
-classpath 指定查找用户类文件的位置
-cp 指定查找用户类文件的位置
-sourcepath 指定查找输入源文件的位置
-bootclasspath 覆盖引导类文件的位置
-extdirs 覆盖安装的扩展目录的位置
-endorseddirs 覆盖签名的标准路径的位置
-d 指定存放生成的类文件的位置
-encoding 指定源文件使用的字符编码
-source 提供与指定版本的源兼容性
-target 生成特定 VM 版本的类文件
-version 版本信息
-help 输出标准选项的提要
-X 输出非标准选项的提要
-J 直接将 传递给运行时系统
恭喜,你的Java环境变量配置成功了!
2如果出现:
'javac' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
说明这Java环境变量配置出错了,仔细检查下吧!
二、下载APKTools工具包(里面包含:APKTools反编译工具、APKSign签名工具)。下载Notepad代码编辑器(可以修改smali和xml文件)。
在修改之前首先对APK文件内部结构有个了解:
AndroidManifestxml 程序全局配置文件
classesdex 这是Dalvik字节码
resourcesarsc 编译后的二进制资源文件
META-INF\ 该目录下存放的是签名信息
res\ 该目录存放资源文件
assets\ 该目录可以存放一些配置文件
对应这些文件和目录做些基本的注释和介绍:
AndroidManifestxml
该文件是每个应用程序都必须定义和包含的文件,它描述了应用程序的名字、版本、权限、引用的库文件等等信息。需要解包后才能加以阅读。
classesdex文件
classesdex是java源码编译后生成的java字节码文件。dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。
resourcesarsc
编译后的二进制资源文件。
META-INF目录
META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk包里的文件不能被随意替换。比如拿到一个apk包后,如果想要替换里面的一幅,一段代码, 或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。
res目录
res目录存放资源文件。包括,字符串等等。
解包后,几乎所有可能的修改和编辑工作基本都在这里。
assets目录
assets目录可以存放一些配置文件,这些文件的内容在程序运行过程中可以通过相关的API获得。
APK文件修改,首先要对APK文件解包(也就是反编译),打开apktoolexe,如图:
左边APK反编译区,选择APK文件,选择文件保存目录,点反编译APK按钮,得到解包文件。
三、开始修改
1 如果只是对图像进行替换,没有必要进行解包和打包。用WinRAR打开APK文件,直接做替换就可以了。但是,如果要对文字和其它非图像类内容进行修改,那只能通过解包了,改好后,再编译回来,最后签名才能放进手机安装。下面介绍几个对APK进行解包和打包的案例。
2 汉化APK软件
在res文件夹中,我们可以看到有很多values-的文件夹,这就是语言包。values是英文语言包,values-zh是中国地区语言包(包含港澳台及内地),values-zh-rCN是中文简体语言包(只包含内地),values-zh-rTW是中文繁体语言包(港澳台)。除此以外,其它地区的语言包都是精简的对象,可以不过多了解。
在values文件夹里,通常有arraysxml、stringsxml等语言文件,要作汉化就要对这些文件进行修改。有时也需要修改其它xml文件,一个一个地认真查看。改好后,打包,签名,OK。
3 修改桌面图标名称(标签)
每一个APK文件都有一个“图标标签”。将APK程序安装进手机后,在图标下面显示图标标签文字。这个图标标签的内容是可以修改的。在\res\values下找到stringsxml,修改其中的一行:
图标标签
例如:静音启动
同理,如果是窗口小插件,要修改widget_name。
注意:system/app下的apk不宜修改,因为要同时修改对应的odex文件。
改好后,打包,签名,OK。
4 去掉APK中的广告
有很多APK应用都带有广告。为了去掉程序中的广告,要修改mainxml文件与广告有关的内容。在\res目录下找到文件mainxml。通常在\layout目录下,有时也被放在其它目录下。甚至,有时不存在mainxml文件,广告行被放在其它xml文件内。只能细心逐个文件进行查找。无论哪一种情况,查看其内容,你会看到有一项类似的命令如下。这就是广告显示。
将其改为:
可以看到,关键是要把fill_parent改为00dip,把wrap_content改为00dip,其它保持不变即可。这种改法就是不给广告显示空间,当然你就看不到广告了。
改好后,打包,签名,OK。
5 修改显示电池为1%精度
举个例子比如在摩托罗拉XT502上,默认显示只有7档: 0%,10%,20%,40%,60%,80% 和100%。通过修改framework-resapk,可以改变显示精度。但是在一些手机上,实践证明最好可能达到的现实精度只有10%。修改工作如下:
(1) 对framework-resapk进行解包
(2) 修改和增加电池状态图标
(3) 修改文件stat_sys_batteryxml
(4) 修改文件stat_sys_battery_chargexml
(5) 打包
(6) 提取stat_sys_batteryxml,stat_sys_battery_chargexml,resourcesarsc和一个图标目录:drawable-mdpi
(7) 重新装配framework-resapk
6 状态栏信息通知文字颜色修改
状态栏信息通知文字颜色,是由framework-resapk文件里res\values下的colorsxml文件控制的,所以我们只需修改colorsxml文件就可以了。另外,此文件还控制下拉栏的文字颜色,可以修改。
用文本编辑器打开colorsxml文件,找到
#ff000000
将这句修改为:#ffffffff
这状态栏信息通知文字颜色由黑色改为白色。
改好后,打包,签名,OK。
apk文件和sis一样最终把androidsdk编译的工程打包成一个安装程序文件格式为apk
APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是DalvikVMexecutes的全称,即AndroidDalvik执行程序,并非JavaME的字节码而是Dalvik字节码
一个APK文件结构为:META-INF\Jar文件中常可以看到res\存放资源文件的目录
xml程序全局配置文件classes
dexDalvik字节码resources
arsc编译后的二进制资源文件总结下我们发现Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接,和WindowsMobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexmp命令可以反编译,但这样做符合发展规律,微软的WindowsGadgets或者说WPF也采用了这种构架方式
Android系统是运行在Linux内核上的,Android与Linux分别有自己的一套严格的安全及权限机制,很多像我这样的新手,尤其是习惯了windows低安全限制的用户,很容易在这方面弄混淆,下面是我总结的Android系统权限相关的内容,作为这段时间对and roid权限学习的总结,也希望能对大家有所帮助,不正确之处请指出。
首先分清两个概念:要区分apk运行时的拥有的权限与在文件系统上被访问(读写执行)的权限两个概念,apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才使用linux的权限设置。
(一)linux文件系统上的权限-rwxr-x--x system system 4156 2010-04-30 16:13 testapk代表的是相应的用户/用户组及其他人对此文件的访问权限,与此文件运行起来具有的权限完全不相关。比如上面的例子只能说明system用户拥有对此文件的读写执行权限;system组的用户对此文件拥有读、执行权限;其他人对此文件只具有执行权限。而testapk运行起来后可以干哪些事情,跟这个就不相关了。
千万不要看apk文件系统上属于system/system用户及用户组,或者root/root用户及用户组,就认为apk具有system或root权限。
(二)Android的权限规则
(1)Android中的apk必须签名这种签名不是基于权威证书的,不会决定某个应用允不允许安装,而是一种自签名证书。重要的是,android系统有的权限是基于签名的。比如:system等级的权限有专门对应的签名,签名不对,权限也就获取不到。默认生成的APK文件是debug签名的。获取system权限时用到的签名,见:如何使Android应用程序获取系统权限
(2)基于UserID的进程级别的安全机制大家都知道,进程有独立的地址空间,进程与进程间默认是不能互相访问的,是一种很可靠的保护机制。Android通过为每一个安装在设备上的包(apk)分配唯一的linux userID来实现,名称为"app_"加一个数字,比如app_43不同的UserID,运行在不同的进程,所以apk之间默认便不能相互访问。Android提供了如下的一种机制,可以使两个apk打破前面讲的这种壁垒。在AndroidManifestxml中利用sharedUserId属性给不同的package分配相同的userID,通过这样做,两个package可以被当做同一个程序。
系统会分配给两个程序相同的UserID。当然,基于安全考虑,两个package需要有相同的签名,否则没有验证也就没有意义了。(这里补充一点:并不是说分配了同样的UserID,两程序就运行在同一进程, 下面为PS指令摘取的,显然,system、app_2分别对应的两个进程的PID都不同,不知Android到底是怎样实现它的机制的)
(3)默认apk生成的数据对外是不可见的实现方法是:Android会为程序存储的数据分配该程序的UserID。借助于Linux严格的文件系统访问权限,便实现了apk之间不能相互访问似有数据的机制。例:我的应用创建的一个文件,默认权限如下,可以看到只有UserID为app_21的程序才能读写该文件
<1> 使用MODE_WORLD_READABLE and/or MODE_WORLD_WRITEABLE 标记。
(4)AndroidManifestxml中的显式权限声明Android默认应用是没有任何权限去 *** 作其他应用或系统相关特性的,应用在进行某些 *** 作时都需要显式地去申请相应的权限。一般以下动作时都需要申请相应的权限:
在应用安装的时候,package installer会检测该应用请求的权限,根据该应用的签名或者提示用户来分配相应的权限。在程序运行期间是不检测权限的。如果安装时权限获取失败,那执行就会出错,不会提示用户权限不够。大多数情况下,权限不足导致的失败会引发一个 SecurityException, 会在系统log(system log)中有相关记录。
(5)权限继承/UserID继承当我们遇到apk权限不足时,我们有时会考虑写一个linux程序,然后由apk调用它去完成某个它没有权限完成的事情,很遗憾,这种方法是行不通的。前面讲过,android权限是经营在进程层面的,也就是说一个apk应用启动的子进程的权限不可能超越其父进程的权限(即apk的权限),即使单独运行某个应用有权限做某事,但如果它是由一个apk调用的,那权限就会被限制。实际上,android是通过给子进程分配父进程的UserID实现这一机制的。
(三)常见权限不足问题分析首先要知道,普通apk程序是运行在非root、非system层级的,也就是说看要访问的文件的权限时,看的是最后三位。另外,通过system/app安装的apk的权限一般比直接安装或adb install安装的apk的权限要高一些。言归正传,运行一个android应用程序过程中遇到权限不足,一般分为两种情况:
(1)Log中可明显看到权限不足的提示。此种情况一般是AndroidManifestxml中缺少相应的权限设置,好好查找一番权限列表,应该就可解决,是最易处理的情况。有时权限都加上了,但还是报权限不足,是什么情况呢?Android系统有一些API及权限是需要apk具有一定的等级才能运行的。比如 SystemClocksetCurrentTimeMillis()修改系统时间,WRITE_SECURE_SETTINGS权限 好像都是需要有system级的权限才行。也就是说UserID是system
(2)Log里没有报权限不足,而是一些其他Exception的提示,这也有可能是权限不足造成的。比如:我们常会想读/写一个配置文件或其他一些不是自己创建的文件,常会报javaioFileNotFoundException错误。系统认为比较重要的文件一般权限设置的也会比较严格,特别是一些很重要的(配置)文件或目录
dbusconf好像是蓝牙的配置文件,从权限上来看,根本就不可能改动,非bluetooth用户连读的权利都没有。/data目录下存的是所有程序的私有数据,默认情况下android是不允许普通apk访问/data目录下内容的,通过data目录的权限设置可知,其他用户没有读的权限。所以adb普通权限下在data目录下敲ls命令,会得到opendir failed, Permission denied的错误,通过代码filelistfiles()也无法获得data目录下的内容。
若使用的是vivo手机,可参考以下清理内存的方法:
一、清理存储空间的方法
1、进入i管家--空间清理,清理垃圾缓存;
2、进入文件管理中删除不需要的文件(安装包、视频、压缩包等);
3、进入设置--应用与权限/更多设置--应用管理--找到对应的软件--存储--清除缓存;
注:进行删除文件、软件、清除所有数据等 *** 作前,请提前备份好数据,以免丢失重要数据。
清除存储空间对应文件占用数据的方法:
i管家--空间清理--手机存储--箭头--空间分布--双击对应文件名可以放大对应文件占用存储空间--点击右上角查看--查看占用的数据--点击数据类型选择是否删除/底部卸载软件。
注:卸载/删除数据后无法恢复,请谨慎选择, *** 作前建议做好资料备份。
二、清理运行内存的方法:
1、顶部下滑/底部上拉快捷栏一键加速,清理后台应用;
2、呼出多任务切换界面--点击底部的“X”可清理后台应用;
3、进入i管家--应用管理--权限管理--权限--自启动,关闭所有软件的自启动权限;(关闭QQ,微信等软件自启动新消息可能不能及时提醒)
4、打开软件,进入多任务后台界面,若软件有锁定图标,下拉解除锁定。
若有更多疑问,可进入vivo官网--我的--在线客服--下滑底部--在线客服--输入人工客服进入咨询了解。
方法/步骤
1
1
安卓apk程序解析包出现问题的话,可能是由于你下载的apk程序本身就有问题,程序的压缩包可能在下载过程中被损坏了,建议请重新下载一次。
2
2
如果重新下载也解决不了安卓解析包出现问题的话,很大一个可能就是在于你的手机的配置参数不支持这款软件,举个例子吧,如果一款apk程序的系统版本要求在安卓22以上,而你的手机则是安卓21系统,就会出现“解析包时出现问题”这样的解析错误。
3
3
还有一种可能是由于re文件管理设置的缘故,进入re管理器——设置——一键设置——主文件夹选项,有的朋友反映如果将其设置成“sdcard\
”就会出现“解析包出现问题”的错误提示,而如果将其设置“\
”就可以成功安装
微信发送apk的方法:\x0d\在手机含有apk的文件夹中选择mathapk\x0d\->更多->发送->选微信图标->选择你的朋友->分享->已发送\x0d\在你朋友的手机上会收到mathapk1的文件,不能安装。\x0d\你需要做如下处理:\x0d\先找到mathapk1的文件\x0d\第一种手机:文件管理-〉分类浏览-〉安装包-〉mathapk1\x0d\第二种手机:文件管理-〉tencent(腾讯)-〉MicroMsg-〉Dowmload-〉mathapk1\x0d\在把mathapk1重命名`为mathapk\x0d\即可安装\x0d\大漠88
以上就是关于如何修改apk文件全部的内容,包括:如何修改apk文件、智能电视的apk软件与普通apk软件有什么区别(电视apk是什么)、安卓系统开发者权限不足等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)