Android app開發(fā)入門 —— your 'Hello, World'

從這篇可以掌握到

  • 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 同意,然后選擇下載:

jdk.png

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。

AndroidStudioVersions.png

1.2.2 設置Project Structure

打開Studio界面

ProjectStructure.png

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

SDKLocation.png

1.2.3 安裝Android SDK & tools

在sdk Manager中安裝或更新需要的Android sdk。

sdkManager.png
sdkManager2.png
sdkManager3.png

當前使用工具版本:

  • 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
  • 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.
  • 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), and zipalign (to optimize your APKs)

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 步驟

new1.png
new2.png
new3.png
new4.png

自定義Activity和layout name。

new5.png

點擊Finish后,就新建好工程了。

2.2 下載模擬器AVD

打開工程后,如果想下載模擬器,可以在工具欄里看到這個icon。

avdManager.png
createAVD.png
selectHardware.png

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

selectImage.png

命名avd確認即可。

nameAVD.png

2.3 工程結構

project.png

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 詳細說明

詳細說明.jpg

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>

效果:

layout.png

3.2.2 使用Palette

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

dragWidgets.png

在右側的Attributes中,可以直接修改該控件的所有屬性:

如圖,把image的scaleType屬性,從"center"改成"fitXY"。

attributes.png

4. 代碼

4.1 代碼格式化

想讓一段代碼格式變得整齊,可以:

選中這行代碼
Code → Reformed Code
或者Windows: Ctrl+Alt+L
Mac:Alt+Cmd+L

4.2 代碼style

如下,在Preferences / Editor / Code Style / Scheme,可以添加自己的code style

codeStyle.png

4.3 sample

  1. 在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"
        />
  1. 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,即可進行測試。

  1. 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:

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容