「Maven」- 概念术语:仓库(Repository)

通过 Maven 管理,项目的所有依赖都将从仓库中获取,而无需在各个项目中单独保存;
仓库结构
Maven2 Repository Layout
Maven – Maven2 Repository Layout

Repository root
`– ${groupId as directory}/
|– maven-metadata.xml
|– .${checksums}
`– ${artifactId}/
|– maven-metadata.xml
|– .${checksums}
`– ${version}/
|– ${artifactId}-${version}.pom
|– .asc
|– .${checksums}
|– ${artifactId}-${version}.${extension}
|– .asc
|– .${checksums}
|– ${artifactId}-${version}-${classifier}.${extension}
|– .asc
`– .${checksums}

仓库类型
本地仓库:$HOME/.m2/repository/ 远程仓库:提供 Maven 构建的仓库; 中央仓库:Maven 官方仓库,https://repo.maven.org/maven2/%EF%BC%9B%E5%85%B6%E4%B9%9F%E5%B1%9E%E4%BA%8E%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%EF%BC%9B 私服仓库:自行搭建的的 Maven 仓库,用于组织内部使用。其也属于远程仓库;
远程仓库
添加远程仓库:

<project>

<re[……]

READ MORE

「Maven」- 概念术语:Lifecycle,Phase,Goal

Lifecycle
Maven 的生命周期就是为了对所有的构建过程进行抽象和统一。Maven 从大量项目和构 建工具中学习和反思,然后总结了一套高度完善的、易扩展的生命周期。这个生命周期包 含了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎 所有构建步骤。也就是说,几乎所有项目的构建,都能映射到这样一个生命周期上。
Maven 的生命周期是抽象的,这意味着生命周期本身不做任何实际的工作,在 Maven 的设计中,实际的任务 〈如编译源代码) 都交由插件来完成。这种思想与设计模式中的模 板方法 〈Template Method) 非常相似。模板方法模式在父类中定义算法的整体结构,子类 可以通过实现或者重写父类的方法来控制实际的行为,这样既保证了算法有足够的可扩展 性,又能够严格控制算法的整体结构。如下的模板方法抽象类能够很好地体现 Maven 生命 周期的概念。
Maven 拥有三套相互独 立的生命周期,它们分别为: 1)clean 生命周期的目的是清理项目, 2)default 生命周期的目的是构建项目, 3)而 site 生命周期的目的是建立项目站点。
Phase
每个生命周期包含一些阶段 (phase) ,这些阶段是有顺序的,并且后面的阶段依赖于 前面的阶段,用户和 Maven 最直接的交互方式就是调用这些生命周期阶段。
较之于生命周期阶段的前后依赖关系,三套生命周期本身是相互独立的,用户可以仅 仅调用 clean 生命周期的某个阶段,或者仅仅调用 default 生命周期的某个阶段,而不会对其 他生命周期产生任何影响,例如,当用户调用 clean 生命周期的 clean 阶段的时候,不会抽 发 default 生命周期的任何阶段,反之亦然,当用户调用 default 生命周期的 compile 阶段的时 翁,也不会触发 clean 生命周期的任何阶段
clean
以 clean 生命周 期为例,它包含的阶段有 pre-clean 、clean、post-clean。 当用户调用 pre-clean 的时候,只有 pre-clean 阶段得以执行; 当用户调用 clean 的时候,pre-clean 和 clean 阶段会得以顺序执行; 当用户调用 post-cjlean 的时候,pre-clean 、clean 和 post-clean 会得以顺序执行。
site
site 生命周期的目的是建立和发布项目站点,Maven 能够基于 POM 所包含的信息,自 动生成一个友好的站点,方便团队交流和发布项目信息。
该生命周期包含如下阶段: pre-site 执行一些在生成项目站点之前需要完成的工作。 site 生成项目站点文档。 post-site 执行[……]

READ MORE

「MAVEN」- 安装、升级

第一步、准备工作
安装 Java 环境
略……
关于 JAVA_HOME 变量
在通常情况下,安装 JDK 即可,无需单独的设置 JAVA_HOME 变量(除非有需要)。因为在 mvn 脚本中,将会自动确定 JAVA_HOME 变量值。
第二步、安装服务
Maven 3.5.2 on CentOS 7.4
# 07/30/2019

