導航:首頁 > 操作系統 > android2016教程

android2016教程

發布時間:2023-06-01 18:58:09

⑴ 如何在電腦版(安卓模擬器)上用手機號注冊微信呢

找到並管理SD卡文件 微信 所添加的圖片所在的本地文件 就在SD卡的 鏡像文件里 SD卡是個鏡像文件,大小為新建時設的數值,我的1024m, 地址為:C:Documents and Settings****.androidavd****.avdsdcard.img (其中第一個****是你電腦的用戶名,第二個****是你自己建的AVD名) 找到sdcard.img就可隨意讀寫文件了,我一般用ultraiso, 修改完記得保存(此方法前提是要先關掉模擬器)C:DocumentsandSettings****.androidavd****.avdsdcard.img 這個 看不懂嗎 C盤 里的目錄盤.

⑵ android開發要不要用dagger2

用Dagger2在Android中實現依賴注入
依賴注入這個模式(模式已經用爛了,這里再爛一次)是用來給應用的各部分解耦的。使應用開發更加可擴展,更容易維護。通過本文你會學到如何使用Dagger2來處理依賴。
簡介
如果以對象需要另外的一個對象才能完成一個完整功能的話,那麼這里就存在一個依賴。比如,悟空要用金箍棒才能三打白骨精,要筋斗雲才能十萬八千里。悟空有對金箍棒和筋斗雲的依賴。你可以在悟空對象里初始化金箍棒,也可以用一個工廠方法批量生產金箍棒。使用依賴注入可以無需一個專門的類來初始化這些依賴對象。這樣就實現了解耦。
本教程會使用最新的Dagger2(當前的版本是2.2)。這里是官網。你可以在這里找到最新的發布。
准備
Android Studio是必須的。其他:
1. Dagger2 基礎
註解講解:
@Mole這個annotation修飾的類專門用來提供依賴
@Provides這個annotation修飾的方法用在Mole類里
@Inject用來annotation一個依賴(可以是構造方法、field或者一般的方法)
@Component連接@Mole和注入的橋梁
這些名詞看起來非常抽象。下面稍微解釋一下。依賴反射並沒有什麼神奇的地方。只不過是我們需要單獨寫初始化依賴的地方由其他的框架代替了。這個依賴關系也有我們常寫的代碼轉移到了「配置文件」中。
在很久以前,依賴注入的框架就是這樣處理依賴注入的:讀取配置文件的依賴關系,然後用反射的方法初始化被依賴對象並賦值給調用依賴的對象。比如,我們之前在悟空類中初始化金箍棒:
public class Wukong {
private Jingubang jingubang;

public Wukong(){
// 依賴
this.jingubang = Jingubang();
}
}

後來有了使用配置文件的依賴注入(這里都是虛構的文件格式):
<xml>
<com.xiyou.Wukong>
<dependency field="jingubang">
<com.xiyou.Jingubang />
</dependency>
</com.xiyou.Wukong>
</xml>

在悟空使用金箍棒的時候,依賴注入框架自動初始化好了金箍棒,並賦值給了悟空。
現在使用Dagger2。這里就有不得不說的牛X的地方了。因為是在Android里能用的資源沒有後端那麼多。尤其反射消耗比較大!所以Dagger為了滿足移動開發節約資源的需要,沒有使用反射實現依賴注入。而是在編譯的時候同時生成依賴注入的相關代碼。生成代碼的根據就是前文中說明的那些註解(annotation)以及使用這些annotation的類、介面。
總結起來就一句話,Dagger把你需要在悟空類里寫的金箍棒類的初始化代碼都根據註解替你自動生成了!只不過這種生成的代碼比明晃晃的使用new初始化的方法更加復雜一些。
Dagger2 開發步驟
把大象裝冰箱一共分幾步:
定義依賴和被依賴的對象的類,悟空類和金箍棒類。「悟空類」和「金箍棒類」的構造函數用@Inject註解修飾。
定義一個@Mole註解的類,一般叫做XXXMole。裡面寫的@Provides註解修飾的方法。這些@Provides方法返回「悟空類」和「金箍棒類」對象。比如@Provides Wukong provideWukong(){ return new Wukong(); }
創建一個interface,並用@Component註解修飾。一般叫做XXXComponent。裡面寫一個注入方法:void inject(Wukong wk);。這里Wukong只是一個例子。任何你准備要注入的類都可以代替上面參數的Wukong類。
在需要注入的地方寫@Inject的field。
最後,Dagger會根據上面的內容和最後的@Component介面生成一個DaggerXXXComponent的類型,使用這個類型來實現注入。上面的1到3步可以理解為依賴的配置。最後的XXXComponent代替古老的Reflect方式實現注入。
第一步的@Inject修飾的構造函數和`@Mole`的`provideXXX`方法二者可以省略一個。
Dagger可以根據其中的任意一種配置創建依賴的對象。都寫上等於有了雙保險。

