2017-01-19 4 views
1

리플렉션을 사용하여 (내 클래스 파일 과 setPermissions()을 찾아서 (앱 패키지 디렉토리에 번들 된) 내 파일을 실행 파일로 표시합니다.이 파일은 Android Nougat 이전에는 작동했지만 N it에서는 작동하지 않았습니다. 수익률 1 :android.os.FileUtils.setPermissions()는 Android Nougat에서 1을 반환합니다

ZipHelper :

Integer result = FileHelper.chmod(outFile, 0755); 
if (result == null || result != 0) 
    android.util.Log.d("ZipHelper", "chmod failed with error result " + result.intValue()); 

FileHelper : 로그에서

public static void init_chmod() throws ClassNotFoundException, NoSuchMethodException { 
    fileUtils = Class.forName("android.os.FileUtils"); 
    setPermissions = fileUtils.getMethod("setPermissions", String.class, int.class, int.class, int.class); 
} 

public static int chmod(File path, int mode) throws Exception { 
    return (Integer) setPermissions.invoke(null, path.getAbsolutePath(), mode, -1, -1); 
} 

:

,536,913 63,210
01-19 12:46:39.365 2558-2667/name.myname.android.app D/ZipHelper﹕ chmod failed with error result 1 
01-19 12:46:39.390 2558-2667/name.myname.android.app W/FileUtils﹕ Failed to chmod(/storage/emulated/0/app/tutorials/cplusplus.com#1.0#1/compounddatatypes/arrays/multidimensional/source3.cpp): android.system.ErrnoException: chmod failed: EPERM (Operation not permitted) 

내 응용 프로그램은 그래서 권한을 앱에 자동으로 '저장'권한을 얻는다는 N.에 필요한 것 방법을 관리하지 않는 21를 대상으로하고 난 N AVD에서 응용 프로그램 설정에서 볼 수 있습니다. 에뮬레이터에서 테스트하고 있습니다.

반환 코드 1을 의미합니까? 보안과 관련이 있다고 생각하지만 무엇을해야하는지 잘 모릅니다. (N에 대한 일반적인 권한 접근 방법에 대해서는 알았지 만, 내 경우에는 어떤 권한이 필요합니까? 이미 '저장소'가 있어야합니다.) 다시 작동 시키려면 어떻게해야합니까?

답변