# 默认的版本是Maven 3.0.5
yum install -y maven

关于最新版本
如果要使用最新版本的 MAVEN 工具,需要下载官方的包,没有可以直接使用的 RPM 包。
还有种做法是使用 Fedora 的源(不推荐,但是安装这个包问题不大):

wget -O /etc/yum.repos.d/epel-apache-maven.repo \
http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo
yum install apache-maven

用发行版自带的版本就好了,不一定非要使用最新的版本。有时候回头想想:为什么发行版里的是旧版本?为什么要用最新的版本?最新的版本给我们带来了什么?最新的版本解决了什么问题?而实际的大多数时候,我们的想法只不过是:新版本功能多,性能提升,问题少。可是,我们真的遇到了只有通过升级版本才能解决的问题了么? 这哪是人说的话:-)
安装目录的结构
bin boot conf lib LICENSE.txt NOTICE.txt README.txt
~/.m2
IDE Integration
参考 Maven – Apache Maven IDE Integration 文档,以获取在 IDE 中集成 Maven 的方法,以及常见问题的解决办法;
m2eclipse for Eclipse
注意事项: 1)部分 IDE 默认会集成 Maven,而非使用我们在系统中安装的 Maven 环境(在排查问题时需要注意);
参考文献
How do I install Maven with Yum? How to Install Maven on CentOS 7 How to Install Apache Maven on CentOS 7 How to Install Apache Maven on Debian 10 | Linuxize[……]

READ MORE

「MAVEN」- 仓库及设置

在 pom.xml 中,添加多个仓库
Setting up Multiple Repositories
其实并不复杂,下面是我们复制过来的:

<project>
<!– … –>
<repositories>
<repository>
<id>my-repo1</id>
<name>your custom repo</name>
<url>http://jarsm2.dyndns.dk</url>
</repository>
<repository>
<id>my-repo2</id>
<name>your custom repo</name>
<url>http://jarsm2.dyndns.dk</url>
</repository>
</repositories>
<!– … –>
</project>

附加说明: 还以在「Super POM」中定义,也能够在${user.home}/.m2/settings.xml中定义; 这里不再展开,可以参考「Setting up Multiple Repositories」手册;
常用仓库
# 官方仓库 https://mvnrepository.com/
# 阿里云镜像 http://maven.aliyun.com/nexus/content/repositories/snapshots/ (不支持浏览) https://maven.aliyun.com/mvn/view (仅用作浏览)
# 私有仓库 – 如果你使用 Nexus 搭建了私有仓库,在「Repository Path」列显示的是地址;
HTTP Proxy
参考 Maven – Guide to using proxies 文档,以获取配置代理的方法;
配置文件位置
Apache/Maven/Settings Reference
The Maven install: ${maven.home}/conf/settings.xml A user’s install: ${user.home}/.m2/settings.xml
# 打包时跳过指定项目
「How do I exclude certain modules from a Maven bui[……]

READ MORE

「Testing Framework」- 测试框架

Check – Unit Testing Framework for C
Check | Unit testing framework for C
DejaGnu – GNU Test Framework
DejaGnu – GNU Test Framework

章节列表
「DejaGNU」 「Check」 「JUnit」- Java 单元测试框架[……]

READ MORE

「Check」

[……]

READ MORE

「DejaGNU」

参考文献
Homepage: https://www.gnu.org/software/dejagnu/[……]

READ MORE

「JUnit」- Java 单元测试框架

在 Junit 3 中,约定测试用例的方法都以 test 开头。在 JUnit 4 中,该命名约定得以延续;
in Maven

<project>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope> // 表示该依赖仅对 test 有效,如果在其他目录引用 JUnit,将产生错误;
</dependency>
</dependencies>

</project>[……]

READ MORE

「Android」- 概念术语

FastBoot
一个协议。用于在设备处于bootloader模式时,可以通过USB数据连接,将命令从PC发送到Android设备的协议。 fastboot通常用于手动安装firmware或安装自定义的recovery。
参考文献
A Glossary of Terms You Should Know[……]

