メモ) 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];
メモ)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"
かな。出来たけど、イマイチ遅いので公開はしない。