这是indexloc提供的服务,不要输入任何密码
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 87 additions & 0 deletions Android Termux stuff
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
Focus stacking:

pkg install git
pkg install make
pkg install clang
apt install x11-repo && apt update && apt install opencv
pkg install pkg-config
git clone https://github.com/PetteriAimonen/focus-stack.git
cd focus-stack/
make
cd build
./focus-stack ~/focus-stack
pkg install python (needed because for some reason OpenCV is linked with a python lib).

Ultralytics
pkg update
pkg install make
pkg install clang
pkg install patchelf
pkg install ninja
pkg install cmake
pkg install pkg-config
pkg install python
apt install x11-repo && apt update && apt install opencv-python
pkg install python-torch
pkg i tur-repo
pkg i python-pandas
pip install ultralytics (it will fail at OpenCV)
pip install seaborn
pip install requests
pip install py-cpuinfo
pip install pyyaml
pkg install python-torchvision
pip install tqdm
pip install ultralytics-thop
pip install psutil
pkg install python-scipy
pip install ultralytics --no-deps
Once all is done, just type: "yolo" and see if it works.


Disabling various Android things that kill your processes
(usb debug)
adb shell "/system/bin/device_config set_sync_disabled_for_tests persistent; /system/bin/device_config put activity_manager max_phantom_processes 2147483647; settings put global settings_enable_monitor_phantom_procs false"
adb shell "/system/bin/device_config put activity_manager power_check_max_cpu_1 256; /system/bin/device_config put activity_manager power_check_max_cpu_2 256; /system/bin/device_config put activity_manager power_check_max_cpu_3 256; /system/bin/device_config put activity_manager power_check_max_cpu_4 256;"
adb shell "settings put global activity_manager_constants power_check_max_cpu_1=256; settings put global activity_manager_constants power_check_max_cpu_2=256; settings put global activity_manager_constants power_check_max_cpu_3=256; settings put global activity_manager_constants power_check_max_cpu_4=256;"
(root)

sudo device_config set_sync_disabled_for_tests persistent

sudo device_config put activity_manager max_phantom_processes 2147483647
sudo settings put global settings_enable_monitor_phantom_procs false

(this prevents Android from killing your long running processes after a while. There is a "new" way and an "old" way to set those settings, but at least on some OSes, such as LineageOS22 the old way is used. So I am including both)
sudo settings put global activity_manager_constants power_check_max_cpu_1=256
sudo settings put global activity_manager_constants power_check_max_cpu_2=256
sudo settings put global activity_manager_constants power_check_max_cpu_3=256
sudo settings put global activity_manager_constants power_check_max_cpu_4=256
sudo device_config put activity_manager power_check_max_cpu_1 256
sudo device_config put activity_manager power_check_max_cpu_2 256
sudo device_config put activity_manager power_check_max_cpu_3 256
sudo device_config put activity_manager power_check_max_cpu_4 256

Allowing your app to recive alarms more often when not idle (every minute)
(root)
sudo settings put global alarm_manager_constants min_interval 60000
sudo device_config put alarm_manager min_interval 60000
(adb shell)
adb shell "settings put global alarm_manager_constants min_interval=60000"
adb shell "/system/bin/device_config put alarm_manager_constants min_interval 60000"

Allow background apps to run longer from broadcast receivers (such as all termux api stuff). It will show the App not responding menu, rather than kill it. Not ideal, but there is no other way of disabling this restriction without recompiling some Android source code:
(root)
sudo settings put secure anr_show_background 1
(adb)
adb shell "settings put secure anr_show_background 1"

Make the app receive more alarms than allowed while idle (once evey 9 minutes or so), and allowing it to do more work while it's idle. For some reason it doesn't work on LineageOS 22.
(root)
sudo settings put global alarm_manager_constants allow_while_idle_long_time=20000,allow_while_idle_whitelist_duration=300000
sudo device_config put alarm_manager_constants allow_while_idle_long_time 20000
sudo device_config put alarm_manager_constants allow_while_idle_whitelist_duration 300000

(adb)
adb shell "settings put global alarm_manager_constants allow_while_idle_long_time=20000,allow_while_idle_whitelist_duration=300000"
adb shell "/system/bin/device_config put alarm_manager_constants allow_while_idle_long_time 20000"
adb shell "/system/bin/device_config put alarm_manager_constants allow_while_idle_whitelist_duration 300000"
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@




<application
android:name=".TermuxAPIApplication"
android:allowBackup="true"
Expand Down Expand Up @@ -151,6 +152,9 @@
android:exported="false"
tools:ignore="MissingClass" />

<receiver android:name=".apis.AlarmAPI$AlarmReceiver" />
<receiver android:name=".apis.CameraPhotoAPI$AlarmReceiver" />




Expand Down
4 changes: 4 additions & 0 deletions app/src/main/java/com/termux/api/TermuxApiReceiver.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import android.provider.Settings;
import android.widget.Toast;

import com.termux.api.apis.AlarmAPI;
import com.termux.api.apis.AudioAPI;
import com.termux.api.apis.BatteryStatusAPI;
import com.termux.api.apis.BrightnessAPI;
Expand Down Expand Up @@ -87,6 +88,9 @@ private void doWork(Context context, Intent intent) {
case "AudioInfo":
AudioAPI.onReceive(this, context, intent);
break;
case "Alarm":
AlarmAPI.onReceive(this, context, intent);
break;
case "BatteryStatus":
BatteryStatusAPI.onReceive(this, context, intent);
break;
Expand Down
79 changes: 79 additions & 0 deletions app/src/main/java/com/termux/api/apis/AlarmAPI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.termux.api.apis;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.os.SystemClock;
import android.util.Log;
import android.widget.Toast;

import com.termux.api.TermuxApiReceiver;
import com.termux.api.util.ResultReturner;
import com.termux.shared.logger.Logger;

import java.io.IOException;
import java.util.Date;
import java.util.Objects;

public class AlarmAPI {

private static final String LOG_TAG = "AlarmAPI";
private static TermuxApiReceiver current_receiver;
private static Intent original_intent;
private static int wl_duration;

static public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {

if(wl_duration!=0) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "termux_api:Wakelock");
wl.acquire(wl_duration);
}

final String command = Objects.toString(intent.getStringExtra("command"));
Log.i(LOG_TAG, "Command is: " + command);

try {

Process process = Runtime.getRuntime().exec(command);
} catch (IOException e) {
throw new RuntimeException(e);
}
//wl.release();
}

}

public static void onReceive(TermuxApiReceiver apiReceiver, final Context context, Intent intent) {
Logger.logDebug(LOG_TAG, "onReceive");

current_receiver=apiReceiver;
original_intent=intent;
int seconds=Integer.parseInt(Objects.toString(intent.getStringExtra("seconds"), "0"));
wl_duration=Integer.parseInt(Objects.toString(intent.getStringExtra("wl_duration"), "0"));
final String command = Objects.toString(intent.getStringExtra("command"));

Intent alarm_intent = new Intent(context, AlarmReceiver.class);
alarm_intent.putExtra("command", command);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarm_intent, 0);

long nextTrigger = System.currentTimeMillis() +seconds*1000;
Log.i(LOG_TAG, System.currentTimeMillis() + ": scheduling next alarm at " + nextTrigger);

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);

AlarmManager.AlarmClockInfo ac = new AlarmManager.AlarmClockInfo(nextTrigger, null);
alarmManager.setAlarmClock(ac, pendingIntent);


ResultReturner.noteDone(current_receiver, original_intent);

}


}
Loading