如何反编译状态栏实现状态栏动态变色

如何反编译状态栏实现状态栏动态变色,第1张

注意引入相关依赖:

Java代码

compile 'comandroidsupport:appcompat-v7:2221'

compile 'comandroidsupport:support-v4:2221'

compile 'comandroidsupport:design:2220'

(一)colorsxml 和 stylesxml

首先我们定义几个颜色:

res/values/colorxml

XML/HTML代码

<xml version="10" encoding="utf-8">

<resources>

<color name="primary">#FF03A9F4</color>

<color name="primary_dark">#FF0288D1</color>

<color name="status_bar_color">@color/primary_dark</color>

</resources>

下面定义几个stylesxml

注意文件夹的路径:

values/stylesxml

XML/HTML代码

<resources>

<style name="BaseAppTheme" parent="ThemeAppCompatLightNoActionBar">

<!-- Customize your theme here -->

<item name="colorPrimary">@color/primary</item>

<item name="colorPrimaryDark">@color/primary_dark</item>

<item name="colorAccent">#FF4081</item>

</style>

<!-- Base application theme -->

<style name="AppTheme" parent="@style/BaseAppTheme">

</style>

</resources>

values-v19

XML/HTML代码

<resources>

<style name="AppTheme" parent="@style/BaseAppTheme">

<item name="android:windowTranslucentStatus">true</item>

</style>

</resources>

ok,这个没撒说的。注意我们的主题是基于NoActionBar的,android:windowTranslucentStatus这个属性是v19开始引入的。

(二)布局文件

activity_mainxml

XML/HTML代码

<androidsupportv4widgetDrawerLayout

xmlns:android="http://schemasandroidcom/apk/res/android"

xmlns:app="http://schemasandroidcom/apk/res-auto"

xmlns:tools="http://schemasandroidcom/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

<LinearLayout

android:id="@+id/id_main_content"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<androidsupportv7widgetToolbar

android:id="@+id/id_toolbar"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:background="attr/colorPrimary"

android:fitsSystemWindows="true"

app:popupTheme="@style/ThemeOverlayAppCompatLight"/>

<TextView

android:id="@+id/id_tv_content"

android:layout_width="match_parent"

android:layout_height="0dp"

android:layout_weight="1"

android:gravity="center"

android:text="HelloWorld"

android:textSize="30sp"/>

</LinearLayout>

<androidsupportdesignwidgetNavigationView

android:id="@+id/id_nv_menu"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_gravity="start"

android:fitsSystemWindows="true"

app:headerLayout="@layout/header_just_username"

app:menu="@menu/menu_drawer"

/>

</androidsupportv4widgetDrawerLayout>

DrawerLayout内部一个LinearLayout作为内容区域,一个NavigationView作为菜单。

注意下Toolbar的高度设置为wrap_content。

然后我们的NavigationView中又依赖一个布局文件和一个menu的文件。

header_just_usernamexml

XML/HTML代码

<xml version="10" encoding="utf-8">

<RelativeLayout xmlns:android="http://schemasandroidcom/apk/res/android"

android:layout_width="match_parent"

android:layout_height="192dp"

android:background="attr/colorPrimaryDark"

android:orientation="vertical"

android:padding="16dp"

android:fitsSystemWindows="true"

android:theme="@style/ThemeOverlayAppCompatDark">

<TextView

android:id="@+id/id_link"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_marginBottom="16dp"

android:text="http://blogcsdnnet/lmj623565791"/>

<TextView

android:id="@+id/id_username"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_above="@id/id_link"

android:text="Zhang Hongyang"/>

<ImageView

android:layout_width="72dp"

android:layout_height="72dp"

android:layout_above="@id/id_username"

android:layout_marginBottom="16dp"

android:src="@mipmap/ic_launcher"/>

</RelativeLayout>

menu的文件就不贴了,更加详细的可以去参考Android 自己实现 NavigationView [Design Support Library(1)]。

大体看完布局文件以后,有几个点要特别注意:

• ToolBar高度设置为wrap_content

• ToolBar添加属性android:fitsSystemWindows="true"