READ MORE

「API_LEVEL」

SDK VERSION CODE
Android 4.4 19 KITKAT 特点 Android 4.3 18 JELLY_BEAN_MR2 特点 Android 4.2, 4.2.2 17 JELLY_BEAN_MR1 特点 Android 4.1, 4.1.1 16 JELLY_BEAN 特点 Android 4.0.3, 4.0.4 15 ICE_CREAM_SANDWICH_MR1 特点 Android 4.0 – 4.0.2 14 ICE_CREAM_SANDWICH Android 4.0 14 ICE_CREAM_SANDWICH Platform Highlights Android 3.2 13 HONEYCOMB_MR2 Android 3.1.x 12 HONEYCOMB_MR1 Platform Highlights Android 3.0.x 11 HONEYCOMB Platform Highlights Android 2.3.4 Android 2.3.3 10 GINGERBREAD_MR1 Platform Highlights Android 2.3.2 Android 2.3.1 Android 2.3 9 GINGERBREAD Android 2.2.x 8 FROYO Platform Highlights Android 2.1.x 7 ECLAIR_MR1 Platform Highlights Android 2.0.1 6 ECLAIR_0_1 Android 2.0 5 ECLAIR[……]

READ MORE

「下载系统源码」

方法一、使用已打包的源码包
下载已经打包的源码包,24G吧,然后基于源码包更新即可:

#!/bin/sh

# 下载初始化包
wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar

#解压
tar -xf aosp-latest.tar

# 解压得到的 AOSP 工程目录
cd AOSP

# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录

方法二、直接从获取源码树
从清华镜像站下载源码 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP
下载 repo 工具 所有的源码的获取、更新,都是基于该命令工具的; https://storage.googleapis.com/git-repo-downloads/repo 保存为 repo 文件
创建保存源码的目录

#!/bin/sh

mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY

初始化仓库

#!/bin/sh

repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
# 如果需要某个特定的 Android 版本(列表):
# repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1

# 如果提示无法连接到 gerrit.googlesource.com,可以编辑 repo,把 REPO_URL 一行替换成下面的:
# REPO_URL = ‘https://gerrit-google.tuna.tsinghua.edu.cn/git-repo’

# 查看所有的分支:https://stackoverflow.com/questions/26127319/git-repo-how-to-list-all-branches-in-one-google-repo
# git –git-dir .repo/manifests.git/ branch -a

同步源码树(以后只需执行这条命令来同步):

#!/bin/sh

repo syncwo25826

修改镜像站的地址
比如之前是从 android.googlesource.com 获取的,想换别的,需要修改两个地方:
(1)、.repo/manifest.xml ,把 name=”[……]

READ MORE

「SDK」

adb 依赖32位库

./adb: No such file or directory
# apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0

./adb: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
# apt-get install lib32stdc++6

64bit的系统,Android sdk只有32bit的程序,需要安装ia32-libs,才能使用。
解决方法:

sudo apt-get install libc6:i386 libgcc1:i386 gcc-4.6-base:i386 libstdc++5:i386 libstdc++6:i386
sudo apt-get install libqt4-opengl
sudo apt-get install libglu1-mesa
sudo apt-get ia32-libs-multiarch
sudo apt-get install ia32-libs

SDK64位的运行需要32位的库文件;
本机为Centos: 1./lib/ld-linux.so.2: bad ELF interpreter: No such file or directory,这个错误是因为在64系统里执行了32位程序,安装下glibc即可解决.
通过sudo yum whatprovides ld-linux.so.2 命令找到包含ld-linux.so.2的包(glibc-2.12-1.107.el6.i686),然后 sudo yum install glibc-2.12-1.107.el6.i686
2.error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory.
通过sudo yum whatprovides libz.so.1 命令找到包含libz.so.1的包(zlib-1.2.3-29.el6.i686),然后 sudo yum install zlib-1.2.3-29.el6.i686
3.error while loading shared libraries: ibstdc++.so.6: cannot open sh[……]

READ MORE

「SDK Platform Tools」

