主頁 > 區塊鏈 > Android入門:系統整體結構,專案組成結構,Activity和應用功能清單組態檔,res,APK,打包的程序

Android入門:系統整體結構,專案組成結構,Activity和應用功能清單組態檔,res,APK,打包的程序

2020-10-02 10:28:36 區塊鏈

Android系統整體結構圖

在這里插入圖片描述
先是從底層看起:(它是從Linux內核里面抽取出來的一部分)
DisplayDriver(顯示驅動),CameraDriver(相機驅動),BluetoothDriver(藍牙驅動)
FlashMemoryDriver(閃存驅動),USBDriver(USB驅動),后面的鍵盤驅動,WIFI驅動,音頻驅動,電池驅動
然后是第二層:
libraies(類別庫)
SurfaceManager(顯示管理器),MediaFramework(多媒體框架),SQLite(資料庫,小型資料庫),OpenGL|ES(3D圖庫引擎),SGL(2D圖庫引擎),FreeType(免費開發的文字顯示框架),SSL(一個安全協議),WebKit(瀏覽器內核),libc(c語言核心庫)
Android RunTime(安卓運行時)
里面有DalvikVirtualMachine(DVM),是從jvm里面改進過來的
CoreLibraries(Java的核心庫)
然后是第三層(都是Java寫的)
對應:活動管理器,視窗管理器,內容提供者,視圖系統,通知管理,包管理,電話管理器,資源管理器,定位管理器,XMPP及時通訊協議
然后是第四層
Home(桌面),Contacts(聯系人),Phone(電話),Browser(瀏覽器)

區別DVM與JVM
首要差別
Dalvik: 基于暫存器,編譯和運行都會更快些
JVM: 基于堆疊, 編譯和運行都會慢些

位元組碼的區別
Dalvik: 執行.dex格式的位元組碼,是對.class檔案進行壓縮后產生的,檔案變小
JVM: 執行.class格式的位元組碼

運行環境的區別    
Dalvik : 一個應用啟動都運行一個單獨的虛擬機運行在一個單獨的行程中
JVM: 只能運行一個實體, 也就是所有應用都運行在同一個JVM中

專案組成結構

在這里插入圖片描述
在這里插入圖片描述
自動生成的R.java類里面的結構和對應資源的值
在這里插入圖片描述

在這里插入圖片描述

Activity和應用功能清單組態檔

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

/**
 * 主界面Activity類,主界面就是點擊應用圖示啟動的界面
 */
public class MainActivity extends AppCompatActivity
{
    /**
     * 重寫方法onCreate:在當前類(activity)物件創建的時候自動呼叫
     * 就是回呼方法:不是我們自己呼叫的,是系統在一定條件下自動呼叫的,
     * 而且在Android中基本是以on開頭,這些方法我們不需要呼叫,一般是重寫
     */
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        //先呼叫父類做一些默認的初始化作業
        super.onCreate(savedInstanceState);
        //設定視窗要顯示的內容視圖(界面或者布局)
        //其中引數是一個int型別的數值,是要指定布局檔案在R所對應的變數
        //這樣就可以加載布局檔案,讓它顯示到視窗中
        setContentView(R.layout.activity_main);
    }
}

<?xml version="1.0" encoding="utf-8"?>
<!--
    package屬性:指定當前應用唯一包名,這是應用的標識,不同的應用不一樣
    versionName屬性:指定應用的版本號
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication" >

    <!--
        icon:應用的圖示
        label:應用的名稱
        theme:應用的主題
    -->
    <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標簽:配置我們的Activity類
            name屬性:要寫全類名的,但是可以省略包名部分
            label屬性:界面的標題
        -->
        <activity android:name=".MainActivity" >
            <!--讓當前Activity成為主界面Activity-->
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

res檔案夾

res檔案夾是資源檔案夾,里面還分了很多檔案夾
	mipmap-xxxdpi:有一系列的這種檔案夾,這些是圖片檔案夾,
			而為什么有這么多的檔案夾呢?而且每一個檔案夾里面存放的圖片都是一樣的
			那是因為手機有好有壞,解析度不一樣,解析度壞的手機顯示這一張圖片剛剛好
			而解析度好的手機再顯示這一張圖片,那么就會變得小了一點,所以這是為了適配不同解析度的手機

	layout:界面的布局檔案,功能類似HTML
	values:常量檔案夾
			比如strings.xml里面,就包含固定的字串,在布局中參考的方式:@string/變數的名稱

