如何修改apk文件

如何修改apk文件,第1张

如何修改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是什么)、安卓系统开发者权限不足等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10206598.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存