基於Nano Pi硬件的AS項目開發
- Andro Studio集成Nano Pi硬件資源庫
打開AS,新建工程之後,打開appàsrcàmain其目錄結構應該是如下樣式:
─ main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ └── friendlyarm │ │ ├── FriendlyThings │ │ │ ├── BoardType.java │ │ │ ├── FileCtlEnum.java │ │ │ ├── GPIOEnum.java │ │ │ ├── HardwareControler.java │ │ │ ├── SPIEnum.java │ │ │ ├── SPI.java │ │ │ └── WatchDogEnum.java │ ├── jniLibs │ │ ├── arm64-v8a │ │ │ └── libfriendlyarm-things.so │ │ └── armeabi │ │ └── libfriendlyarm-things.so └── res |
這個是Nano Pi的資源目錄,去官網下載源碼之後,直接複製到appàsrcàmainàjava裏面,不要做任何修改。
在java的同級目錄下新建jniLibs文件夾,將Nano Pi的庫引入
|
- 系統簽名
因爲要開發的軟件最終要訪問Nano Pi的硬件資源,所以必須給軟件打上系統簽名。Nano Pi官方推薦的方式是在android 8.1的源碼上進行編譯,然後獲取系統簽名。因此這裏提供兩種方式,第一種是官方方式,第二種是個人方式。個人比較推崇第二種方式,因爲android 8.1源碼太大,下載慢。
- 官方方式
第一步:修改AndroidManifest.xml
在應用程序的AndroidManifest.xml中的manifest節點中加入以下屬性:
android:sharedUserId="android.uid.system" |
第二步:修改Android.mk
編寫一個Android.mk文件(最簡單的方法就是拷貝示例中的Android.mk文件),修改Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行:
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := $(call all-subdir-java-files) LOCAL_PACKAGE_NAME := 你的項目名 LOCAL_CERTIFICATE := platform LOCAL_MODULE_TAGS := optional LOCAL_CFLAGS := -lfriendlyarm-hardware include $(BUILD_PACKAGE) |
最後一步:在 Android源代碼中編譯你的app
先在 Android源代碼根目錄調用 setenv.sh 導出環境變量,然後進入你的 app 目錄,使用mm命令編譯;
例子:編譯 GPIO_LED_Demo,以RK3399平臺爲例:
cd rk3399-android-8.1 . setenv.sh cd vendor/friendlyelec/apps/GPIO_LED_Demo mm |
更多請查看官方鏈接:http://wiki.friendlyarm.com/wiki/index.php/FriendlyThings_for_RK3399/zh
- 個人方式
第一步:打包apk
在進行這一步之前,首先應在AndroidManifest.xml中的manifest節點中加入以下屬性:
android:sharedUserId="android.uid.system" |
因爲我們在調試軟件的時候不能先加入這一節點,否則軟件將會運行報錯,無法安裝也無法調試,所以我們先要把非訪問硬件功能實現,在真機調試完畢之後,在加入這一節點。然後使用AS打包軟件。具體如何打包請自行百度。
第二步:下載android 8.1 簽名工具
在官方給出的資料裏面,我們很輕易就能找到相對應的簽名工具。具體鏈接在:
FriendlyELEC-RK3399àandroid-platform-key-filesàandroid8裏面。
下載上圖三個文件,然後將其複製到Ubuntu任意目錄下。
第三步:在Ubuntu下安裝jdk開發環境
首先查看是否已經安裝jdk,ctrl+Alt+T打開終端,輸入命令,如果出現如下所示,即說明已經安裝過jdk開發環境了,所以跳過以下步驟,否則請按照以下步驟安裝jdk。
kylin@ceoifung:~$ java -version java version "13.0.2" 2020-01-14 Java(TM) SE Runtime Environment (build 13.0.2+8) Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing) |
如果沒有出現上述的內容,表明沒有安裝jdk開發環境,所以請跟隨我接下來操作。
- 首先進入以下網址下載jdk:
https://www.oracle.com/java/technologies/javase-jdk13-downloads.html
下載下圖所框選的jdk。
- 第二步:解壓jdk包
將下載的jdk包複製到Ubuntu下,在終端中解壓文件:
kylin@ceoifung:~$ tar -zxvf jdk-13.0.2_linux-x64_bin.tar.gz |
- 第三步:將解壓後的文件移到/usr/lib目錄下
cd /usr/lib sudo mkdir –p jdk/jdk-13.0.2 sudo mv ~/jdk-13.0.2 /usr/lib/jdk ll jdk/jdk-13.0.2 |
執行完之後,出現下圖所示的內容,即表明移動成功。
- 第四步:配置java環境變量
這裏是將環境變量配置在etc/profile,即爲所有用戶配置JDK環境。
使用命令打開/etc/profile文件,進行編輯:
sudo vim /etc/profile |
在末尾添加以下幾行文字:
#set java env export JAVA_HOME=/usr/lib/jdk/jdk-13.0.2 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH |
執行命令使修改立即生效
source /etc/profile |
查看java開發環境是否安裝完畢,終端中輸入如下指令:
java -version |
第四步:複製libconscrypt_openjdk_jni.so文件
libconscrypt_openjdk_jni.so文件存在於android8.1源碼的以下路徑中:
prebuilts/sdk/tools/linux/lib64/ |
取得libconscrypt_openjdk_jni.so文件之後,將其複製到簽名工具所在的根目錄下。
第五步:簽名
在簽名工具的根目錄下,將之前打包的apk文件複製到此,然後打開終端,輸入以下命令:
java -Djava.library.path=. -jar signapk.jar platform.x509.pem platform.pk8 app-release.apk app-release-signed.apk |
注意:app-release.apk,簽名前的安裝包
app-release-signed.apk,簽名後的安裝包
如果你待簽名的apk文件名爲app-release.apk,可以直接在終端運行start.sh文件進行簽名
./start.sh |
如果apk名稱不爲app-release的話,打開start.sh文件進行修改
運行完該條指令之後,簽名工具的根目錄會生成簽名之後的安裝包
第六步:通過ADB安裝apk 到開發板上
- 首先查看是否已經安裝了adb,終端輸入以下命令:
adb version |
如果出現下圖所示的情況,表示adb沒有安裝。
如果沒有出現上圖所示情況,那麼請略過下面的步驟:
- 安裝adb
sudo apt-get install android-tools-adb adb version |
- 下載apk到開發板上
選擇簽名之後的apk文件,然後在終端輸入指令下載
adb install-multiple -r -t app-release-signed.apk |
出現下圖所示情況表明安裝完畢
我們提供了腳本,腳本內容即爲下載指令終端中輸入
./install.sh //如果簽名之後的文件不一致,請修改在運行 |
如果出現如下圖所示的情況,請先到開發板中卸載之前的舊版本軟件,因爲之前調試時所用的簽名與現在簽名不一致。
- 檢驗結果
自行檢測硬件資源訪問是否有效。