小编Pau*_*Kim的帖子

在外部目录上进行Nexus 9 SQLite文件写入操作的解决方法?

我的团队在Nexus 9上发现了一个错误,我们的应用程序无法使用,因为它无法在外部文件目录上以可写模式访问数据库.它似乎只有在应用程序使用JNI时才会发生,并且只有在代码中没有包含arm64-v8a版本时才会发生.

我们当前的理论是,如果不包括arm64-v8a,Nexus 9包含一些替代版本的本机库,以便向后兼容只有armeabi或armeabi-v7a库的应用程序.似乎某些备用SQLite库中存在一个阻止上述操作的错误.

有没有人找到这个问题的解决方法?在arm64中重新构建我们所有的本地库是我们当前的轨道和最完整的解决方案,但这需要我们的时间(我们的一些库是外部的),如果可能的话,我们希望更快地解决我们的Nexus 9用户的应用程序.


您可以通过这个简单的示例项目轻松查看此问题(您需要最新的Android NDK).

  1. 将以下文件添加到项目中.
  2. 如果您没有,请安装最新的Android NDK.
  3. ndk-build在项目目录中运行.
  4. 刷新,构建,安装和运行.
  5. 如果更改Android.mk或Application.mk,请在ndk-build再次运行之前删除libs和obj文件夹来清理项目.您还需要在每个项目之后手动刷新项目ndk-build.

请注意,Nexus 9上的"损坏"构建仍然适用于内部文件,但不适用于外部文件.

SRC/COM /示例/ dbtester/DBTesterActivity.java

package com.example.dbtester;

import java.io.File;

import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class DBTesterActivity extends Activity {

    protected static final String TABLE_NAME = "table_timestamp";

    static {
        System.loadLibrary("DB_TESTER");
    }

    private File mDbFileExternal;

    private File mDbFileInternal;

    @Override
    protected void onCreate(Bundle savedInstanceState) { …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-ndk android-5.0-lollipop

19
推荐指数
1
解决办法
3353
查看次数