• header_just_usernamexml的跟布局RelativeLayout,添加属性android:fitsSystemWindows="true"

android:fitsSystemWindows这个属性,主要是通过调整当前设置这个属性的view的padding去为我们的status_bar留下空间。

根据上面的解释,如果你不写,那么状态栏和Toolbar就会有挤一块的感觉了,类似会这样:

ok,最后看下代码。

(三)Activity的代码

Java代码

package comzhycolorfulstatusbar;

import androidosBundle;

import androidsupportv7appAppCompatActivity;

import androidsupportv7widgetToolbar;

public class MainActivity extends AppCompatActivity

{

@Override

protected void onCreate(Bundle savedInstanceState)

{

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_main);

Toolbar toolbar = (Toolbar) findViewById(Ridid_toolbar);

setSupportActionBar(toolbar);

//StatusBarCompatcompat(this, getResources()getColor(Rcolorstatus_bar_color));

//StatusBarCompatcompat(this);

}

}

没撒说的,就是setSupportActionBar。

那么现在44的效果图是:

其实还不错,有个渐变的效果。

现在5x的效果:

可以看到5x默认并非是一个渐变的效果,类似是一个深一点的颜色。

再看看我们md的规范

状态栏应该是一个比Toolbar背景色,稍微深一点的颜色。

这么看来,我们还是有必要去为44做点适配工作,让其竟可能和5x显示效果一致,或者说尽可能符合md的规范。

四、调整44的显示方案

那么问题来了?如何做呢?

咱们这么看,44之后加入windowTranslucentStatus的属性之后,也就是我们可以用到状态栏的区域了。

既然我们可以用到这块区域,那么我们只要在根布局去设置一个与状态栏等高的View,设置背景色为我们期望的颜色就可以了。

于是有了以下的代码:

Java代码

package comzhycolorfulstatusbar;

import androidannotationTargetApi;

import androidappActivity;

import androidcontentContext;

import androidgraphicsColor;

import androidosBuild;

import androidviewView;

import androidviewViewGroup;

/

Created by zhy on 15/9/21

/

public class StatusBarCompat

{

private static final int INVALID_VAL = -1;

private static final int COLOR_DEFAULT = ColorparseColor("#20000000");

@TargetApi(BuildVERSION_CODESLOLLIPOP)

public static void compat(Activity activity, int statusColor)

{

if (BuildVERSIONSDK_INT >= BuildVERSION_CODESLOLLIPOP)

{

if (statusColor != INVALID_VAL)

{

activitygetWindow()setStatusBarColor(statusColor);

}

return;

}

if (BuildVERSIONSDK_INT >= BuildVERSION_CODESKITKAT && BuildVERSIONSDK_INT < BuildVERSION_CODESLOLLIPOP)

{

int color = COLOR_DEFAULT;

ViewGroup contentView = (ViewGroup) activityfindViewById(androidRidcontent);

if (statusColor != INVALID_VAL)

{

color = statusColor;

}

View statusBarView = new View(activity);

ViewGroupLayoutParams lp = new ViewGroupLayoutParams(ViewGroupLayoutParamsMATCH_PARENT,

getStatusBarHeight(activity));

statusBarViewsetBackgroundColor(color);

contentViewaddView(statusBarView, lp);

}

}

public static void compat(Activity activity)

{

compat(activity, INVALID_VAL);

}

public static int getStatusBarHeight(Context context)

{

int result = 0;

int resourceId = contextgetResources()getIdentifier("status_bar_height", "dimen", "android");

if (resourceId > 0)

{

result = contextgetResources()getDimensionPixelSize(resourceId);

}

return result;

}

}

代码的思路很简单,根据Activity找到androidRcontent,在其中添加一个View(高度为statusbarHeight,背景色为我们设置的颜色,默认为半透明的黑色)。

那么只需要在Activity里面去写上:

Java代码

StatusBarCompatcompat(this);

就可以了。

如果你希望自己设置状态看颜色,那么就用这个方法:

Java代码

StatusBarCompatcompat(this, getResources()getColor(Rcolorstatus_bar_color));

这样的话我们就解决了44到5x的适配问题,一行代码解决,感觉还是不错的。

最后提一下,对于50由于提供了setStatusBarColor去设置状态栏颜色,但是这个方法不能在主题中设置windowTranslucentStatus属性。所以,可以编写一个value-v21文件夹,里面stylesxml写入:

XML/HTML代码

<resources>

<!-- Base application theme -->

<style name="AppTheme" parent="@style/BaseAppTheme">

</style>

</resources>

其实就是不要有windowTranslucentStatus属性。

接下来,对于默认的效果就不测试了,参考上面的效果图。

我们测试个设置状态栏颜色的,我们这里设置个红色。

44 模拟器

5x 真机

resources是APK中的资源文件,例如布局等等,android 反编译的方法,需要用到几个工具,百度一下都能找到下载地址

dex2jar JD-GUI apktool

反编译步骤:

1反编译Apk得到Java源代码

首先要下载两个工具:dex2jar和JD-GUI

前者是将apk中的classesdex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。

具体步骤:

1首先将apk文件,将后缀改为zip,解压,得到其中的classesdex,它就是java文件编译再通过dx工具打包而成的;

2解压下载的dex2jar,将classesdex复制到dex2jarbat所在目录。在命令行下定位到dex2jarbat所在目录

运行 dex2jarbat classesdex

生成 classesdexdex2jarjar

2反编译apk生成程序的源代码和、XML配置、语言资源等文件

还是下载工具,这次用到的是apktool

具体步骤:

将下载的两个包解压到同一个文件夹下,应该会有三个文件:aaptexe,apktoolbat,apktooljar

1解压缩下载的两个文件包,apktool-install-windows-r04-brut1tar解压缩后得到的包里有aaptexe 和apktoolbat(注意要把apktool141tar解压后的一个jar 文件copy到解压后的\apktool-install-windows-r04-brut1文件夹里)

2特别注意:你要反编译的文件一定要放在C盘的根目录里

  安卓android50刷机包安装使用教程

  1、刷机前先在下载一个Nexus驱动到电脑上,如果已经有的请忽略这一步。

  2、备份手机(非常重要)。

  3、在谷歌开发者网站上下载Nexus4最新Android50固件,下载完成后解压tgr的文件。

  4、解压出来的tgr文件包仅仅是程序框架,里面没有包含adb (Android调试工具)和基带文件,需要我们单独放进去,下载之后解压缩把四个文件和之前的tgr包放在一起;

  5、Nexus4关机,同时按住音量键再按开机,手机会进入bootloader模式,用手机连接上电脑。

  6、打开tgr压缩包,点击flash-allbat文件,Andriod50正在刷机中,手机会自动重启表示刷机完成。

  如果手机重启后刷机不成功解决方式

  1、长按电源键关机。

  2、同时按住音量键,在开机。进入boorloader模式,选择recovery mode,点击电源键进入。

  3、再长按电源键,屏幕上的英文看不懂的可忽略。

  4、进入wipe data-yes,选择wipe cache,选择reboot。

  5、关机重启,Android50刷机完毕。

1安卓系统如何修改版本

手机必须root,并装有re管理器。如图为某手机系统信息。

用re管理器进入系统更目录,打开(system)文件夹,找到build,prop文件,复制到内存卡。

复制后,用文本编辑器打开。找到robuildversionrelease=。词后面的即为系统版本号。把它改成自己想要的即可。但是,绝对不可以改成5XX或以上,否则手机将会坏掉。

步骤阅读

4

改好保存之后,将原来的文件备份一下,(出现问题后可以换回来),把修改之后的文件复制到原来的地方。并修改权限。如图。

5

此方法并不一定有用,但改成高版本号后,可以装装逼

2怎么把被改了的手机型号改回来

改回型号(要root)

1打开RE管理器 (ROOT文件管理,可以下载得到(再次声明要root))

2单击打开“system”文件夹

3将状态挂载为“读/写”

4长按“buildprop”文件,弹出菜单,选择“用文本编辑器打开

5按需要修改下列条目,前半段是代码(不可修改代码!),等号后面是要显示的项:

