android 4.4 chmod 077 sd卡没有响应,chmod失败:android中的EPERM(不允许操作)?

在Android 4.4系统中,使用chmod 0777修改SD卡权限时遇到EPERM错误。问题在于应用缺少SYSTEM权限。解决方案包括在Android.mk中添加LOCAL_CERTIFICATE = platform,并在AndroidManifest.xml中设置sharedUserId为'android.uid.system'。将修改后的apk安装到/system/app/后,应用可以成功获取权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我想在sdcard或外部SD卡中创建数据库为此我已经尝试了这个代码并使用这个我已经在SD卡中成功创建了数据库,但在logcat中它给了我如下警告

logcat的

07-18 14:18:22.140: W/FileUtils(8595): Failed to

chmod(/mnt/sdcard/peakmedia/DB_PMD): libcore.io.ErrnoException: chmod

failed: EPERM (Operation not permitted)

DB_Helper.java

public class DB_Helper extends SQLiteOpenHelper

{

public DB_Helper(Context context)

{

super(context, Environment.getExternalStorageDirectory().getAbsolutePath()

+ File.separator + DB_Constant.DB.FILE_DIR

+ File.separator + DB_Constant.DB.DATABASENAME, null, DB_Constant.DB.DB_VERSION);

}

@Override

public void onCreate(SQLiteDatabase db)

{

String query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYFILES_TABLE);

db.execSQL(query);

query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYUSERS_TABLE);

db.execSQL(query);

query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYPLAYLIST_TABLE);

db.execSQL(query);

query=String.format(DB_Constant.CREATE_TABLE_QUERY.CREATE_MYDEVICE_TABLE);

db.execSQL(query);

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

{

if(newVersion > oldVersion)

{

db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYFILES);

onCreate(db);

db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYUSERS);

onCreate(db);

db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYPLAYLIST);

onCreate(db);

db.execSQL("DROP TABLE IF EXISTS "+ DB_Constant.TABLE.MYDEVICE);

onCreate(db);

}

}

}

解决方法:

刚刚解决了这个问题.

你必须让你的应用程序加入linux build以授予它SYSTEM权限.

>将此行添加到Android.mk中

LOCAL_CERTIFICATE:=平台

>将其添加到AndroidManifest.xml的清单节点中

机器人:sharedUserId = “android.uid.system”

>生成apk并将其推入/ system / app /

>现在你可以试着跑了

final String command = "chmod 777 /data/ena";

Process p = Runtime.getRuntime().exec(command);

要么

File file = new File("/data/ena");

if (file.exists()) {

boolean result = file.setExecutable(true);

Log.e(TAG, "trpb67, RESULT IS " + result);

}

结果的值应该是真的

标签:android,android-sqlite

来源: https://codeday.me/bug/20191006/1858050.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值