Android SELinux avc dennied权限问题解决方法
core/init/Android.mk
core/init/selinux.cpp
recovery -> dd command
mboot
ac androidboot.selinux permissive
saveenv
recovery
reset
dd if=/dev/block/mmcblk0p31 of=/mnt/usb/sda1/userdata.img
Android SELinux avc dennied权限问题解决方法
core/init/Android.mk
core/init/selinux.cpp
recovery -> dd command
mboot
ac androidboot.selinux permissive
saveenv
recovery
reset
dd if=/dev/block/mmcblk0p31 of=/mnt/usb/sda1/userdata.img
code 寫死就會造成 延展性不佳
case KeyEvent.DOM_VK_CC:
case KeyEvent.DOM_VK_SUBTITLE:
var subObj = this.curData.value[this.selected];
if (this.subtitle_cc_show == false && this.selected == 0 && (typeof(subObj) == 'object' && (Array.isArray(subObj.value) || subObj.hasOwnProperty('showMode')))) {
this.curData.focusIndex = this.selected;
this._list_submenu_init(subObj);
this.subtitle_cc_show = true;
return false;
原來
=========================================================================
#include <stdio.h>
int add(int a, int b)
{
return a + b;
}
int minus(int a, int b)
{
return a - b;
}
int multiply(int a, int b)
{
return a * b;
}
int divide(int a, int b)
{
return a / b;
}
int operation(int a, int b, int (*operation)(int, int))
{
return operation(a, b);
}
int main(int argc, char* argv[])
{
int val;
// add
// val = add(4, 2);
val = operation(4, 2, add);
printf("val = %d\n", val);
// minus
// val = minus(4, 2);
val = operation(4, 2, minus);
printf("val = %d\n", val);
// multiply
// val = multiply(4, 2);
val = operation(4, 2, multiply);
printf("val = %d\n", val);
// divide
// val = divide(4, 2);
val = operation(4, 2, divide);
printf("val = %d\n", val);
return 0;
}
=========================================================================
使用 typedef
#include <stdio.h>
typedef int (*calculation)(int, int);
int add(int a, int b)
{
return a + b;
}
int minus(int a, int b)
{
return a - b;
}
int multiply(int a, int b)
{
return a * b;
}
int divide(int a, int b)
{
return a / b;
}
// int operation(int a, int b, int (*operation)(int, int))
// {
// return operation(a, b);
// }
int operation(int a, int b, calculation calc)
{
return calc(a, b);
}
int main(int argc, char* argv[])
{
int val;
// add
// val = add(4, 2);
val = operation(4, 2, add);
printf("val = %d\n", val);
// minus
// val = minus(4, 2);
val = operation(4, 2, minus);
printf("val = %d\n", val);
// multiply
// val = multiply(4, 2);
val = operation(4, 2, multiply);
printf("val = %d\n", val);
// divide
// val = divide(4, 2);
val = operation(4, 2, divide);
printf("val = %d\n", val);
return 0;
}
這裡我們可以清楚的看到,相較於使用函數指標的方式相告,我們用typedef過後的函數標宣告,不僅整個程式碼看起來更簡潔,整體其實也更為直觀
// use function pointer to declare
int operation(int a, int b, int (*operation)(int, int))
{
return operation(a, b);
}
// use calculation to declare
int operation(int a, int b, calculation calc)
{
return calc(a, b);
}
【n8n免費本地端部署】Windows版|程式安裝x指令大補帖 【一鍵安裝 n8n】圖文教學,獲得無限額度自動化工具&限時免費升級企業版功能