Android的程序解码与XML文件解码详解

 更新时间:2016年9月20日 19:59  点击:1797
本文章来给大家介绍Android的程序解码与XML文件解码详解,有需要了解的同学可参考参考。

首先,怀着无比激动的心情写下这篇日志.....
Googles真的很给力....让我有幸看到ANDROID应用程序的内部源码....
下面开始言归正传:
ANDROID的应用程序是由两部分组成的.
1.*.class文件
2.*.xml文件  解码时候需要使用到不同的工具...
下面开始介绍*.class(类文件的解码)
需要用到的工具:
dex2jar和JD-GUI
dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI下载地址:
windows版JD-GUI:http://laichao.googlecode.com/files/jdgui.zip
Linux版JD-GUI:http://laichao.googlecode.com/files/jd-gui-0.3.2.linux.i686.tar.gz
 
A:将*.apk文件的后缀修改成*.zip,然后解压,会在文件夹内发现一个叫classes.dex的文件
B:将dex2jar解压后放到C盘根目录,然后将classe.dex放到这个文件夹中来
然后在开始运行中输入CMD,
将路径定位到dex2jar.bat所在的文件夹(dex2jar.bat为dex2jar解压后文件夹内存在的一个*.BAT文件)
然后输入:dex2jar.bat classes.dex
(这里有可能会报错,如果报错好好看一下JAVA的环境变量是什么,配置的对不对)
C:如果一切正常就会解码出来一个*.jar文件
D:用刚才提及到的JD-GUI来解码*.jar文件 (windows环境的直接拖上去可以)
E:很多公司开发出来的源码都是修改了类名,方法名的- -这个比较恶心,也没有什么好办法,只能费点眼神仔细看了....
 
下面是*.xml文件的解码
需要用到的工具:
apktool1.4.1.tar.bz2
apktool-install-windows-r04-brut1.tar.bz2
这两个工具可以在Google官方提供的URL地址:http://code.google.com/p/android-apktool/
上下载
然后解压,
A:两个压缩包内的所有文件都要放在同一个路径下,本人放的还是C盘根目录
B:将需要解码的*.apk文件放到和步骤A中解压的文件相同的路径下(本人放的依旧是C盘根目录)
C:开始--->运行输入CMD,然后定位到C盘,在命令提示框内输入:apktool d C:*.apk  C:***
(*.apk为需要解码的应用程序,***为文件夹名称)
D:解码后就能清晰的看到程序内所有用到的*.XML文件啦...包括布局文件和AndroidManifest.xml文件

安卓手机安装软件提示“您的设备不支持add-on属性”的解决方法,有碰此此类问题的朋友可参考本文章来解决,

园子今天使用安卓手机安装游戏时,遇到了提示“您的设备不支持add-on属性”的情况,出现提示后软件就安装不了了。本文分享下使用安卓手机安装软件时出现“您的设备不支持add-on属性”的解决方法。

在网上搜索一番,发现有不少机友也出现了类似情况。出现这种错误提醒大多是因为安装的软件带有运动追踪器、基站定位等功能的软件,主要原因是因为手机中缺少谷歌的服务造成的。使用安卓手机的机友一般比较喜欢刷机,刷的ROM包很多都去掉了谷歌服务套件,部分软件中所带有的类似运动追踪的功能,缺少谷歌服务是无法运行的。下面的方法就是重新把安装此类软件所必须的谷歌服务文件恢复到手机中来解决的。

安卓手机安装软件提示“您的设备不支持add-on属性”的解决方法

1.首页需要 ROOT 你的手机,不清楚如何 ROOT 请自行搜索相关教程。

2.在本文下方下载运行该类软件所必须的谷歌的套件包,解压后得到三个文件。

3.使用RE管理器,把解压后的三个文件分别复制到相应的目录,如果没有,请新建该目录。三个文件对应的目录如下所示:

 代码如下 复制代码

/system/framework/com.google.android.maps.jar
/system/etc/permission/com.google.android.maps.xml
/data/app_s/NetworkLocation.apk

