将apk文件拷贝至sdcard上。
创新互联公司成立与2013年,先为康县等服务建站,康县等地企业,进行企业商务咨询服务。为康县企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
命令顺序如下:
进入Android sdk文件夹/tools目录下
输入adb shell
输入su
输入cd data
输入cd app
这时就可以看到你安装的所有的apk文件。输入cp 空格 对应的apk 空格 /sdcard/
这样就将apk文件拷贝出来了。
将apk文件后缀直接变成rar格式,可以看到熟悉的目录结构了,
其中xml文件打开后都是二进制的,无法查看。
这时就用到了一个android4me的AXMLPrinter2工具。(请自行百度搜索)
输入以下命令,将xml文件解析出来
java -jar AXMLPrinter2.jar showtimes_list.xml
此命令是在命令行中查看此showtimes_list.xml
将showtimes_list.xml生成xml文件,则输入以下命令:
java -jar AXMLPrinter2.jar showtimes_list.xml h.xml
目前进行到这一步,只能看到xml文件的内容,其工程中的java源文件还是看不到,看目录结构下有一个classes.dex文件,我们需要将dex文件变为jar文件。
这里用到了另一个工具dex2jar。(自行搜索下载)
在Windows下解压之后的目录如下图所示:
在命令行中,进入到此目录下:
在Windows下,输入以下命令:
dex2jar.bat c:\classes.dex
运行完之后,在C盘会多一个classes.dex.dex2jar.jar文件,此文件就是我们需要的jar文件。
利用jd-gui,将jar文件反向工程为java代码。(请自行搜索下载)
它分为Windows、Linux、和max三个版本,这里我下载的是Windows版本的。
解压之后,双击运行exe文件,选择classes.dex.dex2jar.jar文件,相应的jar文件中的Java文件就被反向工程显示出来了!
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。2005年8月由Google收购注资。2007年11月,Google与84家硬件制造商、软件开发商及电信营运商组建开放手机联盟共同研发改良Android系统。随后Google以Apache开源许可证的授权方式,发布了Android的源代码。第一部Android智能手机发布于2008年10月。Android逐渐扩展到平板电脑及其他领域上,如电视、数码相机、游戏机等。2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 2013年的第四季度,Android平台手机的全球市场份额已经达到78.1%。 [1] 2013年09月24日谷歌开发的操作系统Android在迎来了5岁生日,全世界采用这款系统的设备数量已经达到10亿台。
Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'ève future)中。他将外表像人的机器起名为Android。
Android的Logo是由Ascender公司设计的,诞生于2010年,其设计灵感源于男女厕所门上的图形符号, [1] 于是布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人便诞生了。其中的文字使用了Ascender公司专门制作的称之为“Droid ” 的字体。Android是一个全身绿色的机器人,绿色也是Android的标志。颜色采用了PMS 376C和RGB中十六进制的#A4C639来绘制,这是Android操作系统的品牌象徵。有时候,它们还会使用纯文字的Logo。
在安卓中打开音乐、视频、图片、文档等文件是需要有读取SD卡权限的,如果是6.0以下的系统,则直接在清单文件中声明SD卡读取权限即可;如果是6.0或以上,则需要动态申请权限。
在7.0以下中打开文件时,通过intent调用系统安装得人软件打开文件就好了,但是在android7.0及以上的机子上这么做会报android.os.FileUriExposedException错误,
1)读取SD卡
2)动态申请权限
//设备API大于6.0时,主动申请权限(读取文件的权限)
public static void requestPermission(Activity context) {
if (Build.VERSION.SDK_INT = Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
}
}
}
3)读取文件
intent = OpenFileUtil.openFile(filePath+"/"+FileName+"."+end);
使用OpenFileUtil这个。链接:
为了兼容Android7.0,获取文件Uri需要使用到FileProvider。
1)首先是AndroidManifest文件里面注册FileProvider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true"
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" / //需要自己编写xml文件
2)provider_paths.xml文件的编写
// .表示根目录
3)打开文档方式为
intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
File txtFile = new File(filePath+"/"+FileName+"."+end);
Uri contentUri = FileProvider.getUriForFile(MyApplication.getContext(), BuildConfig.APPLICATION_ID+".provider", txtFile);
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
grantUriPermission(context, contentUri, intent);
startActivity(intent);
4)grantUriPermission方法添加权限
private static void grantUriPermission (Context context, Uri fileUri, Intent intent) {
List resInfoList = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
for (ResolveInfo resolveInfo : resInfoList) {
String packageName = resolveInfo.activityInfo.packageName;
context.grantUriPermission(packageName, fileUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
}
}
综合两种情况:
//判断是否是AndroidN以及更高的版本,Build.VERSION_CODES.N是Android 7.0
if (Build.VERSION.SDK_INT = Build.VERSION_CODES.N) {
intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
File txtFile = new File(filePath+"/"+FileName+"."+end);
Uri contentUri = FileProvider.getUriForFile(MyApplication.getContext(), BuildConfig.APPLICATION_ID+".provider", txtFile);
Log.i("文件地址:",contentUri.toString());
intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
grantUriPermission(MyApplication.getContext(), contentUri, intent);
} else {
//7.0以下的可以打开文件了
intent = OpenFileUtil.openFile(filePath+"/"+FileName+"."+end);
}
MyApplication.getContext().startActivity(intent);
package命名: 全部使用小写字母。一级包名为com,二级包名为xx(可以是公司或则个人的随便),三级包名根据应用进行命名,四级包名为模块名或层级名。
类的命名:大驼峰的命名法,如:MainActivity
方法的命名:小驼峰的命名法,如:startActivity。
接口的命名: 命名规则与类一样采用大驼峰命名法,多以able或ible结尾。
变量的命名:采用小驼峰命名法。
注意:作用统一的变量,在结尾加一个量词进行区分更容易搜索和记忆,如strNameFirst和strNameLast
常量的命名:常量全部大写,如:MIN MAX
布局文件的命名:布局文件使用“前缀_逻辑名”的方式,单词全部小写:
①activity的布局——activity_xxx
②fragment的布局——fragment_xxx
③自定义控件的布局——view_xxx
④对话框的布局——dialog_xxx
⑤列表项的布局——item_xxx
资源文件的命名:资源文件使用“模块名_逻辑名”方式,单词全部小写:
①按钮以btn为前缀,如果是图片可以是btn_login.png,按钮的点击形态可以是btn_login_normal.xml以及btn_login_pressed.xml
②图片的命名以ic为前缀,例如ic_share.png
③背景图片可以用bg作为前缀。
④shape:shape_text_bg
⑤selector:selector_home
注释的规范:
其他编码规范:除了以上的规范,其他比较重要的注意点,总结如下:
①java中尽量不出现中文
②服务端可以实现的,就不要放在客户端
③引用第三方库要慎重,避免应用大容量的第三方库,导致客户端包非常大
工具/材料
安卓手机
01
我们打开手机拨号键盘输入代码,按拨号键就可使用哦!
*#*#4636#*#*
显示手机信息、电 池信息、电 池记录、使用统计数据、WiFi 信息
*#*#7780#*#*
重设为原厂设定,不会删除预设程 序,及 SD 卡档案。
*2767*3855#
重设为原厂设定,会删除 SD 卡所有档案。
*#*#34971539#*#*
显示相机相机韧体版本,或更新相机韧体
02
WLAN、 GPS 及蓝 牙测试的代码
*#*#232339#*#* 或 *#*#526#*#* 或 *#*#528#*#* – WLAN 测试
*#*#232338#*#* – 显示 WiFi MAC 地址
*#*#1472365#*#* – GPS 测试
*#*#1575#*#* – 其它 GPS 测试
*#*#232331#*#* – 蓝 牙测试
*#*#232337#*# – 显示蓝 牙装置地址
*#*#8255#*#*启动 GTalk 服务监视器
03
显示手机软 件版本的代码
*#*#4986*2650468#*#* – PDA、 Phone、 H/W、 RFCallDate
*#*#1234#*#* – PDA 及 Phone
*#*#1111#*#* – FTA SW 版本
*#*#2222#*#* – FTA HW 版本
*#*#44336#*#* – PDA 、Phone、 CSC、 Build Time、 Changelist number
04
各项硬件测试
*#*#0283#*#* – Packet Loopback
*#*#0*#*#* – LCD 测试
*#*#0673#*#* 或 *#*#0289#*#* – Melody 测试
*#*#0842#*#* – 装置测试,例如振动、亮度
*#*#2663#*#* – 触控屏 幕版本
*#*#2664#*#* – 触控屏 幕测试
*#*#0588#*#* – 接近感应器测试
*#*#3264#*#* – 内 存版本
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款