SDK Platform Tools,SDK 平台工具;
SDK Platform Tools 是 Android SDK 的一部分,通常是 Android SDK 目录下的 platform-tools 目录。它包含了一些与 Android 平台交互的工具,如 adb、fastboot、systrace。这些工具是 Android 应用程序开发所必需的。 如果要解锁 bootloder 并刷入新的系统映像,需要它们;
尽管这些工具中的一些新功能仅适用于最新版本的 Android,但这些工具是向后兼容的,因此只需要一个版本的 SDK Platform Tools,不需要下载很多版本的;
下载 & 安装
可以到SDK Platform Tools Release Notes页面下载 SDK Platform Tools;
包含的命令
这里的版本为 25.0.0
adb,Android Debug Bridge (adb)
dmtracedump
e2fsdroid
etc1tool
fastboot – Android flashing and booting utility Andriod 的 flashing 和 booting 工具; 而 FastBoot 是一个协议;
hprof-conv
make_f2fs
mke2fs
mke2fs.conf
sload_f2fs
sqlite3
参考文献
SDK Platform Tools Release Notes: https://developer.android.com/studio/releases/platform-tools.html[……]

READ MORE

「z.Miscellanies」

Anbox
https://anbox.io/ https://github.com/anbox/anbox

章节列表
「Android」- 手机工具箱 「Web」 「使用adb命令,通过Wi-Fi连接Android手机」 「Android」- Emulator 「Android」- Special Characters 「KeyCodeLsit」 「PUSH」[……]

READ MORE

「使用adb命令,通过Wi-Fi连接Android手机」

通常我们在Android调试时,可以USB连接PC和Android机,并使用adb -s <device id>的方式来操作手机。
但是,adb还支持tcpip连接模式。所谓的原理就是:手机端开启一个服务进程,监听某个端口号;然后在PC端使用adb命令连接这个端口。
第一步、开启手机端服务
首先需要将Android机通过USB接入PC,然后执行:

#!/bin/bash

# 查看设备
adb devices

# 开启服务,5556为监听的端口号
adb -s <device id> tcpip 5556

第二步、使用adb命令连接手机
到「设置」-「网络」中查看手机的IP地址,连接时会用到。
现在,可以断开USB线,然后执行:

#!/bin/bash

adb connect <IP Address>:5556

如果关闭Wi-Fi连接

#!/bin/bash

# 执行该命令,关闭tcpip连接模式,恢复到USB连接模式。
adb -s 192.168.3.6:5556 usb

参考文献
How can I connect to Android with ADB over TCP ? Android Debug Bridge (adb) Wireless Debugging Over Wi-Fi[……]

READ MORE

「Android」- Emulator

[……]

READ MORE

「Android」- 手机工具箱

Android-Terminal-Emulator – 终端模拟器
GitHub – Android-Terminal-Emulator See Building for build instructions.
ConnectBot – 运行在 Android 中的 SSH 客户端
ConnectBot – Wikipedia connectbot/connectbot: ConnectBot is the first SSH client for Android.
DroidWall – 防火墙
rodrigozr/droidwall: Automatically exported from code.google.com/p/droidwall Google Code Archive – Long-term storage for Google Code Project Hosting.
VirusTotal – 恶意软件检测(在线工具)
VirusTotal VirusTotal Mobile – Apps on Google Play
Andrototal – 恶意软件检测(在线工具)
http://andrototal.org/
SandDroid – 恶意软件检测(在线工具)
http://sanddroid.xjtu.edu.cn/
参考文献
Top 7 Online Android APK Malware analyzers – FREE – Yeah Hub 11 Mobile App Scanner to Find Security Vulnerabilities – Geekflare[……]

READ MORE

「Andriod」- 生成 APK 流程

APK ZIP class.dex
1)打包资源文件,生成 R 文件; 2)aidl 文件处理,生成 Java 文件; 3)使用 javac 生成 class 文件; 4)转换 class 文件,生成 class.dex 文件 5)打包 APK 文件 6)APK 签名 7)在完成 APK 签名后,对齐处理,zipalign[……]

READ MORE

「KeyCodeLsit」

KEYCODE列表 电话键 键名 描述 键值