APK檔案

在這里插入圖片描述

應用打包的程序

在這里插入圖片描述

Android系統檔案目錄結構

Android系統就是類似Linux系統一樣,里面的存盤結構沒有分什么C盤D盤之類的
就只有一個盤,里面的
/ 代表系統的根目錄
/data/app/ 存放的是第三方的apk檔案
/system/app/ 這是系統中安裝好的應用檔案
/data/data/packagename/ 存放的是以應用對應的檔案,在應用安裝時自動生成,應用卸載的時候自動洗掉
/storage/sdcard/ 就是sd卡的檔案夾
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

SDK檔案目錄結構

/docs
	是檔案的目錄,點擊index.html就能查看API檔案
/platforms
	是每一個版本運行所需要的jar包
/platform-tools
	包含一些開發工具,比如adb.exe(真機模擬的連接程式),sqlite3.exe
/samples
	一些Google提供的樣例專案工程
/source
	包含系統的部分原碼
/tools
	包含一些開發工具,比如hierarachyviewer.bat

在這里插入圖片描述
/platforms
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

介紹三個工具

ADB

Android 除錯橋(Android Debug Bridge)是多種用途的除錯工具幫助你管理設備或模擬器的狀態,就是類似之前你們一直使用的debug視窗
常用的命令

adb shell  //就是進入你的當前運行的Android系統的根目錄,使用ls可以查看當前系統的目錄檔案
ctrl+c		//退出shell,就是退出系統根目錄
cls			//清屏
adb install –r apkPath           -push this package file to the device install,就是安裝一個apk檔案,就是幫手機安裝一個應用,-r意思是如果這個應用已經存在就先洗掉

在這里插入圖片描述

DDMS

全稱是Dalvik Debug Monitor Service
Android 開發環境中的Dalvik虛擬機除錯監控服務
Eclipse中提供的Android應用開發的除錯工具
它有四個重要的視窗

Logcat : 查看日志輸出:
File Explorer:查看系統內部檔案
Devices:顯示關聯的Android設備
Emulator Control:操作控制關聯的Android設備

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

工具類Log

工具類Log提供了五種的輸出的方法,分別是:
v() //對應Verbose級別,顯示全部的資訊
d() //對應debug級別,顯示除錯資訊
i() //info級別,顯示一般資訊
w() //warming級別,顯示警告資訊
e() //Error,顯示錯誤資訊
測驗

package com.example.hello;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity
{

	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.i("jane", "執行了Log.i()");
		Log.e("jane", "執行了Log.e()");
	}
}

發現LogCat視窗列印的資訊超級多,所以使用過濾器進行過濾找到我們想要的資訊
這里我們根據包名來過濾,因為一個應用對應一個包名,所以這里肯定是我們寫的這個程式輸出的資訊
在這里插入圖片描述
在這里插入圖片描述

下載功能的模擬

<RelativeLayout 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="${relativePackage}.${activityClass}" >

    <Button
        android:id="@+id/MainButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_marginTop="35dp"
        android:text="下載" />

</RelativeLayout>
package com.example.hello;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
/*
Toast: 用來顯示短時間提示文本的類
	static Toast makeText(...) : 創建一個toast物件
	show(): 顯示小提示

R: 應用的資源類
	R.drawable: 包含所有圖片資源標識的內部類
	R.layout: 包含所有布局資源標識的內部類
	R.id: 包含所有視圖id標識的內部類
	R.string: 包含所有字串標識的內部類

 */