4.修改三个文件的权限,修改方法为:使用RE管理器,挂载读写权限,在对应文件上长按选择“权限”命令。修改后的权限应为:左边全选,中间最上面选上,右边全空。如下图所示:

安卓手机安装软件提示“您的设备不支持add-on属性”的解决方法

安卓手机安装软件提示“您的设备不支持add-on属性”的解决方法

5.重新启动手机,再次安装该类软件或游戏时,就可以完美安装运行了。

经过以上简单的五步,就完美解决了安卓手机安装软件时提示“您的设备不支持add-on属性”的问题,园子使用的手机型号为中兴U880,其他手机型号请各位自行测试,如遇到问题请留言给我。

ndroid的应用被限制为最多占用16m的内存,至少在T-Mobile G1上是这样的(当然现在已经有几百兆的内存可以用了——译者注)。它包括电话本身占用的和开发者可以使用的两部分。即使你没有占用全部内存的打算,你也应该尽量少的使用内存,以免别的应用在运行的时候关闭你的应用。Android能在内存中保持的应用越多,用户在切换应用的时候就越快。作为我的一项工作,我仔细研究了Android应用的内存泄露问题,大多数情况下它们是由同一个错误引起的,那就是对一个上下文(Context)保持了长时间的引用。

在Android中,上下文(Context)被用作很多操作中,但是大部分是载入和访问资源。这就是所有的widget都会在它们的构造函数中接受一个上下文(Context)参数。在一个合格的Android应用中,你通常能够用到两种上下文(Context):活动(Activity)和应用(Application)。活动(Activity)通常被传递给需要上下文(Context)参数的类或者
方法:

 代码如下 复制代码

@Override

protected void onCreate(Bundle state) {

super.onCreate(state);

TextView label = new TextView(this);

label.setText("Leaks are bad");

setContentView(label);

}


这就意味着那个View有一个对整个活动(Activity)的引用并且对这个活动(Activity)中保持的所有对象有保持了引用;通常它们包括整个View的层次和它的所有资源。因此,如果你“泄露”了上下文(Context)(这里“泄露”的意思是你保持了一个引用并且组织GC收集它),你将造成大量的内存泄露。如果你不够小心的话,“泄露”一整个活动(Activity)是件非常简单的事情。

当屏幕的方向改变时系统会默认的销毁当前的活动(Activity)并且创建一个新的并且保持了它的状态。这样的结果就是Android会从资源中重新载入应用的UI。现在想象一下,你写了一个应用,有一个非常大的位图,并且你并不想在每次旋转时都重新载入。保留它并且每次旋转不重新加载的最简单的办法就是把它保存在一个静态字段上:

 代码如下 复制代码

private static Drawable sBackground;


@Override

protected void onCreate(Bundle state) {

super.onCreate(state);


TextView label = new TextView(this);


label.setText("Leaks are bad");

if (sBackground == null) {


sBackground = getDrawable(R.drawable.large_bitmap);


}

label.setBackgroundDrawable(sBackground);

setContentView(label);

}

这段代码非常快,同时也错的够离谱。它泄露了当第一次屏幕角度改变时创建的第一个活动(Activity)。当一个Drawable被附加到一个View,这个View被设置为drawable的一个回调。在上面的代码片断中,这意味着这个Drawable对TextView有一个引用,同时这个TextView对Activity(Context对象)保持着引用,同时这个Activity对很多对象又有引用(这个多少还要看你的代码了)。

这个例子是造成Context泄露的最简单的一个原因,你可以看一下我们在主屏幕源码(查看unbindDrawables()方法)中是通过在Activity销毁时设置保存过的Drawable的回调为空来解决这个问题的。更为有趣的是,你可以创建一个context泄露的链,当然这非常的糟糕。它们可以让你飞快的用光所有的内存。

有两种简单的方法可以避免与context相关的内存泄露。最明显的一个就是避免在context的自身的范围外使用它。上面的例子展示了在类内部的一个静态的引用和它们对外部类的间接引用是非常危险的。第二个解决方案就是使用Application Context。这个context会伴随你的应用而存在,并且不依赖Activity的的生命周期。如果你计划保持一个需要context的长生命周期的对象,请记得考虑Application对象。你可以非常方便的通过调用Context.getApplicationContext() 或者 Activity.getApplication()获取它。

