メモ) powerモジュールを自作したらPermission deniedのエラーが出る
ベースは、hardware/samsung/power から改変 makoのpower, sc03eのpower を参考に修正した。
出来たがlogcatで権限が足りないエラーが出ている
E SamsungPowerHAL: Error opening /sys/devices/system/cpu/cpufreq/interactive/boost: Permission denied E SamsungPowerHAL: Error opening /sys/devices/system/cpu/cpufreq/interactive/boostpulse: Permission denied E SamsungPowerHAL: Error opening /sys/devices/system/cpu/cpufreq/interactive/io_is_busy: Permission denied
ルートではアクセスできる、値も入っている。 init.qcom.power.rcでオーナーの変更が適しているだろうけど、面倒なのでchmodで終わらせる。 以下を追加
rootdir/etc/init.qcom.power.rc
# power.msm8960 access chmod 666 /sys/devices/system/cpu/cpufreq/interactive/boost chmod 666 /sys/devices/system/cpu/cpufreq/interactive/boostpulse chmod 666 /sys/devices/system/cpu/cpufreq/interactive/io_is_busy chmod 666 /sys/devices/system/cpu/cpufreq/interactive/hispeed_freq
メモ)GPSを呼び出すアプリを動かすと落ちる
E AndroidRuntime: Process: com.ppillai.gpsnmea, PID: 21118 E AndroidRuntime: java.lang.RuntimeException: Unable to resume activity {com.ppillai.gpsnmea/com.ppillai.gpsnmea.GpsNmeaActivity}: java.lang.IllegalArgumentException: provider doesn't exist: gps E AndroidRuntime: at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3666) E AndroidRuntime: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3706) E AndroidRuntime: at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2919)
device.mkにGPSの記述が抜けている。追加する。
# GPS PRODUCT_PACKAGES += \ android.hardware.gnss@1.0-impl \ android.hardware.gnss@1.0-service \ gps.msm8960 \ libloc_eng \ libloc_core \ libgps.utils
メモ)GPSモジュールを含めてビルドすると以下のエラーになる。
hardware/libhardware/include/hardware/gnss-base.h:17:5: error: expected identifier GNSS_CONSTELLATION_UNKNOWN = 0, hardware/libhardware/include/hardware/gnss-base.h:18:5: error: expected identifier GNSS_CONSTELLATION_GPS = 1, hardware/libhardware/include/hardware/gnss-base.h:19:5: error: expected identifier GNSS_CONSTELLATION_SBAS = 2, ..
hardware/libhardware/include/hardware/gps.hをみるとgnss-base.hを含む記述があり、device/samsung/jf-common/include/hardware/gps.hをみるとその記述が入っていない
7.1まではgps.hだけだったが、8.xからgps.hとgnss-base.hになった。
#include <hardware/hardware.h> #include "gnss-base.h" __BEGIN_DECLS
gps.hにgnss-base.hのincludeの記述を追加して、gnss-base.hをローカルのincludeへコピーする
$ cp hardware/libhardware/include/hardware/gnss-base.h device/samsung/jf-common/include/hardware/
BoardConfig.mkに以下をセットしないとgps.msm8960.soが生成されない。 (hardware/qcom/gps/Android.mk,hardware/qcom/gps/msm8960配下のAndroid.mkを参照)
# GPS BOARD_VENDOR_QCOM_GPS_LOC_API_HARDWARE := $(TARGET_BOARD_PLATFORM) BOARD_VENDOR_QCOM_LOC_PDK_FEATURE_SET := true TARGET_NO_RPC := true #USE_DEVICE_SPECIFIC_GPS := true
メモ)アプリ「レコーダ」が動作しない。録音ボタンを押すと落ちる
D AndroidRuntime: Shutting down VM E AndroidRuntime: FATAL EXCEPTION: main E AndroidRuntime: Process: org.lineageos.recorder, PID: 4397 E AndroidRuntime: java.lang.IllegalArgumentException: The key must be an application-specific resource id. E AndroidRuntime: at android.view.View.setTag(View.java:21742) E AndroidRuntime: at android.support.transition.Scene.setCurrentScene(Scene.java:195) E AndroidRuntime: at android.support.transition.TransitionManager.beginDelayedTransition(TransitionManager.java:407) E AndroidRuntime: at android.support.transition.TransitionManager.beginDelayedTransition(TransitionManager.java:368) E AndroidRuntime: at org.lineageos.recorder.RecorderActivity.refresh(RecorderActivity.java:330)
落ちている箇所
packages/app/src/main/java/org/lineageos/recorder/RecorderActivity.java(300)
updateSystemUIColors(); TransitionManager.beginDelayedTransition(mConstraintRoot); set.applyTo(mConstraintRoot);
frameworks/support/transition/src/android/support/transition/TransitionManager.java
public static void beginDelayedTransition(@NonNull final ViewGroup sceneRoot, @Nullable Transition transition) { if (!sPendingTransitions.contains(sceneRoot) && ViewCompat.isLaidOut(sceneRoot)) { if (Transition.DBG) { Log.d(LOG_TAG, "beginDelayedTransition: root, transition = " + sceneRoot + ", " + transition); } sPendingTransitions.add(sceneRoot); if (transition == null) { transition = sDefaultTransition; } final Transition transitionClone = transition.clone(); sceneChangeSetup(sceneRoot, transitionClone); Scene.setCurrentScene(sceneRoot, null); sceneChangeRunTransition(sceneRoot, transitionClone); } }
frameworks/support/transition/src/android/support/transition/Scene.java
static void setCurrentScene(View view, Scene scene) { view.setTag(R.id.transition_current_scene, scene); }
R.id.transition_current_sceneが無いのかと思ったがあった。
$ cat frameworks/support/transition/res/values/ids.xml <resources> <item name="transition_scene_layoutid_cache" type="id"/> <item name="transition_current_scene" type="id"/>
アプリのソースが他とちがうのか確認。同じだった。
$ git clone -b lineage-15.1 --single-branch https://github.com/LineageOS/android_packages_apps_Recorder.git $ diff -u -r ~/crdroid-8.0/packages/apps/Recorder ~/temp/android_packages_apps_Recorder
frameworksのsupportを比較するが、差がほとんどない。原因がわからないので、Recorderはビルドから外そう
$ git clone -b lineage-15.1 --single-branch https://github.com/LineageOS/android_frameworks_support.git $ diff -u -r ~/crdroid-8.0/frameworks/support/transition ~/temp/android_frameworks_support/transition
メモ)frameworks/supportのdiffで気づいた点を直す
testコードでは差があるが、testコードなので無視し、メインで関係するところを修正
--- /home/labo/crdroid-8.0/frameworks/support/transition/api14/android/support/transition/GhostViewApi14.java 2022-10-21 17:26:12.699904900 +0900 +++ /home/labo/temp/android_frameworks_support/transition/api14/android/support/transition/GhostViewApi14.java 2022-10-31 12:00:31.397353400 +0900 @@ -150,8 +150,8 @@ final int[] viewLocation = new int[2]; getLocationOnScreen(location); mView.getLocationOnScreen(viewLocation); - viewLocation[0] -= mView.getTranslationX(); - viewLocation[1] -= mView.getTranslationY(); + viewLocation[0] = (int) (viewLocation[0] - mView.getTranslationX()); + viewLocation[1] = (int) (viewLocation[1] - mView.getTranslationY()); mDeltaX = viewLocation[0] - location[0]; mDeltaY = viewLocation[1] - location[1]; // Monitor invalidation of the target view.
メモ)Recorderアプリをビルド対象から外す
vendor/lineage/config/common_full.mk
# Inherit common Lineage stuff $(call inherit-product, vendor/lineage/config/common.mk) PRODUCT_SIZE := full -# Recorder -PRODUCT_PACKAGES += \ - Recorder
メモ)カーネルを8.0に変更する
$ git clone -b lineage-15.0 --single-branch https://github.com/LineageOS/android_kernel_samsung_jf.git
binderを32ビットに変更する
BoardConfig.mkを修正する
#TARGET_USES_64_BIT_BINDER := true
起動に失敗するので8.1のカーネルを使って、defconfigは8.0用にして使う
主な違いは
CONFIG_NET_NS=y CONFIG_DEFAULT_TCP_CONG="cubic" CONFIG_ANDROID_BINDER_IPC=y CONFIG_ANDROID_BINDER_IPC_32BIT=y CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"
かな。出来たけど、イマイチ遅いので公開はしない。