在AOSP中增加預設app (3) : 利用Android Studio來進行編輯
Contents
平台及環境設置
平台
實驗平台:Nexus 5
Android版本:android-4.4_r1
前置知識: [Howto Build Android KitKat (4.4) for the Google Nexus 5][6]
環境設置
在AOSP資料夾中
source build/envsetup.sh
lunch aosp_hammerhead-userdebug
目標:利用Android Studio來新增APP (命名為World)
在上一篇文章中,說明了如何copy一份已有的project來改寫。但是寫Android App有許多煩雜的地方,有時候還是需要IDE來幫助比較快,這裡找了一個比較tricky的方法來使用IDE。
新增Android Studio Project
我們直接從Android Studio中產生一個空的project,命名為World
。
新增project時記得選empty Activity,之後比較好做。
建立soft link
在剛剛產生出來的Android Project路徑底下,World/app/src/main
應該有java、res資料夾,以及AndroidManifest.xml。
在AOSP/packages/apps
建立新目錄World
,並在其底下建立起上述3個檔案之軟連結(soft link)。
mkdir $ANDROID_BUILD_TOP/packages/apps/World && cd $_
ln -s AndroidProject目錄/World/app/src/main/java java
ln -s AndroidProject目錄/World/app/src/main/res res
ln -s AndroidProject目錄/World/app/src/main/AndroidManifest.xml AndroidManifest.xml
撰寫Android.mk
參考Secrets of Android.mk此份文件當中的Building a simple APK目錄。將其加到AOSP/packages/apps/World
資料夾下。
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
# Build all java files in the java subdirectory
LOCAL_SRC_FILES := $(call all-subdir-java-files)
# Name of the APK to build
LOCAL_PACKAGE_NAME := LocalPackage
# Tell it to build an APK
include $(BUILD_PACKAGE)
修改掉所有appcompat的部份
再來使用mm
在AOSP/packages/apps/World
進行編譯,運氣不好的話,編譯會出現找不到某些命名的錯誤。這是因為Google為了讓各種app看起來更有一致性,將Android Studio的新Project皆使用Appcompat此library來協調視覺效果。可是此library並不存在於預設的編譯環境當中。為了為了節省麻煩,將其去掉。
style.xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
並把MainActivity中可能會用ActionBarActivity或是AppCompatActivity來替代Activity,請一律換成Activity來使用。
MainActivity.java
package com.android.world;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
最後,我在編譯途中還遇到標籤問題。預設的編譯環境似乎不允許著無命名的字串存在。也就是說,如果你有任何的text標籤是直接給予字串值的,可能會編譯失敗。
修改前
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World" />
可能要改將字串引用自string.xml才能編譯成功。
修改後
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
res/values/string.xml
<resources>
<string name="app_name">World</string>
</resources>
編譯
使用mm
進行編譯,此次應該可以順利通過了。
之後直接在Android Studio裡對Application進行編輯,由於建立了軟連結,AOSP內部的內容也會同步更改。
這樣就可以用Android Studio來撰寫APP囉。