总之,为了避免涉及到context的内存泄露,请记住如下几点:

1.不要对一个Activity Context保持长生命周期的引用(一个对Activity的引用应该与Activity自身的生命周期相同)
2.尝试使用应用上下文(context-application)代替活动上下文(context-activity)
3.如果你不能控制它们的生命周期,在活动(Activity)中避免使用不是静态的内部类,使用静态类并且使用弱引用到活动(Activity)的内部。对于这个问题的解决方法是使用静态的内部类与一个弱引用(WeakReference)的外部类。就像ViewRoot和它的W内部类那么实现的。
4.垃圾回收器对于内存泄露来说并不是百分百保险的。

在进行Android界面开发的时候,你想给TextView加个边框,找了半天发现没有这个属性,是不是有点蛋疼呢。下面就总结一下有哪些方法能够实现边框效果。

1.嵌套一层,利用内容的margin或者padding的留白加容器的背景来实现边框效果。

其实这个道理很简单,很早的时候那时候我们还用table做html页面布局的时候,我们就是使用cellspacing来实现table的边框的。现在我们也利用同样的想法来实现。

Android下实现边框效果 方案一

Android下实现边框效果 方案一

其中padding产生留白,就形成类似边框的效果。

<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="2px" android:background="#f00">
    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello world!" android:background="#000"></TextView>
</LinearLayout>

当然内部的容器也是需要有颜色的,如果想实现内部透明的效果则需要将内部View的背景色跟背景的颜色保持一致,这是不太方便的地方。

2.使用9-patch(九宫格)的背景图片来实现边框效果。

做一个有边框的9-patch图片,作为要有边框的View的背景图即可。这样你还可以控制哪边有边框,哪边无边框,这种方法是比较好的一种方法,而且没有多余的View嵌套。另外你还可以实现圆角边框等效果。

Android下实现边框效果 方案二

Android下实现边框效果 方案二

如果你还不了解关于9-patch的内容,请移步。你需要做一个有边框的png图片,使用sdk的tools文件夹下的draw9patch.bat工具,你可以轻松生成9-patch图片。工具用起来很简单。左侧和顶部的线用于扩展重复显示的内容,右侧和底部的线用于控制内容显示的位置。在这里我要先感谢国家,我们现在已经可以自由的访问Android开发者站点。

3.利用shape的stroke来实现边框效果。

当然你可以使用shape中的stroke来实现border的效果。

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <stroke android:width="1dp" android:color="#f00" />
</shape>

然后你可以引用这个shape作为背景就可以实现边框效果。关于更多关于shape的内容请移步。

最终的效果展示:

当然还有很多其他的变通方法,比如你也可以添加一个view把宽度设置为1dp,作为边框。这个就需要你在实际开发中变通使用了。

本文章来给大家介绍android 对话框弹出位置和透明度详解,有需要的同学可参考,本文章总结了各种在安卓开发中话框弹透明实现方法,各位同学可参考。


分析

1、调整对话框后面的背景的透明度

2、将对话框头部去掉

3、将对话框自身的圆角白色边框替换为直角5px的白色边框

4、设置对话框内部背景。

 

先来看一个效果

AlertDialog dialog = new AlertDialog.Builder(this).setTitle("title")
.setMessage("message").create();
Window window = alertDialog.getWindow();
window.setGravity(Gravity.TOP); //window.setGravity(Gravity.BOTTOM);
alertDialog.show();


透明的对话框
默认显示的对话框是不透明的,但我们可以通过设置对话框的alpha值将其变成透明或半透明效果。我们都知道。颜色由R(红)、G(绿)、B(蓝)组成。除此之外,还会有一个A(透明度,Alpha)来描述颜色。在颜色的描述中,如果该值为0表示完全透明,如果该值为255,表示不透明。
通过设置Windows的alpha属性也可以设置对话框的透明度。但alpha的取值范围是从0到1.0。如果该属性值为0,表示完全透明,如果该值为1.0,表示不透明(也就是正常显示的对话框)。下面的代码通过将alpha的值设为0.3,为了更清晰地显示透明的对话框和非透明的对话框。在本例中加了一个背景图像,将同时显示了两个对话框(一个是半透明的,另一是不透明的)。


