我试图通过任务程序任务设置LineageOS系统配置文件。我找到了CM13的一些例子,但是我无法在LineagesOS上使用它。我对Java并不多。
到目前为止我做了什么......
创建了一个Tasker任务" Java Function&#34 ;:proman = cyanogenmod.app.ProfileManager.getInstance {cyanogenmod.app.ProfileManager}(上下文)
第二个" Java功能":proman.setActiveProfile(%Newprofile)
%Newprofile =" 4G"
但是我的任务日志中出现以下错误:
> 11.30.17/E Java Function: ->
> 11.30.17/JU analyse: target: proman expected: null
> 11.30.17/JU target: analyse done: proman: class: cyanogenmod.app.ProfileManager obj: cyanogenmod.app.ProfileManager@1f3308e partWithoutMods: null static: false const false casted: false
> 11.30.17/JU analyse: returnval: java.lang.Void expected: null
> 11.30.17/JU returnval: analyse done: java.lang.Void: class: java.lang.Void obj: null partWithoutMods: null static: true const false casted: false
> 11.30.17/JU initClass: class: java.lang.Void obj: null partWithoutMods: java.lang.Void static: true const false casted: false
> 11.30.17/JU initClass: retnovar: init with array handling -> class java.lang.Void
> 11.30.17/JU initClass: class: cyanogenmod.app.ProfileManager obj: cyanogenmod.app.ProfileManager@1f3308e partWithoutMods: proman static: false const false casted: false
> 11.30.17/JU initclass: target: use object class: cyanogenmod.app.ProfileManager
> 11.30.17/JU analyse: param0: %Newprofile expected: class java.lang.String
> 11.30.17/Variables doreplresult: |%Newprofile| -> |4G|
> 11.30.17/JU param0: analyse done: %Newprofile: class: java.lang.String obj: 4G partWithoutMods: null static: false const true casted: false
> 11.30.17/E param 0 class: class java.lang.String
> 11.30.17/E targetClass: class cyanogenmod.app.ProfileManager
> 11.30.17/E object: cyanogenmod.app.ProfileManager@1f3308e
> 11.30.17/E method: public void cyanogenmod.app.ProfileManager.setActiveProfile(java.lang.String)
> 11.30.17/E arg0 class java.lang.String value 4G
> 11.30.17/E Java Function: java.lang.reflect.InvocationTargetException
> 11.30.17/ Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'boolean cyanogenmod.app.IProfileManager.setActiveProfileByName(java.lang.String)' on a null object reference
> 11.30.17/ cyanogenmod.app.ProfileManager.setActiveProfile(Unknown Source)
> 11.30.17/ java.lang.reflect.Method.invoke(Native Method)
> 11.30.17/ net.dinglisch.android.taskerm.ExecuteService.c(Unknown Source)
> 11.30.17/ net.dinglisch.android.taskerm.ExecuteService.a(Unknown Source)
> 11.30.17/ net.dinglisch.android.taskerm.ExecuteService.a(Unknown Source)
> 11.30.17/ net.dinglisch.android.taskerm.fd.run(Unknown Source)
> 11.30.17/E result: stop task (error)
> 11.30.17/E Error: 1
> 11.30.17/MacroEdit action finished exeID 1 action no 1 code 664 status: Err next 1
任何人都可以给我一个提示来缩小我的错误范围吗?我猜对象的创建出了问题" proman"。
感谢。
答案 0 :(得分:2)
我知道这是一篇较老的帖子,但我在做一些研究时偶然发现了这篇文章,以验证自从LineageOS从原始CM源分拆后API名称是否发生了变化,并希望提供我希望有用的内容信息。
使用Tasker在LineageOS上设置系统配置文件不需要允许的SELinux。我有一个自从CM12或CM13以来仍然可以在LineageOS上运行的Tasker配置文件,我的SELinux状态当前正在执行。
LineageOS,Android v7.1.2
附件是显示Java逻辑的屏幕截图,我将在下面包含完整的XML任务。
Setting System Profile in LineageOS with Tasker
<TaskerData sr="" dvi="1" tv="5.0u2m">
<Task sr="task9">
<cdate>1420510419053</cdate>
<edate>1501266948615</edate>
<id>9</id>
<nme>Set CM Profile</nme>
<pri>100</pri>
<Action sr="act0" ve="7">
<code>547</code>
<Str sr="arg0" ve="3">%profile</Str>
<Str sr="arg1" ve="3">%par1</Str>
<Int sr="arg2" val="0"/>
<Int sr="arg3" val="0"/>
<Int sr="arg4" val="0"/>
</Action>
<Action sr="act1" ve="7">
<code>664</code>
<Str sr="arg0" ve="3">ps</Str>
<Str sr="arg1" ve="3">cyanogenmod.app.ProfileManager</Str>
<Str sr="arg2" ve="3">getService {cyanogenmod.app.IProfileManager} ()</Str>
<Str sr="arg3" ve="3">profile</Str>
<Str sr="arg4" ve="3"/>
<Str sr="arg5" ve="3"/>
<Str sr="arg6" ve="3"/>
<Str sr="arg7" ve="3"/>
<Str sr="arg8" ve="3"/>
<Str sr="arg9" ve="3"/>
</Action>
<Action sr="act2" ve="7">
<code>664</code>
<Str sr="arg0" ve="3">%returnValue</Str>
<Str sr="arg1" ve="3">ps</Str>
<Str sr="arg2" ve="3">setActiveProfileByName {boolean} (String)</Str>
<Str sr="arg3" ve="3">%profile</Str>
<Str sr="arg4" ve="3"/>
<Str sr="arg5" ve="3"/>
<Str sr="arg6" ve="3"/>
<Str sr="arg7" ve="3"/>
<Str sr="arg8" ve="3"/>
<Str sr="arg9" ve="3"/>
</Action>
<Img sr="icn" ve="2">
<nme>hl_aaa_ext_barcode_1</nme>
</Img>
</Task>
</TaskerData>
注意:这是一个通用任务,它采用配置文件的名称,并尝试将系统配置文件设置为与传入参数匹配的配置文件。这需要将特定字符串发送到此任务的其他任务。
上面链接的最终屏幕截图显示了使用其他任务并传递您要设置的配置文件的名称。
答案 1 :(得分:0)
有时通过提问,答案会出现。
SELinux是我的方法不起作用的原因。暂时将SELinux设置为“permissive”(setenforce 0),一切都很好。
所以我猜除了禁用SELinux(我不想要)之外没有其他解决方法。
答案 2 :(得分:0)
您可以在功能之前禁用SELinux,然后在Tasker中重新启用它。
我想我想完成你想做的同样的事情,但我不能让它发挥作用。你可以这么善良并发布Tasker中字段的所有值来创建proman对象吗?我似乎错过了什么。
答案 3 :(得分:0)
对于想要在任务器(Android 7)中使用Lineage OS配置文件的用户,您需要执行以下任务。注意:命令A1和A4禁用/启用SELinux。使用的变量%Newprofile等于Lineage配置文件的名称(例如&#34; 4G&#34;)。我将变量设置在另一个任务中。
A1: Run Shell [ Command:setenforce 0 Timeout (Seconds):0 Use Root:On Store Output In: Store Errors In: Store Result In: ]
A2: Java Function [ Return:proman Class Or Object:cyanogenmod.app.ProfileManager Function:getInstance {cyanogenmod.app.ProfileManager} (Context) Param:CONTEXT Param: Param: Param: Param: Param: Param: ]
A3: Java Function [ Return: Class Or Object:proman Function:setActiveProfile {} (String) Param:%Newprofile Param: Param: Param: Param: Param: Param: ]
A4: Run Shell [ Command:setenforce 1 Timeout (Seconds):0 Use Root:On Store Output In: Store Errors In: Store Result In: ]