上文提到過多次。Dagger 2厲害的地方就在於這個庫完全不用反射,而是用在編譯期生成代碼的方式實現的依賴注入。這個特點導致在Android Studio配置的時候需要做一些額外的工作。
這里假設你已經創建了一個新的Android應用項目。下面打開build.gradle文件,我們一步一步的來完成Dagger2的配置。
3. Android Studio的配置
第一步、
apply plugin: 'kotlin-android' // 非必須
apply plugin: 'kotlin-android-extensions' // 必須!!!

為什麼要加一個新的plugin呢?這個是為後面使用的kapt和provided提供支持的。gradle本身不支持這兩個操作。
第二步、
buildscript {
ext.kotlin_version = '1.0.1-2'
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlin_version"
}
}

第三步、
dependencies {
// ...其他略...
compile 'com.google.dagger:dagger:2.2'
kapt 'com.google.dagger:dagger-compiler:2.2'
provided 'javax.annotation:jsr250-api:1.0'
}

dagger, 我們要用的正主。
dagger-compiler, 用來生成代碼。
java.annotation, 提供Dagger意外的註解
最後,同步Gradle。
使用Dagger 2
下面就是Dagger一展身手的時候了。
首先,我們已經有悟空和金箍棒了。代碼如下:
悟空:
import javax.inject.Inject;

/**
* Created by uncle_charlie on 6/4/2016.
*/
public class Wukong {

@Inject
JinGuBang jinGuBang;

@Inject
public Wukong() {

}

public String useJinGuBang() {
return this.jinGuBang.use();
}
}

金箍棒:
import javax.inject.Inject;

/**
* Created by uncle_charlie on 6/4/2016.
*/
public class JinGuBang {

@Inject
public JinGuBang() {

}

public String use() {
return "user Jing gu bang";
}
}

悟空對金箍棒有依賴,所以金箍棒屬性有@Inject註解修飾。
因為兩個類都需要Dagger創建,所以在構造函數上都有@Inject註解。
第二步、創建@Mole類
創建@Mole註解的類,並在其中添加@Provides註解修飾的方法。這些方法創建被依賴的對象。
import dagger.Mole;
import dagger.Provides;

/**
* Created by uncle_charlie on 6/4/2016.
*/
@Mole
public class XiYouMole {
@Provides
// @Singleton
Wukong provideWukong() {
return new Wukong();
}

@Provides
// @Singleton
JinGuBang provideJinGuBang() {
return new JinGuBang();
}
}

@Singleton註解表明,這個被依賴的對象在應用的生命周期里只有一個實例。
這個里的@Provides方法和前一步說到的@Inject註解的構造函數兩個可以只寫一個。
第三步、@Component介面,連接@Mole和@Inject
@Mole和@Provides方法提供了被依賴的對象。@Inject在@Component介面出現的地方則是指明了需要注入的地方(一般是一個field)。@Component介面就是用來把他們連接起來的。
import android.app.Activity;
import javax.inject.Singleton;
import dagger.Component;

/**
* Created by uncle_charlie on 6/4/2016.
*/
@Component(moles = {XiYouMole.class})
@Singleton
public interface XiYouComponent {
void inject(Wukong wk);
void inject(Activity a);
}

其中inject()方法里使用的對象,就是包含@Inject的field的需要注入的對象。
在這個介面中也可以不用inject()方法,而使用provideXXX()方法後面會有更多介紹。
注意:@Component介面一定要在直接中指明@Mole類型

第四步、使用@Component介面獲取對象
經過前面的步驟,依賴和被依賴對象關系都已經配置好了。下面就來獲取被依賴對象來注入依賴對象。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "##MainActivity";