KEYCODE_CALL 拨号键5
KEYCODE_ENDCALL 挂机键6
KEYCODE_HOME 按键Home3
KEYCODE_MENU 菜单键82
KEYCODE_BACK 返回键4
KEYCODE_SEARCH 搜索键84
KEYCODE_CAMERA 拍照键27
KEYCODE_FOCUS 拍照对焦键80
KEYCODE_POWER 电源键26
KEYCODE_NOTIFICATION 通知键83
KEYCODE_MUTE 话筒静音键91
KEYCODE_VOLUME_MUTE 扬声器静音键164
KEYCODE_VOLUME_UP 音量增加键24
KEYCODE_VOLUME_DOWN 音量减小键25

控制键 键名 描述 键值

KEYCODE_ENTER 回车键66
KEYCODE_ESCAPE ESC键111
KEYCODE_DPAD_CENTER 导航键 确定键23
KEYCODE_DPAD_UP 导航键 向上19
KEYCODE_DPAD_DOWN 导航键 向下20
KEYCODE_DPAD_LEFT 导航键 向左21
KEYCODE_DPAD_RIGHT 导航键 向右22
KEYCODE_MOVE_HOME 光标移动到开始键122
KEYCODE_MOVE_END 光标移动到末尾键123
KEYCODE_PAGE_UP 向上翻页键92
KEYCODE_PAGE_DOWN 向下翻页键93
KEYCODE_DEL 退格键67
KEYCODE_FORWARD_DEL 删除键112
KEYCODE_INSERT 插入键124
KEYCODE_TAB Tab键61
KEYCODE_NUM_LOCK 小键盘锁143
KEYCODE_CAPS_LOCK 大写锁定键115
KEYCODE_BREAK Break/Pause键121
KEYCODE_SCROLL_LOCK 滚动锁定键116
KEYCODE_ZOOM_IN 放大键168
KEYCODE_ZOOM_OUT 缩小键169

组合键 键名 描述

KEYCODE_ALT_LEFT Alt+Left
KEYCODE_ALT_RIGHT Alt+Right
KEYCODE_CTRL_LEFT Control+Left
KEYCODE_CTRL_RIGHT Control+R[……]

READ MORE

「PUSH」

//C2DM云端推送功能。 //第二种解决方案:MQTT协议实现Android推送功能。 //第三种解决方案:RSMB实现推送功能。 第四种解决方案:XMPP协议实现Android推送功能。[……]

READ MORE

「Android」- Special Characters

在项目中要在 string.xml 中显示特殊符号,如 @、:等,直接写肯定不行。。只能考虑使用 ASCII 码进行显示:
@:&#064; ::&#058; 空格:&#160;
以下为常见的 ASCII 十进制交换编码:

&#032;–> <– 这边是空格
&#033;–>!<–
&#034;–>”<– xml中需要在前面加入\
&#035;–>#<–
&#036;–>$<–
&#037;–>%<–
&#038;–>&<–
&#039;–>'<–
&#040;–>(<–
&#041;–>)<–
&#042;–>*<–
&#043;–>+<–
&#044;–>,<–
&#045;–>-<–
&#046;–>.<–
&#047;–>/<–
&#058;–>:<–
&#059;–>;<–
&#060;–><<–
&#061;–>=<–
&#062;–>><–
&#063;–>?<–
&#064;–>@<–
&#091;–>[<–
&#092;–>–
&#093;–>]<–
&#094;–>^<–
&#095;–>_<–
&#096;–>`<–
&#123;–>{<–
&#124;–>|<–
&#125;–>}<–
&#126;–>~<–
&#160;–> <–这边是空格,在xml首字符中不会被忽略
&#161;–>¡<–
&#162;–>¢<–
&#163;–>£<–
&#164;–>¤<–
&#165;–>¥<–
&#166;–>¦<–
&#167;–>§<–
&#168;–>¨<–
&#169;[……]

READ MORE

「Web」

WebView :

解析、渲染界面

WebViewClient:

事件监听

WebChromeClient:

辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等[……]

READ MORE

「Android」- 安装 apk 流程