public class MainActivity extends Activity
{
	//一般會將要操作的組件放在類的變數里面
	private Button button;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		//加載布局檔案,并在記憶體中生成對應的視圖物件
		setContentView(R.layout.activity_main);
		Log.i("jane", "?執行了Log.i()");
		Log.e("jane", "?執行了Log.e()");
		//根據id在記憶體中查找對應的視圖物件
		button = (Button) findViewById(R.id.MainButton);
		//給這個button設定監聽
		button.setOnClickListener(new View.OnClickListener()
		{
			//這是匿名內部類,下面是點擊button的回呼方法
			@Override
			public void onClick(View v)
			{
				/*
				 * 下面的回呼方法主要的操作是:
				 * 1.顯示文本小提示
				 * 2.將button的內容更新為下載中...
				 * 首先是Toast需要的引數問題,需要一個Context類
				 * 經過查看發現Context介面的實作類有Activity,那么我們現在的類就是,
				 * 所以就將本類傳進去,但是這里是匿名內部類,想得到外部類的當前物件,就使用類名.this獲得
				 * 第三個引數是duration,
				 *      * @param duration How long to display the message.  Either {@link #LENGTH_SHORT} or
                 *      {@link #LENGTH_LONG}
                 * 通過注釋可以發現是顯示的時間,只有兩個取值
				 */
				Toast toast = Toast.makeText(MainActivity.this, "開始下載...", Toast.LENGTH_LONG);
				toast.show();
				button.setText("下載中...");
			}
		});
	}
}

手機單位相關的概念

手機的尺寸: 螢屏對角線的長度,單位為英寸(2.54cm)
手機的解析度: 螢屏能顯示的像素的數量, 一般用在長方向上數量*寬方向上數量來表達
手機的像素密度: pixels per inch,也稱PPi,即每英寸螢屏能顯示的像素數,
像素密度越大,顯示畫面細節就越豐富,
計算:像素密度={1+√ [(長度像素數-1) ^ 2 +(寬度像素數-1)^2]}/螢屏尺寸

DPI: Dots Per Inch(每英寸所列印的點數或線數)的縮寫,
用來表示列印機列印解析度, 但有時也會用dpi來代指ppi

手機的密度: Density, 以160ppi為基準, 即像素密度為160時Density為1
ldpi 120ppi 0.75
mdpi 160dpi 1.0
hdpi 240dpi 1.5
xhdpi 320dpi 2.0

px: pixels(像素)
1px就的長度就對應螢屏一個像素點的大小,但是這個單位在不同的手機一個像素點的大小不一樣
比如手機的大小都一樣的情況下,如果好的手機在橫的方向能放下的像素點有800個
不好的手機橫方向能放下的像素點400個,那么一個像素點在壞的手機的大小是好手機兩倍

dp/dip: device-independent pixels(設備無關像素)
換算的方法有三種:
1dp = (dpi / 160) px
1dp = density px 160–>1px 120–>0.75 320–>2px
1px = 1/density dp

sp:scaled pixels(可縮放像素)
與dp類似,但是可以根據用戶的字體大小首選項進行縮放

注意: Android在運行時會自動將dp/dip/sp為單位的尺寸轉換為像素單位的值

dp與px的比較?
以px為單位的長度, 在差手機上會變大, 在好手機上變小
以dp為單位則不會變化

dp與sp的比較?
用戶可以在系統設定中設定文本的大小
如果字體大小使用sp為單位, 設定有效果
如果字體大小使用dp為單位, 設定沒有效果

在布局檔案視圖的寬高盡量用match_parent/wrap_content
如果必須指定特定值, 使用dp/dip做單位
文本大小使用sp做單位

轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/147988.html

標籤:區塊鏈

上一篇:App體系化優化之啟動優化(一啟動時間分析)

