從這篇可以掌握到
- Android app開發(fā)環(huán)境的搭建
- 開發(fā)工具介紹及安裝
- 創(chuàng)建你的“Hello, World”
- 工程結構的介紹
- 工程gradle配置
- 簡單布局
- 代碼sample
- 打包配置
- gradle基本命令介紹
1 搭建環(huán)境&安裝工具
1.1 JDK
1.1.1 安裝
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
先點擊Accept License Agreement 同意,然后選擇下載:

1.1.2 配置環(huán)境變量
Windows環(huán)境:
JAVA_HOME:D:\Java\jdk1.8.0_25 # java的安裝路徑
CLASSPATH:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
Path:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin # add
Mac:
在系統(tǒng)環(huán)境配置文件里添加:
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_71.jdk/Contents/Home
export PATH=$PATH:JAVA_HOME/bin
1.2 Android Studio
1.2.1 安裝
https://developer.android.google.cn/studio/
根據你的系統(tǒng)選擇相應版本。
目前使用版本為3.2。

1.2.2 設置Project Structure
打開Studio界面

需要設置的是SDK和JDK路徑:

1.2.3 安裝Android SDK & tools
在sdk Manager中安裝或更新需要的Android sdk。



當前使用工具版本:
- SDK Build-tools 28.0.3
- SDK Platform-tools 28.0.1 +
- SDK Tools: 26.1.1 +
- Support Library rev 23.2.1 +
大致說明下這幾個工具:
-
Android SDK Tools
包含了android 開發(fā)和調試的工具- Location:
$ANDROID_HOME/tools - Main tools:
ddms(for debugging),emulator, etc
- Location:
-
Android SDK Platform-tools
針對pc端和移動端進行交互的一些工具- Location:
$ANDROID_HOME/platform-tools - Main tool:
adb(to manage the state of an emulator or an Android device),sqlite3,fastboot, etc.
- Location:
-
Android SDK Build-tools
Android平臺相關通用工具- Location:
$ANDROID_HOME/build-tools/$VERSION/ - Documentation
- Main tools:
aapt(to generate R.java and unaligned, unsigned APKs),dx(to convert Java bytecode to Dalvik bytecode), andzipalign(to optimize your APKs)
- Location:
1.2.4 設置環(huán)境PATH
以Mac環(huán)境為例:
設置Android sdk的安裝目錄為:/Users/Izumi/Android/android-sdk-macosx,
在系統(tǒng)配置文件添加:
export PATH=$PATH:/Users/Izumi/Android/android-sdk-macosx/tools
export PATH=$PATH:/Users/Izumi/Android/android-sdk-macosx/build-tools/27.0.3
export PATH=$PATH:/Users/Izumi/Android/android-sdk-macosx/platform-tools
Windows環(huán)境,添加Android sdk路徑到系統(tǒng)PATH里即可。
2. 新建工程
2.1 步驟




自定義Activity和layout name。

點擊Finish后,就新建好工程了。
2.2 下載模擬器AVD
打開工程后,如果想下載模擬器,可以在工具欄里看到這個icon。



選擇需要的API(即Android SDK),如果某版本API未下載,系統(tǒng)名邊上會顯示"Download",下載后也可以選擇。

命名avd確認即可。

2.3 工程結構

2.3.1 主要說明
- java: 包含 Java 源代碼文件,包括 JUnit 測試代碼。
- res: 包含所有非代碼資源,例如 XML 布局、UI 字符串和位圖圖像。
- AndroidManifest.xml: Android各組件的配置文件。
- app/build.gradle: app工程的gradle構建腳本。
- 根目錄下build.gradle: 整個工程的gradle構建腳本。
- gradle目錄:
gradle/wrapper/gralde-wrapper.properties 文件中聲明了它指向的目錄和版本,新建工程后會花一定時間下載指定的gradle版本。
2.3.2 詳細說明