复制代码 代码如下:
// 显示透明的对话框
AlertDialog alertDialog = new AlertDialog.Builder(this).setMessage(
"透明对话框").setPositiveButton("确定", null).create();
Window window = alertDialog.getWindow();
WindowManager.LayoutParams lp = window.getAttributes();
// 设置透明度为0.3
lp.alpha = 0.6f;
window.setAttributes(lp);
alertDialog.show();

 


我们在使用某些应用时会发现当弹出对话框或某些模式窗口时,后面的内容会变得模糊或不清楚。实际上,这些效果也很容易在OPhone中实现。为了实现这个功能,我们只需要设置Wndow对象的两个标志即可,代码如下:

 


去掉白边框

设置style,

    <style name="myDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
<!–        <item name="android:background">@drawable/bg_sel</item>–>
        <item name="android:windowBackground">@drawable/bg_sel</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>

将此style方在构造方法中。

4、设置对话框内部背景,

自定义一个dialog模板视图,里面只有两个linearlayout,所有的View都添加到里面的linearlayout中即可。

如下代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:padding="5px">
    <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:id="@+id/linearLayout" android:background="#90333333"/>
</LinearLayout>

实现由下至上弹出并位于屏幕底部的提示框:

1. button.setOnClickListener(new OnClickListener() {
2.@Override 3.public void onClick(View arg0) { 4. // TODO Auto-generated method stub 5. AlertDialog dialog = new AlertDialog.Builder(TestAndroid1Activity.this) 6. .setTitle("title").setMessage("message").create(); 7. Window window = dialog.getWindow();
8. window.setGravity(Gravity.BOTTOM); //此处可以设置dialog显示的位置 9. window.setWindowAnimations(R.style.mystyle); //添加动画 10. dialog.show();
11.}
12.);
styles.xml

1.<?xml version="1.0" encoding="utf-8"?>
2.<resources>
3.
4. <style name="mystyle" parent="android:Animation"> 5. <item name="@android:windowEnterAnimation">@anim/dialog_enter</item> //进入时的动画 6. <item name="@android:windowExitAnimation">@anim/dialog_exit</item> //退出时的动画 7. </style>
8.</resources>

位于 res/anim/dialog_enter.xml

1.<?xml version="1.0" encoding="utf-8"?>
2.<set xmlns:android="http://schemas.android.com/apk/res/android"> 3.
4. <translate
5. android:fromYDelta="100%p" %p指相对于父容器 6. android:duration="600" 7. />
8.</set>
位于 res/anim/dialog_exit.xml

1.<?xml version="1.0" encoding="utf-8"?>
2.<set xmlns:android="http://schemas.android.com/apk/res/android"> 3.
4. <translate
5. android:toYDelta="100%p" 6. android:duration="600" //持续时间 7. />
8.</set>
此处只是做了垂直位移的效果,自己还可以试试别的效果。

<alpha /> 透明度

<rotate /> 旋转

<scale /> 缩放

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • php无刷新利用iframe实现页面无刷新上传文件(1/2)

    利用form表单的target属性和iframe 一、上传文件的一个php教程方法。 该方法接受一个$file参数,该参数为从客户端获取的$_files变量,返回重新命名后的文件名,如果上传失...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • php批量替换内容或指定目录下所有文件内容

    要替换字符串中的内容我们只要利用php相关函数,如strstr,str_replace,正则表达式了,那么我们要替换目录所有文件的内容就需要先遍历目录再打开文件再利用上面讲的函数替...2016-11-25
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • PHP文件上传一些小收获

    又码了一个周末的代码,这次在做一些关于文件上传的东西。(PHP UPLOAD)小有收获项目是一个BT种子列表,用户有权限上传自己的种子,然后配合BT TRACK服务器把种子的信息写出来...2016-11-25
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20