@Inject
Wukong wukong;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TextView welcomeTextView = (TextView) findViewById(R.id.welcome_textview);
// 1
XiYouComponent xiYouComponent = DaggerXiYouComponent
.builder()
// 2
.xiYouMole(new XiYouMole())
.build();
xiYouComponent.inject(this);
// 3
welcomeTextView.setText(wukong.useJinGuBang());
}
}

首先主要到屬性@Inject Wukong wukong;已經在MainActivity聲明了。這里表明一個依賴關系:這個activity依賴於悟空,並准備注入悟空對象。
Dagger2會在編譯器自動生成依賴注入的代碼,所以在添加上面的代碼之前需要編譯一下。DaggerXiYouComponent就是Dagger根據我們的XiYouMole類生成的代碼。
在這一步給DaggerXiYouComponent的builder添加XiYouMole的實例。如果這個Mole只需要用到無參構造函數的話可以用一種省略用法:create()方法。可以簡寫為:
DaggerXiYouComponent
.builder()
// 2
//.xiYouMole(new XiYouMole())
//.build()
.create();

Component介面的對象調用inject(this)方法之後注入即完成。所以可以直接使用@Inject Wukong wukong;屬性來調用方法:welcomeTextView.setText(wukong.useJinGuBang());最後在activity中顯示方法返回的文字。
運行代碼,看看結果吧。
結論
以上內容可以概括為:什麼被依賴,就把什麼放在@Mole類里(或者什麼被依賴,就給什麼添加@Inject的無參構造函數)。什麼有依賴(@Inject屬性),就把什麼放在@Component介面的inject()方法參數里。(或者有什麼@Inject屬性,就在@Component介面里provide什麼對象)。這個概括不一定嚴密,但是基本用法全部包括了。
依賴注入是很有用的。以上的內容只是Dagger2依賴注入的一部分。各位讀者還需要根據官方文檔多加練習才能更好的理解依賴注入和Dagger的各種用法。

⑶ 做Android 開發怎麼選擇手機

做Android開發選擇手機時,主要從原生性、版本號、屏幕適配三方面考慮。


1. 原生性

原生Android系統是指Google公司發布,沒有經過第三方修改的安卓系統。由於Android是開源系統,所以,有的廠商在引入時,會修改其框架層的源碼以適應當地的市場或者定製自己的專屬功能。顯然,經第三方修改過的安卓系統,不再保證原生安卓的普適性,所以在開發時,可能會出現一些未知的BUG。因而,有條件的情況下,建議盡量選擇谷歌Nexus系列的手機(設備)進行初期版本的開發測試,以保證最大的兼容性。


2. 版本號

Android版本號是不同時期發布的的Android系統版本編號,對用戶而言,它限制了Android的功能特性,對開發者而言,它限制了Android編程介面的種類和數量。由於安卓版本號眾多(截止2016年9月,最新的Android正式版本是7.0),各地區的迭代周期不一,導致搭載不同Android版本的設備分布很不均勻,這就是安卓版本的「碎片化」。

不過,Android各版本之間並不是完全獨立,而是向後兼容的,也就是說,保證低版本的特性在高版本上也能實現,但是不保證高版本的特性可以在低版本上展示。因而,開發者選擇的測試設備搭載的Android版本越低,其開發的應用兼容性就越強。可是實際開發中,不能單一考慮兼容性,還要考慮市場因素。兼容太低版本的設備會極大地限制Android新特性的體現,降低趣味性與互動性,而且還會增加維護成本。

如下圖是谷歌對Android版本號的分布統計圖(截止到2016年5月),可以看到,低於Android 4.0版本號的設備市場佔有率已經少於3%,所以,建議Android開發者在選擇手機時最低兼容到4.0就可以了。


最後,在Android開發中,初期的測試建議在Android模擬器上完成,它可以提供比手機等真實設備更廣泛的特性定製。在產品逐漸成熟並計劃投放到市場時,再參考以上因素,選擇有代表性的手機或其它安卓設備進行調試。

⑷ 編譯調試Android系統原生App - 以Settings為例

本文已過時,最新文章:向大家推薦《使用 AS 開發 System App》 https://xiaozhuanlan.com/system-app