①型号(手机机型):

roproductmodel=

例:roproductmodel=HUAWEI U8661

②Android 版本

robuildversionrelease=

例:

robuildversionrelease=236专属版

③版本号

appssettingproductrelease=

例:

appssettingproductrelease=U8661V101B01

6按下“MENU”键,选择“保存并退出”

7 重启

3手机被修改Android版本,root不了,该怎么改回来

1、如果说你只是简单的使用安卓手机,因为这一部分人基本上用不到ROOT 之后的任何功能。

ROOT 过之后,反而容易感染病毒,没ROOT 的手机虽然也容易感染病毒,但是它破坏不了你的系统。 2、如果你对刷机不了解,就不要进行ROOT。

因为目前用安卓系统这么久。发现ROOT唯一的好处不过就是刷个新的基带或者系统。

尝尝鲜、就这样。刷机本身是有风险的,对刷机不了解还盲目ROOT了乱刷把手机变砖了哭都没地方去。

4、最后一点,必须得相当注意!因为你的手机如果ROOT了,厂家就不再保修了。因为你已经对自己手机的根本系统擅自做了更改、所以,当你ROOT成功那一瞬间。

手机就真正完全是你的了。

4安卓怎么在原来的系统上更换一个版本

在一部安卓手机系统为235并且已经ROOT的手机里,我们需要用到RE文件管理器来实现修改关于手机里面的部分信息。下面我们来修改手机型号和系统版本。

手机ROOT后下载RE文件管理器,并且点击RE管理器在根目录下挂载为读写模式,然后点击根目录下的SYSTM文件,点开之后找到BUILDPROP这个文件,然后长按不松选择用文本编辑器打开,我们要修改的部分有四处:

1、RO PRODUCTBRAND------手机品牌

2、RO PRODUCTBRAND MODEL---型号

3、RO PRODUCTBRAND MANUFACTURER----制造厂商

4 RO BUILD VERSION RELEASE---安卓版本信息

以上都可以改成自己想显示的信息,当然如若影响到手机性能直接还原就行。

修改完成后点击保存并退出,关机重启!

5怎么更改安卓游戏版本号

该版本需要反编译 反编译以后 里边有个AndroidManifestxml文件

把这个文件的

android:versionCode="1"

android:versionName="10"

这两个值改一下就好了 上边那个 加1 下边那个 改成你想要的版本号

例如:

android:versionCode="2"

android:versionName="21"

这样版本就由原来的10变成了21

本视频演示机型:戴尔-成就5890,适用系统:windows10家庭版,软件版本:djjavadecompilerv3121298;

class格式的文件目前在安卓手机上是无法打开的,需要打开class文件时,可以在电脑中安装java反编译工具,将下载的反编译工具解压到电脑桌面,打开解压文件所在的文件夹,运行这个名为DJ的应用程序;

在弹出的窗口中点击File,在打开的菜单中选择Open;

选择Class文件所在路径后选择要打开的文件,点击右下角的打开,即可在电脑中打开class文件;

