Android 사용자 그룹 및 사용자 정의 App 권한 추가 방법
1.응용 장면
Android 장치 에서 현재 우 리 는 USB 포트 를 연결 하 는 장 치 를 연결 하고 있 습 니 다.장치 노드 는/dev/ttyUSB 0 입 니 다.
# ls -l /dev/ttyUSB0
crw-rw---- 1 root root 188, 0 /dev/ttyUSB0
정보 표시:이 장치 의 사용자 와 소속 그룹 은 모두 루트 입 니 다.루트 소지 자 는 이 장치 에 대해 읽 기와 쓰기 권한 을 가지 고 있 습 니 다.그러나,우리 의 앱 은 루트 에서 제외 되 었 습 니 다.어쨌든 이 장 치 를 읽 고 쓸 수 없습니다.하나의 해결 방안 은 다른 사람 에 게 읽 기와 쓰기 권한 을 부여 하 는 것 이다.그러나 이렇게 하면 다른 제3자 응용 프로그램 도 우리 의 설 비 를 방문 할 수 있 고 안전성 이 조금도 남지 않 습 니 다.
또 다른 해결 방안 은/dev/ttyUSB 0 에 속 하 는 사용자 그룹 을 바 꾸 는 것 입 니 다.
crw-rw---- 1 root selfgroup 188, 0 /dev/ttyUSB0
이 장 치 를 사용 하고 싶 은 앱 이 있 으 면 selfgroup 그룹 에 가입 하 세 요.권한 분배 권 이 우리 손 에 있 기 때문에 안전성 이 보장 되 었 다.2.사용자 정의 그룹 추가
다음은 우리 자신의 사용자 그룹 을 어떻게 추가 하 는 지 입 니 다.
Android 에 서 는 모든 사용자 그룹 에 유일한 ID 번호 가 있 습 니 다.파일 에 정 의 됩 니 다.
system\core\include\private\android_filesystem_config.h
/* This is the master Users and Groups config for the platform.
* DO NOT EVER RENUMBER
*/
#define AID_ROOT 0 /* traditional unix root user */
#define AID_SYSTEM 1000 /* system server */
#define AID_RADIO 1001 /* telephony subsystem, RIL */
#define AID_BLUETOOTH 1002 /* bluetooth subsystem */
#define AID_GRAPHICS 1003 /* graphics devices */
#define AID_INPUT 1004 /* input devices */
#define AID_AUDIO 1005 /* audio devices */
#define AID_CAMERA 1006 /* camera devices */
자신의 ID 번 호 를 추가 하 는 것 을 본 떠 서 문자열 의 이름 을 부여 합 니 다.
/** 1 */
#define AID_SELF_GROUP 8011
/** 2 */
static const struct android_id_info android_ids[] = {
{ "root", AID_ROOT, },
{ .......................},
/** */
{{ "selfgroup", AID_SELF_GROUP, },},
}
그리고 Android 소스 코드/device 디 렉 터 리 아래 판 급.rc 파일 에서:boot.img 을 컴 파일 하고 녹음 합 니 다.다시 시작 한 후에 노드 그룹 이 사용자 정의'selfgroup'이 되 었 음 을 봅 니 다.
3.사용자 정의 그룹 별 권한 관리 추가
장치 에 앱 이 우리 장치 에 접근 하려 면'selfgroup'그룹 에 가입 해 야 합 니 다.그래서 우 리 는 App 에 권한 정 보 를 제공 하여 App 을:
<uses-permission android:name="android.permission.SELFGROUP" />
"selfgroup"그룹 에 가입 할 수 있 습 니 다.이것 은 두 걸음 해 야 한다.
1.그룹 제어 권한 의 실현:
Android /frameworks/base/data/etc/platform.xml
<permission name="android.permission.SELFGROUP" >
<group gid="selfgroup" />
</permission>
2.그룹 제어 권한 에 대한 설명:
Android /frameworks/base/core/res/AndroidManifest.xml
<permission android:name="android.permission.SELFGROUP"
android:permissionGroup="android.permission-group.SELFGROUP"
android:protectionLevel="dangerous"
android:label="@string/permlab_sys_selfgroup"
android:description="@string/permdesc_sys_selfgroup" />
이로부터 권한 정의 가 완료 되 었 습 니 다.또한,앱 신청 팀 의 권한 성공 여 부 를 어떻게 판단 합 니까?
Android /frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
public final class ActivityManagerService extends ActivityManagerNative {
static final String TAG = "ActivityManager";
private final void startProcessLocked(ProcessRecord app,
String hostingType, String hostingNameStr) {
int uid = app.uid;
int[] gids = null;
StringBuilder buf = mStringBuilder;
buf.setLength(0);
buf.append("Start proc ");
buf.append(app.processName);
buf.append(" for ");
buf.append(hostingType);
if (hostingNameStr != null) {
buf.append(" ");
buf.append(hostingNameStr);
}
buf.append(": pid=");
buf.append(startResult.pid);
buf.append(" uid=");
buf.append(uid);
buf.append(" gids={");
if (gids != null) {
for (int gi=0; gi<gids.length; gi++) {
if (gi != 0) buf.append(", ");
buf.append(gids[gi]);
}
}
buf.append("}");
Slog.i(TAG, buf.toString());
}
}
즉,앱 을 시작 할 때 ActyManager Service 는 이 앱 의 Uid,Gid 등 정 보 를 콘 솔 에 출력 합 니 다.저 희 는 log 를 통 해'gids='필드 에 사용자 정의 그룹 ID 번호'8011'이 있 는 지 확인 하면 됩 니 다.예 를 들 어 위 챗 로그 시작:
I/ActivityManager( 977): Start proc com.tencent.mm for activity com.tencent.mm/.ui.LauncherUI: pid=11060 uid=10258 gids={50258, 3003, 1028, 1015, 1023, 3002, 3001}
이상 의 안 드 로 이 드 에 사용자 그룹 을 추가 하고 앱 권한 을 사용자 정의 하 는 방법 은 바로 편집장 이 여러분 에 게 공유 하 는 모든 내용 입 니 다.여러분 에 게 참고 가 되 고 저희 도 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.