下一篇:centos6虛擬機安裝到開始使用程序指引&LAMP

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • JAVA使用 web3j 進行token轉賬

    最近新學習了下區塊鏈這方面的知識,所學不多,給大家分享下。 # 1. 關于web3j web3j是一個高度模塊化,反應性,型別安全的Java和Android庫,用于與智能合約配合并與以太坊網路上的客戶端(節點)集成。 # 2. 準備作業 jdk版本1.8 引入maven <dependency> < ......

    uj5u.com 2020-09-10 03:03:06 more
  • 以太坊智能合約開發框架Truffle

    前言 部署智能合約有多種方式,命令列的瀏覽器的渠道都有,但往往跟我們程式員的風格不太相符,因為我們習慣了在IDE里寫了代碼然后打包運行看效果。 雖然現在IDE中已經存在了Solidity插件,可以撰寫智能合約,但是部署智能合約卻要另走他路,沒辦法進行一個快捷的部署與測驗。 如果團隊管理的區塊節點多、 ......

    uj5u.com 2020-09-10 03:03:12 more
  • 谷歌二次驗證碼成為區塊鏈專用安全碼,你怎么看?

    前言 谷歌身份驗證器,前些年大家都比較陌生,但隨著國內互聯網安全的加強,它越來越多地出現在大家的視野中。 比較廣泛接觸的人群是國際3A游戲愛好者,游戲盜號現象嚴重+國外賬號安全應用廣泛,這類游戲一般都會要求用戶系結名為“兩步驗證”、“雙重驗證”等,平臺一般都推薦用谷歌身份驗證器。 后來區塊鏈業務風靡 ......

    uj5u.com 2020-09-10 03:03:17 more
  • 密碼學DAY1

    目錄 ##1.1 密碼學基本概念 密碼在我們的生活中有著重要的作用,那么密碼究竟來自何方,為何會產生呢? 密碼學是網路安全、資訊安全、區塊鏈等產品的基礎,常見的非對稱加密、對稱加密、散列函式等,都屬于密碼學范疇。 密碼學有數千年的歷史,從最開始的替換法到如今的非對稱加密演算法,經歷了古典密碼學,近代密 ......

    uj5u.com 2020-09-10 03:03:50 more
  • 密碼學DAY1_02

    目錄 ##1.1 ASCII編碼 ASCII(American Standard Code for Information Interchange,美國資訊交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單位元組編碼系統,并等同于國際標準ISO/IE ......

    uj5u.com 2020-09-10 03:04:50 more
  • 密碼學DAY2

    ##1.1 加密模式 加密模式:https://docs.oracle.com/javase/8/docs/api/javax/crypto/Cipher.html ECB ECB : Electronic codebook, 電子密碼本. 需要加密的訊息按照塊密碼的塊大小被分為數個塊,并對每個塊進 ......

    uj5u.com 2020-09-10 03:05:42 more
  • NTP時鐘服務器的特點(京準電子)

    NTP時鐘服務器的特點(京準電子) NTP時鐘服務器的特點(京準電子) 京準電子官V——ahjzsz 首先對時間同步進行了背景介紹,然后討論了不同的時間同步網路技術,最后指出了建立全球或區域時間同步網存在的問題。 一、概 述 在通信領域,“同步”概念是指頻率的同步,即網路各個節點的時鐘頻率和相位同步 ......

    uj5u.com 2020-09-10 03:05:47 more
  • 標準化考場時鐘同步系統推進智能化校園建設

    標準化考場時鐘同步系統推進智能化校園建設 標準化考場時鐘同步系統推進智能化校園建設 安徽京準電子科技官微——ahjzsz 一、背景概述隨著教育事業的快速發展,學校建設如雨后春筍,隨之而來的學校教育、管理、安全方面的問題成了學校管理人員面臨的最大的挑戰,這些問題同時也是學生家長所擔心的。為了讓學生有更 ......

    uj5u.com 2020-09-10 03:05:51 more
  • 位元幣入門

    引言 位元幣基本結構 位元幣基礎知識 1)哈希演算法 2)非對稱加密技術 3)數字簽名 4)MerkleTree 5)哪有位元幣,有的是UTXO 6)位元幣挖礦與共識 7)區塊驗證(共識) 總結 引言 上一篇我們已經知道了什么是區塊鏈,此篇說一下區塊鏈的第一個應用——位元幣。其實先有位元幣,后有的區塊 ......

    uj5u.com 2020-09-10 03:06:15 more
  • 北斗對時服務器(北斗對時設備)電力系統應用

    北斗對時服務器(北斗對時設備)電力系統應用 北斗對時服務器(北斗對時設備)電力系統應用 京準電子科技官微(ahjzsz) 中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS),因為是目前世界范圍內唯一可以大面積提供免費定位服務的系統,所以 ......

    uj5u.com 2020-09-10 03:06:20 more
