java.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoader[DexPathList[[zip file"/data/app/org.xiaozhi-2/base.apk"],nativeLibraryDirectories=[/data/app/org.xiaozhi-2/lib/arm64,/data/app/org.xiaozhi-2/base.apk!/lib/arm64-v8a,/vendor/lib64,/system/lib64]]]couldn'tfind"libsqlcipher.so"
解决方案:
adb root
adb push \sqlcipher\android-database-sqlcipher-4.2.0\jni\arm64-v8a\libsqlcipher.so /system/lib64/
adb push \sqlcipher\android-database-sqlcipher-4.2.0\jni\armeabi-v7a\libsqlcipher.so /system/lib/
1.比如我现在在用net.sqlcipher.database 这个加密库(网上能搜得到的,用于数据库加密)。 那么我现在就在项目用加载这个jar包(在你的项目单击右键-》属性-》Java Build Path-》Libraries-》Add Jars,选择提供给你的jar包,我这里是 sqlcipher.jar,然后在Order and Export勾选你刚刚加载的 jar包。)2.打开你的workspace目录,在你的项目目录下创建一个文件夹libs(如果文件夹不存在的话),然后将提供给你的so库放入该目录,基本架构就算是搭建好了。
3.进行开发,这里你需要问一下提供给你jar包的厂家,基本的用法,否则的话是无法进行开发的,因为你都不知道怎么去用。 sqlcipher的基本用法是:
SQLiteDatabase.loadLibs(this) //加载 so库文件,你的厂家的方法应该也是类似。
File databaseFile = getDatabasePath(SQLite_toll.DATABASE_NAME)
databaseFile.mkdirs()
databaseFile.delete()
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFile, helper_SharedPreferences.get_str_sp("database_cipher",this), null)
SQLite_toll initToll = new SQLite_toll(this, avaSys)
initToll.onCreate(database)
database.close()
//因为我sqlcipher是用于数据库加密的,所以你所看到的都是数据库的一些方法,你厂家提供给你的jar包的用法,你是要去问他们的,或者他们的是否有开源代码,又或者是网上也有很多人使用,那么能搜到相关资料。
根据你补充的提问,那么就是System.loadLibrary(this),就可以调用了
写过一些取电话号码的东西,没有出现过乱码。你看看是不是字段之类的取的问题。下面是取电话号码的一段代码,不会出乱码。你参考一下吧
//得到ContentResolver对象
ContentResolver cr = getContentResolver()
//取得电话本中开始一项的光标
Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null)
while (cursor.moveToNext())
{
// 取得联系人名字
int nameFieldColumnIndex = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME)
String name = cursor.getString(nameFieldColumnIndex)
string += (name)
// 取得联系人ID
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))
Cursor phone = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = "
+ contactId, null, null)
// 取得电话号码(可能存在多个号码)
while (phone.moveToNext())
{
String strPhoneNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
string += (":" + strPhoneNumber)
}
string += "\n"
phone.close()
}
cursor.close()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)