安装流程
系统开机安装、应用市场安装、使用 adb 安装、手机自带安装(调用 packageinstalller.apk)
/system/app
PackageManagerService
分析:packageinstaller.apk
交互安装界面,显示包名,图片,解析 apk 文件
处理 AndroidMenifest.xml 文件
安装检查,版本,签名等等
向 /system/bin/installd 发送 socket 指令
安装完成后,通过 socket 回传结果[……]

READ MORE

「raw 与 assets」

相同点:
在打包的过程当中,两个文件夹中的文件会原封不动的保存在文件中; 不同点:
1、raw文件夹下,不可以有子目录;而assets则可以有子目录;
2、raw中的资源可以映射到R.java类中,访问的时可以使用resourceID,即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类,然后open文件。 文件的读取:
1、raw:
getResources().openRawResource(R.id.filename);//获取到文件流
2、asset:
(1)、getAssets().open(“filename”); //获取到文件流
(2)、webView.loadUrl(“file:///android_asset/sample.html”);//加载页面可以这样啊[……]

READ MORE

「Android」- Dalvik Executable format

数据类型

Name
Description

byte
8-bit signed int

ubyte
8-bit unsigned int

short
16-bit signed int, little-endian

ushort
16-bit unsigned int, little-endian

int
32-bit signed int, little-endian

uint
32-bit unsigned int, little-endian

long
64-bit signed int, little-endian

ulong
64-bit unsigned int, little-endian

sleb128
signed LEB128, variable-length (see below)

uleb128
unsigned LEB128, variable-length (see below)

uleb128p1
unsigned LEB128 plus 1, variable-length (see below)

u1, u2, u4, u8 表示占某固定字节的无符号数
LEB128,最高 5 字节,7 位有效
文件布局(File layout)
属性及其他部分偏移:

dex header

索引结构区:

string_ids
type_ids
proto_ids
field_ids
method_ids
class_defs
call_site_ids
method_handles

数据区:

data

静态链接数据区:

link_data

参考文献
CSDN/DEX文件格式 Dex Format[……]

READ MORE

「Android」- Emulator Acceleration

参考文献
Configure hardware acceleration for the Android Emulator[……]

READ MORE

「Linux下,使用fastboot线刷Nexus 6」

手机Nexus 6,非Nexus机型不保证。
安装fastboot工具
到SDK Platform Tools Release Notes下载主页SDK Platform-Tools,因为一会要用到这里面的fastboot、adb命令。
并加入环境变量:

export PATH=/opt/android-platform-tools:$PATH

# 这样就可以在命令行中直接执行fastboot命令了,而不需要先进入命令所在目录。

解锁手机的OEM
到「设置」-「开发者选项」中解锁OEM。
手机进入Bootloader模式
开机时,同时按下「音量键的下键」及「电源键」进入Bootloader模式。
或者执行

adb reboot bootloader

也可以进入Bootloader模式。
解锁Bootloader

#!/bin/bash

# 查看设置
fastboot devices

# 2014年及以前的设备执行该命令
fastboot oem unlock

# 2015年及之后的设备执行该命令
fastboot flashing unlock

下载官方的线刷包
下载线刷包,下载地址为:https://developers.google.com/android/images
解压线刷包,文件的内容如下:
其中,image-shamu-nbd91u.zip文件内容如下:
刷入官方包
方法一:使用刷机脚本
可以直接执行flash_all.sh刷机脚本开始刷机。
方法二:手动刷入
手动刷入image-shamu-nbd91u.zip中的每个镜像文件,命令格式如下:

#!/bin/bash

# 刷入镜像文件
fastboot flash <image name> <image name>.img

或者一次性刷入所由的镜像文件:

#!/bin/bash

fastboot -w update image-shamu-nbd91u.zip

如果要刷入基础包,可以执行:

#!/bin/bash

fastboot flash bootloader bootloader-shamu-xxxxxx.img

fastboot flash radio radio-shuamu-xxxxxx.img

结束后,重启:

#!/bin/bash

# 重启
fastboot reboot

# 或者执行
fastboot reboot-bootloader[……]

READ MORE

「Android」- Toolbox

投屏工具
GitHub – Genymobile/scrcpy: Display and control your Android device
其他工具(未分类)
apktool Apktool – A tool for reverse engineering 3rd party, closed, binary Android apps.
GitHub/pjlantz/droidbox Dynamic analysis of Android apps
GitHub/Samsung/Dexter Dexter is a static analysis platform to find and remove defects efficiently and immediately during the coding-time.
GitHub/pxb1988/dex2jar Tools to work with android .dex and java .class files
GitHub/jlarimer/android-stuff Random scripts and files I use for Android reversing
GitHub/androguard/androguard Reverse engineering, Malware and goodware analysis of Android applications … and more (ninja !)
androguard: analyze Open a IPython Shell and start reverse engineering. apkid Return the packageName/versionCode/versionName per APK as… arsc Decode resources.arsc either directly from a given file or… axml Parse the AndroidManifest.xml. cg Create a call graph and export it into a graph format. decompile Decompile an APK and create Control Flow Graphs. disassemble Disassemble Dalvik Code with size SIZE starting from an… gui Androguard GUI sign Return the fingerprint(s) of all certificates inside an APK[……]

READ MORE

「smali – Assembles a set of smali files into a dex file」

[……]

READ MORE

「C」- 概念、术语

语言标准
目前,有许多C实现可用。在理想情况下,编写C程序时,假设该程序中未使用机器特定的编程技术。那么它的运行情况在任何实现中都应该相同。要在实践中做到这一点,不同的实现要遵循同一个标准。
C语言发展之初,并没有所谓的C标准。1987年,布莱恩·柯林汉(BrianKernighan)和丹尼斯·里奇(Dennis Ritchie)合著 The C Programming Language(《C语言程序设计》)第 1 版是公认的C标准,通常称之为 K&RC 或经典 C。特别是,该书中的附录中的“语言参者手册”已成为实现厂的指导标准,例如,编译器都声称提供完整的K&R实现。虽然这本书中的附录定义了 C 语言,但却没有定义 C 库,与大多数语言不同的是,C 语言比其他语言更依赖库,因此需要一个标准库。实际上,由于缺乏官方标准,UNIX实现提供的库已成为了标准库。
C89/C90/ANSI C
随着C的不断发展,越来越广泛地应用于申多系统中,社区意识到需要一个中全面、更新颖、申严格的标准。鉴于此,美国国家标准协会(ANSI)于1983年组建了一个委员会(X3J11),开发了一套新标准,并于1989年正式公布。该标准(ANSIC)定义了C语言和C标准库。国际标准化组织于1990年采用了这套C标准(ISOC)ISOC和ANSIC完全相同的标准。ANSI/ISO标准的最终版本通常叫作C89(因为ANSI于1989年批准该标准)或C90(因为1SO于1990年批准该标准)。另外,由于ANSI先公布C标准,因此业界人士通常使用 ANSI C。
在该委员会制定的指导原则中,最有趣的可能是:保持C的精神。委员会在表述这一精神时列出了以下几点: 信任程序员; 不要妨碍程序员做需要做的事保持语言精练简单: 只提供一种方法执行一项操作: 让程序运行更快,即使不能保证其可移植性。
在最后一点上,标准委员会的用意是:作为实现,应该针对目标计算机来定义最合适的某特定操作。而不是强加一个抽象、统一的定义。在学习C语言过程中,许多方面都反映了这一哲学思想。
C99
1994年,ANSI/ISO联合委员会(CX委员会)开始修订C标准,最终发布了C99标准。该委员会遵循了最初C90标准的原则,包括保持语言的精练简单。委员会的用意不是在C语言中添加新特性,而是为工达到新的目标。第1个目标品,支持国际化编程。例如,提供多种方法外理国际学符集。第2个目标是“调整现有实践致力于解决明显的缺陷”。因此,在遇到需要将C移至64位处理器时,委员会根据现实生活中处理问题的经验来添加标准。第3个目标是,为适应科学和工程项目中的关键数值计算,提高C的适应性,让C比FORTRAN更有竞争力。
这3点(国际化、弥补缺陷、提高计算的实用性)是主要的[……]

READ MORE