2.3.3 關于gralde-wrapper.properties
文件如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
其中的distributionUrl 決定了這個項目使用的gradle版本。
第一次打開工程時會比較慢,是因為Studio首先會讀取gradle-wrapper.properties,知道這個工程需要哪個版本的gradle,然后就會去保存gradle的文件夾GRADLE_USER_HOME,去找看存不存在這個版本的gradle,不存在則會去distributionUrl 去下載。
Gradle下載地址:https://services.gradle.org/distributions/
可以在系統(tǒng)的環(huán)境配置中添加上GRADLE_USER_HOME的路徑:
Windows:
C:\users{user name}.gradle\wrapper\dists
Mac:
export GRADLE_USER_HOME=/User/{Username}/.gradle/wrapper/dists
2.3.4 整個項目gradle配置文件
buildscript {
repositories {
google()
jcenter()
}
dependencies {
// Gradle插件,此版本一般繼承自Android Studio的版本。
classpath 'com.android.tools.build:gradle:3.2.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
3. 簡單布局
3.1 常見UI控件
所有的控件都是View的子類。
- TextView
- EditText
- Button
- ImageView
- ProgressBar
3.2 設計布局
3.2.1 手動寫布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="80dp"
android:layout_marginBottom="64dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_gravity="center"
android:text="Hello World!"
android:textSize="24dp"
android:textColor="@android:color/white"
android:background="@android:color/darker_gray"
android:gravity="center"
tools:layout_editor_absoluteX="42dp"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="350dp"
android:orientation="horizontal"
android:background="@android:color/holo_blue_bright"
>
<Button
android:id="@+id/btHello"
android:layout_width="72dp"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginLeft="10dp"
android:layout_gravity="top|center"
android:text="ok"
android:textSize="18dp"
android:background="@android:color/holo_purple"
android:gravity="center"
/>
<ImageView
android:id="@+id/ivLogo"
android:layout_width="300dp"
android:layout_height="280dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_gravity="center"
android:src="@drawable/cat"
android:scaleType="center"
android:background="@android:color/darker_gray"
/>
</LinearLayout>
</LinearLayout>
效果:

3.2.2 使用Palette
在布局界面,使用Palette,直接拖動添加UI控件:

在右側的Attributes中,可以直接修改該控件的所有屬性:
如圖,把image的scaleType屬性,從"center"改成"fitXY"。

4. 代碼
4.1 代碼格式化
想讓一段代碼格式變得整齊,可以:
選中這行代碼
Code → Reformed Code
或者Windows: Ctrl+Alt+L
Mac:Alt+Cmd+L
4.2 代碼style
如下,在Preferences / Editor / Code Style / Scheme,可以添加自己的code style

4.3 sample
- 在sample Activity的布局中,添加兩個按鈕
<Button
android:id="@+id/btStartSelf"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Start self"
android:onClick="startSelf"
/>
<Button
android:id="@+id/btJumpSecond"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Jump to Second"
android:onClick="startSecond"
/>
- sample Activity如下:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MAIN";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("Task", "Main Task id:" + getTaskId());
}
public void startSelf(View view) {
startActivity(new Intent(this, MainActivity.class));
}
public void startSecond(View view) {
startActivity(new Intent(this, SecondActivity.class));
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
其中startSelf和startSecond方法,即對應了布局中兩個button的click事件。
創(chuàng)建一個簡單的SecondActivity,即可進行測試。
- Manifest配置
Android工程里每個Activity、Service、Broadcast等組件,都必須添加到Manifest.xml文件中。
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.isa.myapplication"
xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:launchMode="standard"
android:configChanges="orientation|keyboardHidden|screenSize"
/>
</application>
</manifest>
5. 打包
測試的話,可以開個模擬器或者連手機,run起來就好了!
如果發(fā)簽名包的話,參考以下配置。
5.1 配置簽名信息
工程下添加local.properties文件,填寫key信息:
sdk.dir=/Users/Izumi/Android/android-sdk-macosx
key.store=/Users/Izumi/xxx.keystore
key.alias=xxx.keystore
key.store.password=xxxxxx
key.alias.password=xxxxxx
在app/build.gradle,配置如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
buildToolsVersion "28.0.3"
defaultConfig {
applicationId "com.isa.myapplication"
minSdkVersion 17
targetSdkVersion 26
versionCode 1000000
versionName "1.0.0"
}
signingConfigs {
release {
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
storeFile file(properties.getProperty('key.store'))
storePassword properties.getProperty('key.store.password')
keyAlias properties.getProperty('key.alias')
keyPassword properties.getProperty('key.alias.password')
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
minifyEnabled false
debuggable true
signingConfig signingConfigs.debug
}
// 如果想自定義生成的包名,添加'applicationVariants',根據需要修改文件名
applicationVariants.all { variant ->
variant.outputs.all {
if (variant.productFlavors.size() > 0) {
def path="myapp_${defaultConfig.versionName}_${variant.productFlavors[0].name}_${buildType.name}_${project.name}_${buildTime()}.apk"
outputFileName = path
}
}
}
}
def buildTime() {
return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC"))
}
5.2 打包命令
./gradlew build // 檢查依賴并編譯打包,debug、release環(huán)境的包都會打出來
./gradlew assembleDebug // 編譯并打Debug包
./gradlew assembleRelease // 編譯并打Release的包
完成后,會在app/build/outputs/apk目錄下找到對應的apk。
6 關于Gradle
gradlew,代表gradle wrapper,意思是gradle的一層包裝。
基本命令:
- ./gradlew -v // 版本號
- ./gradlew clean // 清除app目錄下的build文件夾
- ./gradlew installRelease // release模式打包并安裝
- ./gradlew uninstallRelease // 卸載Release模式包
Ref: