这些都是通过学长给予,以及网络上的资源来做的个人理解、总结,大牛们不要喷。
零基础小萌新在角落瑟瑟发抖的认真记笔记。
安卓逆向学习笔记(一)
- 写一个安卓程序
安装所需软件android studio,因为貌似被墙了所以没有用官网下载。
官网下载链接及教程,链接官网下载链接,教程安装及下载教程 网上另找的资源(内附教程)android studio v3.0网盘下载 百度网盘下载太慢解决链接(可能用不了,自行解决谢谢):传送门
1、JAVA 环境配置(请大佬自动略过)
先下载jdk(最好安装在C盘,默认安装),请自行搜索。因为安卓为java开发所以配置java环境尤为重要:
(1)右键单击电脑——>打开属性——>高级系统设置——>环境变量(下图示)
然后在系统变量中添加3个变量:
【1】、变量名:JAVA _HOME 变量值:你的jdk安装路径
【2】变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
【3】变量名:PATH 变量值(两个变量值):%JAVA_HOME%\bin% JAVA_HOME%\jre\bin
【4】检测是否配置成功
win+R 打开 cmd,输入 java,出现一连串的指令提示,说明配置成功了:
输入 java
输入javac
输入java -version
到这里就成功配置好java环境了
2、开始写第一个安卓程序
打开我们的android studio,当我准备开始编写的时候发现很多错误,进行很不顺利,列出部分错误解决方法:
所有版本sdk下载方法及Android Studio无法显示Design视图解决方法 在安装时可能无法勾选sdk下载解决方法 Error:Execution failed for task ':app:preDebugAndroidTestBuild’解决方法 Error:Failed to find Build Tools revision 26.0.2解决方法 然后就是了解一下ConstraintLayout传送门 然后开心的开始写一个简单的界面(可以先看一下别人写的讲解比较详细传送门)
下面是activity_main.xml代码
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.myh18.myapplication.Login">
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="28dp"
android:text="@string/app_name"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0" />
<EditText
android:id="@+id/userEdit"//这个就是id的名字,划重点主程序直接可以调用
android:layout_width="wrap_content"
android:layout_height="49dp"
android:layout_marginBottom="8dp"
android:ems="10"
android:inputType="textPersonName"
android:text="@string/message2"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.792"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.429" />
<EditText
android:id="@+id/passwordEdit"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="68dp"
android:ems="10"
android:inputType="textPersonName"
android:text="@string/message3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.792"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/userEdit" />
<android.support.constraint.Guideline
android:id="@+id/guideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="384dp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:onClick="thisButtonLogin"
android:text="@string/message4"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.664"
app:layout_constraintStart_toEndOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/userEdit"
app:layout_constraintVertical_bias="0.522" />
<TextView
android:id="@+id/textView"
android:layout_width="57dp"
android:layout_height="29dp"
android:text="@string/message5"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/userEdit"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/textView4"
app:layout_constraintVertical_bias="0.4" />
<TextView
android:id="@+id/textView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/message6"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/passwordEdit"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintVertical_bias="0.313" />
</android.support.constraint.ConstraintLayout>
在手机上运行的效果图
然后先解决几个小问题,比如说什么Error:Execution failed for task ‘:app:compileDebugJavaWithJavac’. > Compilation failed;
see the comp
这可能是因为buildToolsVersion版本不一致,打开build.gradle
然后在dependencies里面写入格式为androidTestCompile('com.android.support:support-annotations:'版本') { force = true }
这样就可以了
然后就是查看代码错在哪里,方法如下
点击Terminal输入gradlew compileDebugSources --stacktrace -info ,查看原因
如图
下面是主程序代码
package com.example.myh18.myapplication;//这是自己application保存的路径
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.os.Bundle;
import com.example.myh18.myapplication.R;//R包,这个不能直接复制粘贴,有报错直接alt+enter生成对应R包即可
public class Login extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//activity_main就是你界面的名称
}
public void thisButtonLogin(View view){
//接收按钮按下事件
//获取用户输入的账号和密码
EditText editText = (EditText)findViewById(R.id.userEdit);
String user = editText.getText().toString();
editText = (EditText)findViewById(R.id.passwordEdit);
String pw = editText.getText().toString();
//这一段是测试的遗留的,用来在判断前输出输入的账号内容
//AlertDialog.Builder message = new AlertDialog.Builder(this);
//message.setMessage(user);
//message.setPositiveButton("确定",click1);
//AlertDialog message1 = message.create();
//message1.show();
//判断两个编辑框内容是否为空
if (user == null || user.length() == 0) {
AlertDialog.Builder usermessage=new AlertDialog.Builder(this);
usermessage.setMessage("用户名不能为空!");
usermessage.setPositiveButton("确定",click1);
AlertDialog usermessage1=usermessage.create();
usermessage1.show();
}else if(pw == null || pw.length() == 0) {
AlertDialog.Builder pwmessage=new AlertDialog.Builder(this);
pwmessage.setMessage("密码不能为空!");
pwmessage.setPositiveButton("确定",click1);
AlertDialog pwmessage1=pwmessage.create();
pwmessage1.show();
}else{
//弹出信息框,显示用户输入的账号和密码
AlertDialog.Builder winmessage = new AlertDialog.Builder(this);
winmessage.setMessage("账号:"+user+"\n"+"密码:"+pw);
winmessage.setPositiveButton("确定",click2);
AlertDialog winmessage2 = winmessage.create();
winmessage2.show();
}
}
private DialogInterface.OnClickListener click1 = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
};
private DialogInterface.OnClickListener click2 = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
android.os.Process.killProcess(android.os.Process.myPid());
}
};
}
然后就可以开心的bulid啦,终于写完了第一个app程序。如果想在自己手机上运行,还要注意自己手机的android版本,屏幕分辨率。
补充知识点:然后签名方法如下,先呈上别人直接签名打包的方法传送门 再附上吾爱破解的工具包,签名很方便传送门推荐1.1版本,因为有一个
有一个右键工具,在以后的逆向过程中很方便。