1. 引言
Autojs6是一款优秀的安卓自动化软件,保活能力强,稳定性好。
当然也不贬低AutoX.js,这个软件功能也同样强大,只是个人能力时间场景有限,没有深入使用。
我在以前,学习autojs时,简单的阅读了源码,把原生的autojs的32位版本修改成64版本(不知道更新依赖库,所以也不了了之,建议大家不要尝试),给autojs6或者autoX.js添加下面的三个功能。
由于不会提pr,为了加这三个功能,无论是autojs6还是autoX.js,都跟着编译了几个版本,后来也没有编译了。能用就行。
大家不要问我要其他的,有点找不到了,编译也很麻烦。
2. 修改
目前手上只有编译了autojs6的6.3.3版本,分享给大家。
1.添加了一些常用权限,如蓝牙,闪光灯,termux权限。
2.对脚本创建快捷方式进行了修复。可以正常创建快捷方式。
3.添加了隐藏任务开关。
gif,放大观看
autojs6在后台运行时,开启隐藏,多任务界面就看不到autojs6,关闭,则能够看到autojs6。这样autojs6就一直在后台运行。开启应用自启和电池优化白名单,加锁,就能一直运行。不同手机功能不同,请自行寻找解决方法。
以下代码,提供思路,我也放出来。分享的链接处理对应不同架构apk。
添加权限
<!-- 添加闪光灯权限-->
<uses-permission android:name="android.permission.FLASHLIGHT"/>
<uses-permission android:name="android.permission.CAMERA"/>
<!-- 添加蓝牙权限-->
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<!-- 添加termux权限-->
<uses-permission android:name="com.termux.permission.RUN_COMMAND"/>
隐藏任务
为了方便理解思路,这里以原生autojs最后一个版本,为例,autojs6使用了kotlin版本,可以查找我分享的autojs6 v6.3.3源码复制。
BaseActivity.java
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void setHideModeEnabled(boolean enabled) {
ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
if(am != null) {
List<ActivityManager.AppTask> tasks = am.getAppTasks();
if (tasks != null && tasks.size() > 0) {
tasks.get(0).setExcludeFromRecents(enabled);
}
}
}
DrawerFragment.java
new DrawerMenuItem(R.drawable.ic_night_mode, R.string.text_hide_task, R.string.key_hide_task, this::toggleHideMode)
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private void toggleHideMode(DrawerMenuItemViewHolder holder) {
((BaseActivity) getActivity()).setHideModeEnabled(holder.getSwitchCompat().isChecked());
}
package org.autojs.autojs.ui.main
MainActivity.java 中的onCreate方法加入
if(Pref.isHideModeEnabled()){
super.setHideModeEnabled(true);
}
Pref.java
public static boolean isHideModeEnabled() {
return def().getBoolean(getString(R.string.key_hide_task), false);
}
autojs6对应version6.3.3
org.autojs.autojs.ui.BaseActivity.kt
//基本窗口类添加设置隐藏模式,方便设置隐藏模式
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
open fun setHideModeEnabled(enabled: Boolean) {
val am = getSystemService(ACTIVITY_SERVICE) as ActivityManager
if (am != null) {
val tasks = am.appTasks
if (tasks != null && tasks.size > 0) {
tasks[0].setExcludeFromRecents(enabled)
}
}
}
org.autojs.autojs.ui.main.MainActivity.kt#onCreate
// 打开应用读取并设置隐藏任务属性
if(Pref.getBoolean(R.string.key_hide_task_enabled,false)){
super.setHideModeEnabled(true);
}
org.autojs.autojs.ui.main.drawer.DrawerFragment.kt
//多任务隐藏
private lateinit var mHideTaskItem: DrawerMenuToggleableItem
//隐藏任务
mHideTaskItem = DrawerMenuToggleableItem(
object : DrawerMenuItemCustomHelper(mContext) {
override val isActive: Boolean
get() = Pref.getBoolean(R.string.key_hide_task_enabled,false)
override fun toggle() {
TODO("Not yet implemented")
}
override fun toggle(aimState: Boolean) {
(activity as BaseActivity?)!!.setHideModeEnabled(aimState)
Pref.putBoolean(R.string.key_hide_task_enabled, aimState)
}
},
R.drawable.ic_hide_task,
R.string.text_hide_task,
DrawerMenuItem.DEFAULT_DIALOG_CONTENT,
R.string.key_hide_task_enabled,
)
创建快捷方式
package org.autojs.autojs.external.shortcut;
ShortcutManager.java
@RequiresApi(api = Build.VERSION_CODES.O)
public void addPinnedShortcut(CharSequence label, String id, Icon icon, Intent intent) {
if (!mShortcutManager.isRequestPinShortcutSupported()) {
return;
}
ShortcutInfo shortcut = buildShortcutInfo(label, id, icon, intent);
int req = getRequestCode(id);
Intent secondIntent = new Intent();
secondIntent.setAction("android.settings.CAPTIONING_SETTINGS");
PendingIntent successCallback = PendingIntent.getBroadcast(mContext, 0,
secondIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mShortcutManager.requestPinShortcut(shortcut, successCallback.getIntentSender());
}
private ShortcutInfo buildShortcutInfo(CharSequence label, String id, Icon icon, Intent intent) {
return new ShortcutInfo.Builder(mContext, id)
.setIntent(intent)
.setShortLabel(label.toString())//就这两行代码改成一样,就不会出现闪退卡死,其他没有动
.setLongLabel(label.toString())//就这两行代码改成一样,就不会出现闪退卡死
.setIcon(icon)
.build();
}
3. 链接
蓝奏:https://wwi.lanzoup.com/b0izjk7vg 密码:52pj
现在我基本很少执行定时任务了,经常使用的就是定时报时或者语音提醒。随着时代的发展,感觉现在的手机智能化也还可以。但是还是需要使用autojs6,毕竟可以自己写代码,功能扩展性好。手机的自动化功能毕竟有限。
最后,还是希望大家理性看待脚本,认真享受生活。
这是我自己编译的版本,属于自用的。保证无毒无害。希望大家喜欢。