本期视频就到这里,感谢观看。

  以前写的程序都主要是针对android23和android4x平台的,最近想从源码的角度看一下50都增添了哪些新的特性,那么必须要有源码了。怎么下载源码,谷歌官方给出了详细的介绍 。想搞懂源码的话不推荐windows操作系统,这里推荐一款集成android开发以及各种反编译工具的linux操作系统-Santoku各种IDE, 环境等都随系统配置好了,开发人员只需要关注自己想做的事情就行了。为了看最新的android源码:

  1更新java到java 7:

  $ sudo apt-get update

  $ sudo apt-get install openjdk-7-jdk

  2设置默认的java版本(系统中可能有多个版本的jdk):

  $ sudo update-alternatives --config java

  $ sudo update-alternatives --config javac

  3针对santoku或者Ubuntu 1204的系统,需要安装以下的package(其他版本系统详情见http://sourceandroidcom/source/initializinghtml):

  $ sudo apt-get install git gnupg flex bison gperf build-essential \

  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \

  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \

  libgl1-mesa-dev g++-multilib mingw32 tofrodos \

  python-markdown libxml2-utils xsltproc zlib1g-dev:i386

  $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGLso1 /usr/lib/i386-linux-gnu/libGLso

  4安装repo

  41新建保存repo文件的目录

  $ mkdir ~/bin

  $ PATH=~/bin:$PATH

  42下载repo文件,并添加可执行权限

  $ curl https://storagegoogleapiscom/git-repo-downloads/repo > ~/bin/repo

  $ chmod a+x ~/bin/repo

  5初始化repo

  51新建repo工作目录

  $ mkdir WORKING_DIRECTORY

  $ cd WORKING_DIRECTORY

  52初始化工作目录,下载最新的android-502_r1分支

  repo init -u https://androidgooglesourcecom/platform/manifest -b android-502_r1

  

  53开始下载源码(需要git config 用户名和email地址,填写自己常用的即可)

  $ repo sync

欢迎分享,转载请注明来源:品搜搜测评网

原文地址:https://pinsoso.cn/shuma/1343613.html

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

随机推荐

  • 妮维雅润唇膏好不好,妮维雅唇膏孕妇能用吗

    由于唇部的角质层比较薄,在秋冬季节时期,大家的嘴唇容易出现干裂脱皮的现象。在唇部护理这一方面,大部分的消费者会采用润唇膏来解决嘴唇干裂脱皮的问题,其中就包括了不少在孕期的准妈妈。但由于孕期是特殊时期,无论是在吃的还是用的方面都需要注

    2024-04-15
    40300
  • 雅思兰黛小棕瓶精华液怎么使用

    雅斯兰黛小棕瓶精华也是精华露的一种,可以把它当作精华露使用。如何利用自身的手指呢?双手的按摩加上双手的温度让精华更好的吸收到皮肤中去,使用过后的皮肤摸起来软软的,一点都不油。同时雅斯兰黛小棕瓶精华具有良好的抗氧化性,使皮肤更好的吸收水分,因

    2024-04-15
    41200
  • 有哪些成套的护肤品可以美白又抗皱的?

    成套的产品需要美白又抗皱,这里推荐几款口碑产品吧。1 whoo 后 雪玉凝水乳礼盒whoo的美白水乳套盒,主打的就是滋润和美白,而且有不错的抗皱的作用。如果是暗黄肌肤需要滋润的肌肤,那么这款很合适,用在脸上感觉滑滑的有滋润

    2024-04-15
    32600
  • 云联惠投资的钱能要回来吗

    事件过去一年多了,现在没有一个成功退款的,佛山这边更是报案也不会受理,有代理下线几十人,也没捉人,而和云联惠合作的湖南伊思多尔公司也是冻结中,很多代理分公司都关闭了,购车钱交了没出单的有很多,光福建泉州群就有好几百人没出单的,全国加起来有多

    2024-04-15
    27500
  • 面膜代加工厂家

    1、济南博利医药生物工程有限公司主营产品:面膜,面膜加工,壳聚糖面膜代加工,械字号面膜加工,玻尿酸原液,霜膏,乳液等。地址:济南市历下区明湖路2号东湖大厦东座702室。成立时间:1998-07-15。2、广州寿龛生物科技有限公司主营产品:膏

    2024-04-15
    36800
  • vpo一次性电子烟能抽多少天

    2天左右。一次性的可分为200口、300口和500口的,一般一支一次性电子烟能用两天三天,500口的,根据你吸食的情况来定了。像二三代电子烟,一般电池能用一年以上了,而雾化器一般是1-3个月(雾化器是可更换的)。因为这个都取决于吸电子烟的频

    2024-04-15
    26400
  • 性价比最高的面霜有哪些?

    现代女孩子越来越注重护肤这件事情,女为悦己者容,除了化妆打扮之外,肌肤本身的状态也是十分重要的。女孩子想要看起来面色红润,肌肤光滑有弹性,是显气色显年轻的关键。护肤品的涂抹分数个步骤,而早晚的步骤也不是完全一样的。面霜则是护肤期间非常重要的

    2024-04-15
    33000

发表评论

登录后才能评论
保存