最新发布
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:46:47 more
  • Hyperledger Fabric 使用 CouchDB 和復雜智能合約開發

    在上個實驗中,我們已經實作了簡單智能合約實作及客戶端開發,但該實驗中智能合約只有基礎的增刪改查功能,且其中的資料管理功能與傳統 MySQL 比相差甚遠。本文將在前面實驗的基礎上,將 Hyperledger Fabric 的默認資料庫支持 LevelDB 改為 CouchDB 模式,以實作更復雜的資料... ......

    uj5u.com 2023-04-16 07:28:31 more
  • .NET Core 波場鏈離線簽名、廣播交易(發送 TRX和USDT)筆記

    Get Started NuGet You can run the following command to install the Tron.Wallet.Net in your project. PM> Install-Package Tron.Wallet.Net 配置 public reco ......

    uj5u.com 2023-04-14 08:08:00 more
  • DKP 黑客分析——不正確的代幣對比率計算

    概述: 2023 年 2 月 8 日,針對 DKP 協議的閃電貸攻擊導致該協議的用戶損失了 8 萬美元,因為 execute() 函式取決于 USDT-DKP 對中兩種代幣的余額比率。 智能合約黑客概述: 攻擊者的交易:0x0c850f,0x2d31 攻擊者地址:0xF38 利用合同:0xf34ad ......

    uj5u.com 2023-04-07 07:46:09 more
  • Defi開發簡介

    Defi開發簡介 介紹 Defi是去中心化金融的縮寫, 是一項旨在利用區塊鏈技術和智能合約創建更加開放,可訪問和透明的金融體系的運動. 這與傳統金融形成鮮明對比,傳統金融通常由少數大型銀行和金融機構控制 在Defi的世界里,用戶可以直接從他們的電腦或移動設備上訪問廣泛的金融服務,而不需要像銀行或者信 ......

    uj5u.com 2023-04-05 08:01:34 more
  • solidity簡單的ERC20代幣實作

    // SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; import "hardhat/console.sol"; //ERC20 同質化代幣,每個代幣的本質或性質都是相同 //ETH 是原生代幣,它不是ERC20代幣, ......

    uj5u.com 2023-03-21 07:56:29 more
  • solidity 參考型別修飾符memory、calldata與storage 常量修飾符C

    在solidity語言中 參考型別修飾符(參考型別為存盤空間不固定的數值型別) memory、calldata與storage,它們只能修飾參考型別變數,比如字串、陣列、位元組等... memory 適用于方法傳參、返參或在方法體內使用,使用完就會清除掉,釋放記憶體 calldata 僅適用于方法傳參 ......

    uj5u.com 2023-03-08 07:57:54 more
  • solidity注解標簽

    在solidity語言中 注釋符為// 注解符為/* 內容*/ 或者 是 ///內容 注解中含有這幾個標簽給予我們使用 @title 一個應該描述合約/介面的標題 contract, library, interface @author 作者的名字 contract, library, interf ......

    uj5u.com 2023-03-08 07:57:49 more
  • 評價指標:相似度、GAS消耗

    【代碼注釋自動生成方法綜述】 這些評測指標主要來自機器翻譯和文本總結等研究領域,可以評估候選文本(即基于代碼注釋自動方法而生成)和參考文本(即基于手工方式而生成)的相似度. BLEU指標^[^?88^^?^]^:其全稱是bilingual evaluation understudy.該指標是最早用于 ......

    uj5u.com 2023-02-23 07:27:39 more
  • 基于NOSTR協議的“公有制”版本的Twitter,去中心化社交軟體Damus

    最近,一個幽靈,Web3的幽靈,在網路游蕩,它叫Damus,這玩意詮釋了什么叫做病毒式營銷,滑稽的是,一個Web3產品卻在Web2的產品鏈上瘋狂傳銷,各方大佬紛紛為其背書,到底發生了什么?Damus的葫蘆里,賣的是什么藥? 注冊和簡單實用 很少有什么產品在用戶注冊環節會有什么噱頭,但Damus確實出 ......

    uj5u.com 2023-02-05 06:48:39 more