Android原生系統帶有許多原生的App,比如 瀏覽器、錄音機、計算器、設置 等,有些時候,我們需要用到一些系統的功能,或者是對已有的功能做二次開發,比如我上學時給一個公司做過一個Launcher和Wizard,就需要用到系統設置中的某些功能,比如Wifi、聲音、顯示等功能,於是就需要從Settings源碼中提取出需要的功能。

特別是公司自己定製Android系統,需要在上面做一些 系統級的App 的時候,原生App已有的功能就可以通過編譯其源碼的方式直接拿過來改改就能用,而且可用度很高。

這里有兩種情況,分為 原生 的和 公司定製 的系統。無論是原生的還是定製的,類似於Settings這樣需要使用到 系統級或隱藏API 的App,都需要系統簽名文件和編譯系統源碼後得到相應的jar包才可以在IDE中編譯,因為標准SDK根本沒有那些API可供調用。

舉個栗子:

需要額外的Jar就需要自己編譯系統源碼啦,這個是比較麻煩的,有興趣可以試試自己編譯定製自己的Android系統。

** 注意,既然是定製的,源碼、jar、簽名文件,還有系統都是一一對應的,你不能拿其他公司的系統簽名來給你公司的系統app簽名,這樣無法運行的。 **

有了源碼,下一步當然是要跑起來啦。

建議都使用Eclipse來編譯,不要使用AS,因為AS編譯大型的原生App能卡到你吐血,而且出錯提示也不友好。但是用過AS的人都不想再碰Eclipse了有沒有??別急,可以先用Eclipse編譯過了,再貼到AS中,這樣好很多,也很節省時間。

初始化:

放入源碼:

修正res錯誤:

修正src錯誤:

使用到系統級API的,或者AndroidManifest.xml文件中聲明了

那麼沒有系統簽名,直接debug簽名運行是不行的,需要向底層工程師要系統的簽名文件,在源碼目錄
build\target\proct\security
下的 platform.pk8 和 platform.x509.pem ,如果你想看此次編譯Settings是否已成功了,可以適當的在入口加一下Log,然後導出未簽名的apk,使用系統簽名進行簽名後,放到 /system/app/ 下替換掉Settings.apk,然後重啟系統,打開設置,看看Logcat是否輸出里加入的Log。

在不知道系統簽名可以轉換成debug簽名前,老實說我一直都是用Log的方式調試,太特么痛苦了。現在知道後整個人都懵逼了。

我們都希望可以像調試普通app那樣調試系統app,以下是如何通過 openssl 將 platform.pk8 和 platform.x509.pem 轉換成 debug.keystore 文件:

三個命令

此方法來自: http://curlog.com/2016/08/30/android-pk2debug-keystore/

Mac自帶openssl,Linux和Win需要安裝。

然後就可以使用得到的debug簽名配置到eclipse後愉快的調試啦,當然,得先把系統中已經存在的app先刪除掉。然後重啟系統,至於如何配置eclipse的debug簽名,請Google。

使用過AS後,當然希望在AS中也可以調試系統App,抽空再寫篇相關編譯和調試的文章。如果這篇文章幫到你了,給個贊唄。

閱讀全文

與android2016教程相關的資料

熱點內容
雲伺服器宕機概率 瀏覽:227
在線買葯用什麼app知乎 瀏覽:810
ubuntu解壓xz文件 瀏覽:674
宏傑加密時電腦關機 瀏覽:388
自己寫單片機編譯器 瀏覽:598
單片機按鍵閃爍 瀏覽:380
為什麼icloud總是顯連接伺服器失敗 瀏覽:888
如何設置域控伺服器 瀏覽:738
想在上海租房子什麼app好 瀏覽:184
編譯程序各部分是必不可少的嗎 瀏覽:885
編程不超過十行 瀏覽:763
數電編譯器的作用 瀏覽:337
時間演算法與現在有什麼區別 瀏覽:164
7zip解壓後沒文件夾 瀏覽:903
為什麼安卓送玫瑰ios收不到 瀏覽:10
美篇文章加密是什麼意思 瀏覽:83
ilasm編譯dll 瀏覽:39
呼吸燈單片機程序 瀏覽:954
linux域socket 瀏覽:250
qq分身怎麼樣才能加密 瀏覽:457