android 硬编码 jni,关于android:JNI加载:警告:请勿硬编码使用Context.getFilesDir()。getPath()代替...

我在我的一个应用程序中遇到问题,我有以下代码来加载应用程序所需的库(JNI):

static {

// load the JNI library

Log.i("JNI","loading JNI library...");

System.load("/data/data/com.mypackage.appname/lib/libxxxxxx.so");

Log.i("JNI","JNI library loaded!");

}

所以我得到警告:"Do note hardcode use Context.getFilesDir().getPath() instead"这是完全正确的(它不会在所有设备上都可移植)。 事实是,因为我使用的是静态代码,所以无法调用Context.getFilesDir().getPath()。

您对我该如何进行有任何想法?

您从什么得到警告?

在system.Load中,我得到:不要硬编码" / data /"; 使用Context.getFilesDir()。getPath()代替

由于棉绒警告在Eclipse中表示相同,因此到达此处。 发现了这篇文章(如果正确的话)有点令人担忧:code.google.com/p/android/issues/detail?id=43533

通常,您可以使用System.loadLibrary()来完成此操作,该方法仅使用没有路径,lib前缀或.so扩展名的库名(所有文件都会根据使用的平台自动填充)

您的警告是绝对明确的,请尝试以下方式:

进行以下课程:

public class MyApplication extends Application {

private static Context c;

@Override

public void onCreate(){

super.onCreate();

this.c = getApplicationContext();

}

public static Context getAppContext() {

return this.c;

}

}

在您的android清单中声明以上类:

接着

static {

// load the JNI library

Log.i("JNI","loading JNI library...");

System.load(MyApplication.getAppContext().getFilesDir().getParentFile().getPath() +"/lib/libxxxxxx.so");

Log.i("JNI","JNI library loaded!");

}

PS未测试

感谢您的回答,但我得到:无法从上下文类型对非静态方法getFilesDir()进行静态引用

@Joze检查我的编辑。

刚刚尝试过,但我得到了:/data/data/com.mypackage.appname/files而不是我需要的:/data/data/com.mypackage.appname/(无文件)。 有什么猜想吗?

@Joze,您应该使用getParentFile(),检查我的编辑。

完美运作。 非常感谢 ! 已验证+" +1";)

您可以从派生自Application的类中获取Context。

看一下示例,以便您可以在任何地方使用您的应用程序上下文:)

我现在要尝试。 谢谢。 病情会不断更新。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值