韌館-LearnHouse

Archive for the '程式&軟體' Category

[Android]如何在AOSP下編譯JNI

JNI是什麼,我就不多作介紹,估狗一下應該資料就一堆,而且也會有很多教學。不過一般找到的教學都是透過Android Studio寫APP使用JNI的方式。卻找不到如果是AOSP開發者,如何撰寫JNI與配置Android.mk。

首先在你的上層JAVA的APP新增class介面來提供呼叫底層的API,其中System.loadLibrary的部分還可以不用先寫,不過寫了也不會影響產出header檔。
這裡宣告一個呼叫底層的函式,帶入整數值並回傳字串。 Read more...

2022年7 月 posted by admin in 程式&軟體 and have No Comments

[Android]Play Auto Installs (PAI),編譯失敗FAILED: ninja: unknown target 'MODULES-IN-PlayAutoInstallConfig'

由於Google有明確說此文件為Confidential material,也因為如此,當使用相關技術的開發時,常常會面臨實作不出來或遇到問題,上網Google卻又找不到相關討論或解決方法。
有鑑於此,在這記錄一下解決方法供給其他OEM的開發者參考,因此就不細說其運作原理,知道的人就知道要做什麼
不過還是要感謝對岸的作者,我也是參考它的範例進行修改:https://blog.csdn.net/xct841990555/article/details/80896429
Read more...

2022年1 月 posted by admin in 程式&軟體 and have No Comments

[Android]OTA差分包(Incremental OTA)升級失敗訊息與解法

我們都知道要產生Incremental OTA的方法可以透過下列指令:

$./build/tools/releasetools/ota_from_target_files -v --block -p out/host/linux-x86 -k YOUR_KEY -i target_files-old.zip target_files-new.zip update.zip

其中
-k YOUR_KEY指的是你的KEY路徑,通常是vendor/company/security/releasekey
-i target_files-old.zip是上一次build的target file,產生在./out/target/product/device/obj/PACKAGING/target_files_intermediates下;target_files-new.zip則是這次build的,路徑也是在一樣的地方;update.zip則是要產生的差分包。
紅色的部分是依你的project不同則有不同的名稱。
Read more...

2021年8 月 posted by admin in 程式&軟體 and have No Comments

[Android]監聽螢幕狀態與主動喚醒螢幕

由於需要APP能在Android TV進入sleep mode後還能透過網路被喚醒並播放聲音,經過一陣子的survey,發現可以用以下的方法來達到效果,先用wake lock喚醒螢幕再播放聲音。
首先要加入權限

<uses-permission android:name="android.permission.WAKE_LOCK" />

Read more...

2021年1 月 posted by admin in 程式&軟體 and have No Comments

[Android]透過Parcelable在Activity間傳遞ArrayList物件

Android開發人員都知要傳遞物件給Activity,不能直接寫一個public的function來set資料
而要透過intent來夾帶傳遞的訊息,能傳遞的資料型態又不能是自己定義的object
別說自己定義的了,就連ArrayList,也無法隨意的塞進去intent來傳遞
只能是以下幾種:
Read more...

2020年12 月 posted by admin in 程式&軟體 and have No Comments

[Android]用程式執行adb shell指令

開發APP有時候會遇到想直接用shell指令的方式來執行想要的程式,而不想為了一個功能寫了一堆Java code
透過程式執行shell指令有兩中方式,一種是只要執行,不管執行結果的回覆內容比較簡單,如下:

try {
    Runtime.getRuntime().exec("you shell command");
} catch (Exception e) {
    Log.e("Error: ", e.getMessage());
}

Read more...

2020年7 月 posted by admin in 程式&軟體 and have No Comments