Skip to content

Commit 0ac32a9

Browse files
author
gmetaxas
committed
Added compiled external libraries (not everything is there - some mips64 libs are missing - compiled from master branch - will update the external library pointers accordingly)
Modifeid Makefiles to get 64-bit architectures - all64 not used yet Modified Java code to use longs for the variables which store pointers, rather than int Modifed C++ code to use longs rather than ints for pointers shared between java
1 parent c2aa13e commit 0ac32a9

36 files changed

+116
-104
lines changed

AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="net.sqlcipher" android:versionCode="4"
44
android:versionName="v1 (0.0.6.FINAL)">
5-
<uses-sdk android:minSdkVersion="7"></uses-sdk>
5+
<uses-sdk android:minSdkVersion="L"></uses-sdk>
66
<application android:icon="@drawable/icon" android:label="@string/app_name">
77

88
<activity android:name="example.SQLDemoActivity">

Makefile

Lines changed: 32 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -74,43 +74,44 @@ clean:
7474
-cd ${EXTERNAL_DIR} && ndk-build clean NDK_LIBS_OUT=$(EXTERNAL_DIR)/libs
7575
-cd ${SQLCIPHER_DIR} && make clean
7676
-cd ${JNI_DIR} && ndk-build clean NDK_LIBS_OUT=$(JNI_DIR)/libs
77-
-rm ${LIBRARY_ROOT}/armeabi/libsqlcipher_android.so
78-
-rm ${LIBRARY_ROOT}/armeabi/libdatabase_sqlcipher.so
79-
-rm ${LIBRARY_ROOT}/armeabi/libstlport_shared.so
77+
-rm ${LIBRARY_ROOT}/arm64_v8a/libsqlcipher_android.so
78+
-rm ${LIBRARY_ROOT}/arm64_v8a/libdatabase_sqlcipher.so
79+
-rm ${LIBRARY_ROOT}/arm64_v8a/libstlport_shared.so
8080
-rm ${LIBRARY_ROOT}/sqlcipher.jar
81-
-rm ${LIBRARY_ROOT}/x86/libsqlcipher_android.so
82-
-rm ${LIBRARY_ROOT}/x86/libdatabase_sqlcipher.so
83-
-rm ${LIBRARY_ROOT}/x86/libstlport_shared.so
84-
-rm ${LIBRARY_ROOT}/armeabi-v7a/libsqlcipher_android.so
85-
-rm ${LIBRARY_ROOT}/armeabi-v7a/libdatabase_sqlcipher.so
86-
-rm ${LIBRARY_ROOT}/armeabi-v7a/libstlport_shared.so
81+
-rm ${LIBRARY_ROOT}/x86_64/libsqlcipher_android.so
82+
-rm ${LIBRARY_ROOT}/x86_64/libdatabase_sqlcipher.so
83+
-rm ${LIBRARY_ROOT}/x86_64/libstlport_shared.so
84+
#-rm ${LIBRARY_ROOT}/mips64/libsqlcipher_android.so
85+
#-rm ${LIBRARY_ROOT}/mips64/libdatabase_sqlcipher.so
86+
#-rm ${LIBRARY_ROOT}/mips64/libstlport_shared.so
87+
8788

8889
copy-libs:
89-
mkdir -p ${LIBRARY_ROOT}/armeabi
90-
cp ${EXTERNAL_DIR}/libs/armeabi/libsqlcipher_android.so \
91-
${LIBRARY_ROOT}/armeabi && \
92-
cp ${JNI_DIR}/libs/armeabi/libdatabase_sqlcipher.so \
93-
${LIBRARY_ROOT}/armeabi && \
94-
cp ${EXTERNAL_DIR}/libs/armeabi/libstlport_shared.so \
95-
${LIBRARY_ROOT}/armeabi
96-
mkdir -p ${LIBRARY_ROOT}/x86
97-
cp ${EXTERNAL_DIR}/libs/x86/libsqlcipher_android.so \
98-
${LIBRARY_ROOT}/x86 && \
99-
cp ${JNI_DIR}/libs/x86/libdatabase_sqlcipher.so \
100-
${LIBRARY_ROOT}/x86 && \
101-
cp ${EXTERNAL_DIR}/libs/x86/libstlport_shared.so \
102-
${LIBRARY_ROOT}/x86
103-
mkdir -p ${LIBRARY_ROOT}/armeabi-v7a
104-
cp ${EXTERNAL_DIR}/libs/armeabi-v7a/libsqlcipher_android.so \
105-
${LIBRARY_ROOT}/armeabi-v7a && \
106-
cp ${JNI_DIR}/libs/armeabi-v7a/libdatabase_sqlcipher.so \
107-
${LIBRARY_ROOT}/armeabi-v7a && \
108-
cp ${EXTERNAL_DIR}/libs/armeabi-v7a/libstlport_shared.so \
109-
${LIBRARY_ROOT}/armeabi-v7a
90+
mkdir -p ${LIBRARY_ROOT}/arm64-v8a
91+
cp ${EXTERNAL_DIR}/libs/arm64-v8a/libsqlcipher_android.so \
92+
${LIBRARY_ROOT}/arm64-v8a && \
93+
cp ${JNI_DIR}/libs/arm64-v8a/libdatabase_sqlcipher.so \
94+
${LIBRARY_ROOT}/arm64-v8a && \
95+
cp ${EXTERNAL_DIR}/libs/arm64-v8a/libstlport_shared.so \
96+
${LIBRARY_ROOT}/arm64-v8a
97+
mkdir -p ${LIBRARY_ROOT}/x86_64
98+
cp ${EXTERNAL_DIR}/libs/x86_64/libsqlcipher_android.so \
99+
${LIBRARY_ROOT}/x86_64 && \
100+
cp ${JNI_DIR}/libs/x86_64/libdatabase_sqlcipher.so \
101+
${LIBRARY_ROOT}/x86_64 && \
102+
cp ${EXTERNAL_DIR}/libs/x86_64/libstlport_shared.so \
103+
${LIBRARY_ROOT}/x86_64
104+
# mkdir -p ${LIBRARY_ROOT}/mips64
105+
# cp ${EXTERNAL_DIR}/libs/mips64/libsqlcipher_android.so \
106+
# ${LIBRARY_ROOT}/mips64 && \
107+
# cp ${JNI_DIR}/libs/mips64/libdatabase_sqlcipher.so \
108+
# ${LIBRARY_ROOT}/mips64 && \
109+
# cp ${EXTERNAL_DIR}/libs/mips64/libstlport_shared.so \
110+
# ${LIBRARY_ROOT}/mips64
110111

111112
copy-libs-dist:
112113
cp ${LIBRARY_ROOT}/*.jar dist/SQLCipherForAndroid-SDK/libs/ && \
113-
cp ${LIBRARY_ROOT}/armeabi/*.so dist/SQLCipherForAndroid-SDK/libs/armeabi/
114+
cp ${LIBRARY_ROOT}/arm64_v8a/*.so dist/SQLCipherForAndroid-SDK/libs/arm64_v8a/
114115

115116
build-openssl-libraries:
116117
./build-openssl-libraries.sh

external/Android.mk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ sqlcipher/sqlite3.c:
1717
make -C sqlcipher sqlite3.c
1818

1919
copy-libs-hack: build-local-hack
20-
install -p -m644 libs/armeabi/*.so ../obj/local/armeabi/
20+
install -p -m644 libs/x86_64/*.so ../obj/local/x86_64/
2121

2222
project_ldflags:= -Llibs/$(TARGET_ARCH_ABI)/ -Landroid-libs/$(TARGET_ARCH_ABI)/
2323

Binary file not shown.
270 KB
Binary file not shown.
19.8 MB
Binary file not shown.
77.6 KB
Binary file not shown.
Binary file not shown.
5.05 MB
Binary file not shown.
146 KB
Binary file not shown.
295 KB
Binary file not shown.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
!<arch>
91.1 KB
Binary file not shown.
34.4 KB
Binary file not shown.

external/android-libs/mips64/libssl.a

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
!<arch>
169 KB
Binary file not shown.
Binary file not shown.
374 KB
Binary file not shown.
19.6 MB
Binary file not shown.
85.9 KB
Binary file not shown.
29.7 KB
Binary file not shown.

external/android-libs/x86_64/libssl.a

5.12 MB
Binary file not shown.
158 KB
Binary file not shown.

jni/Application.mk

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
APP_PROJECT_PATH := $(shell pwd)
2-
APP_ABI := armeabi armeabi-v7a x86
2+
#APP_ABI := all64
3+
APP_ABI := x86_64 arm64-v8a
34
APP_BUILD_SCRIPT := $(APP_PROJECT_PATH)/Android.mk
45
# fixes this error when building external/android-sqlite/android/sqlite3_android.cpp
56
# icu4c/common/unicode/std_string.h:39:18: error: string: No such file or directory

jni/android_util_Binder.cpp

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,16 @@
4242
//#undef LOGV
4343
//#define LOGV(...) fprintf(stderr, __VA_ARGS__)
4444

45+
#if !defined(__LP64__)
46+
#define M_OBJECT_TYPE "I"
47+
#define GET_M_OBJECT(obj, mobject) env->GetIntField(obj, mobject)
48+
#define SET_M_OBJECT(obj, mobject, val) env->SetIntField(obj, mobject, (int)val)
49+
#else
50+
#define M_OBJECT_TYPE "J"
51+
#define GET_M_OBJECT(obj, mobject) env->GetLongField(obj, mobject);
52+
#define SET_M_OBJECT(obj, mobject, val) env->SetLongField(obj, mobject, (long long int)val)
53+
#endif
54+
4555
using namespace android;
4656

4757
// ----------------------------------------------------------------------------
@@ -465,7 +475,7 @@ jobject javaObjectForIBinder(JNIEnv* env, const sp<IBinder>& val)
465475
if (object != NULL) {
466476
LOGV("objectForBinder %p: created new %p!\n", val.get(), object);
467477
// The proxy holds a reference to the native object.
468-
env->SetIntField(object, gBinderProxyOffsets.mObject, (int)val.get());
478+
SET_M_OBJECT(object, gBinderProxyOffsets.mObject, val.get());
469479
val->incStrong(object);
470480

471481
// The native object needs to hold a weak reference back to the
@@ -489,13 +499,13 @@ sp<IBinder> ibinderForJavaObject(JNIEnv* env, jobject obj)
489499

490500
if (env->IsInstanceOf(obj, gBinderOffsets.mClass)) {
491501
JavaBBinderHolder* jbh = (JavaBBinderHolder*)
492-
env->GetIntField(obj, gBinderOffsets.mObject);
502+
GET_M_OBJECT(obj, gBinderOffsets.mObject);
493503
return jbh != NULL ? jbh->get(env) : NULL;
494504
}
495505

496506
if (env->IsInstanceOf(obj, gBinderProxyOffsets.mClass)) {
497507
return (IBinder*)
498-
env->GetIntField(obj, gBinderProxyOffsets.mObject);
508+
GET_M_OBJECT(obj, gBinderProxyOffsets.mObject);
499509
}
500510

501511
LOGW("ibinderForJavaObject: %p is not a Binder object", obj);
@@ -630,15 +640,15 @@ static void android_os_Binder_init(JNIEnv* env, jobject clazz)
630640
}
631641
LOGV("Java Binder %p: acquiring first ref on holder %p", clazz, jbh);
632642
jbh->incStrong(clazz);
633-
env->SetIntField(clazz, gBinderOffsets.mObject, (int)jbh);
643+
SET_M_OBJECT(clazz, gBinderOffsets.mObject, jbh);
634644
}
635645

636646
static void android_os_Binder_destroy(JNIEnv* env, jobject clazz)
637647
{
638648
JavaBBinderHolder* jbh = (JavaBBinderHolder*)
639-
env->GetIntField(clazz, gBinderOffsets.mObject);
649+
GET_M_OBJECT(clazz, gBinderOffsets.mObject);
640650
if (jbh != NULL) {
641-
env->SetIntField(clazz, gBinderOffsets.mObject, 0);
651+
SET_M_OBJECT(clazz, gBinderOffsets.mObject, 0);
642652
LOGV("Java Binder %p: removing ref on holder %p", clazz, jbh);
643653
jbh->decStrong(clazz);
644654
} else {
@@ -682,7 +692,7 @@ static int int_register_android_os_Binder(JNIEnv* env)
682692
assert(gBinderOffsets.mExecTransact);
683693

684694
gBinderOffsets.mObject
685-
= env->GetFieldID(clazz, "mObject", "I");
695+
= env->GetFieldID(clazz, "mObject", M_OBJECT_TYPE);
686696
assert(gBinderOffsets.mObject);
687697

688698
return AndroidRuntime::registerNativeMethods(
@@ -777,7 +787,7 @@ static int int_register_android_os_BinderInternal(JNIEnv* env)
777787
static jboolean android_os_BinderProxy_pingBinder(JNIEnv* env, jobject obj)
778788
{
779789
IBinder* target = (IBinder*)
780-
env->GetIntField(obj, gBinderProxyOffsets.mObject);
790+
GET_M_OBJECT(obj, gBinderProxyOffsets.mObject);
781791
if (target == NULL) {
782792
return JNI_FALSE;
783793
}
@@ -787,7 +797,7 @@ static jboolean android_os_BinderProxy_pingBinder(JNIEnv* env, jobject obj)
787797

788798
static jstring android_os_BinderProxy_getInterfaceDescriptor(JNIEnv* env, jobject obj)
789799
{
790-
IBinder* target = (IBinder*) env->GetIntField(obj, gBinderProxyOffsets.mObject);
800+
IBinder* target = (IBinder*) GET_M_OBJECT(obj, gBinderProxyOffsets.mObject);
791801
if (target != NULL) {
792802
const String16& desc = target->getInterfaceDescriptor();
793803
return env->NewString(desc.string(), desc.size());
@@ -800,7 +810,7 @@ static jstring android_os_BinderProxy_getInterfaceDescriptor(JNIEnv* env, jobjec
800810
static jboolean android_os_BinderProxy_isBinderAlive(JNIEnv* env, jobject obj)
801811
{
802812
IBinder* target = (IBinder*)
803-
env->GetIntField(obj, gBinderProxyOffsets.mObject);
813+
GET_M_OBJECT(obj, gBinderProxyOffsets.mObject);
804814
if (target == NULL) {
805815
return JNI_FALSE;
806816
}
@@ -921,7 +931,7 @@ static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj,
921931
}
922932

923933
IBinder* target = (IBinder*)
924-
env->GetIntField(obj, gBinderProxyOffsets.mObject);
934+
GET_M_OBJECT(obj, gBinderProxyOffsets.mObject);
925935
if (target == NULL) {
926936
jniThrowException(env, "java/lang/IllegalStateException", "Binder has been finalized!");
927937
return JNI_FALSE;
@@ -964,7 +974,7 @@ static void android_os_BinderProxy_linkToDeath(JNIEnv* env, jobject obj,
964974
}
965975

966976
IBinder* target = (IBinder*)
967-
env->GetIntField(obj, gBinderProxyOffsets.mObject);
977+
GET_M_OBJECT(obj, gBinderProxyOffsets.mObject);
968978
if (target == NULL) {
969979
LOGW("Binder has been finalized when calling linkToDeath() with recip=%p)\n", recipient);
970980
assert(false);
@@ -994,7 +1004,7 @@ static jboolean android_os_BinderProxy_unlinkToDeath(JNIEnv* env, jobject obj,
9941004
}
9951005

9961006
IBinder* target = (IBinder*)
997-
env->GetIntField(obj, gBinderProxyOffsets.mObject);
1007+
GET_M_OBJECT(obj, gBinderProxyOffsets.mObject);
9981008
if (target == NULL) {
9991009
LOGW("Binder has been finalized when calling linkToDeath() with recip=%p)\n", recipient);
10001010
return JNI_FALSE;
@@ -1026,9 +1036,9 @@ static jboolean android_os_BinderProxy_unlinkToDeath(JNIEnv* env, jobject obj,
10261036
static void android_os_BinderProxy_destroy(JNIEnv* env, jobject obj)
10271037
{
10281038
IBinder* b = (IBinder*)
1029-
env->GetIntField(obj, gBinderProxyOffsets.mObject);
1039+
GET_M_OBJECT(obj, gBinderProxyOffsets.mObject);
10301040
LOGV("Destroying BinderProxy %p: binder=%p\n", obj, b);
1031-
env->SetIntField(obj, gBinderProxyOffsets.mObject, 0);
1041+
SET_M_OBJECT(obj, gBinderProxyOffsets.mObject, 0);
10321042
b->decStrong(obj);
10331043
IPCThreadState::self()->flushCommands();
10341044
}
@@ -1075,7 +1085,7 @@ static int int_register_android_os_BinderProxy(JNIEnv* env)
10751085
assert(gBinderProxyOffsets.mSendDeathNotice);
10761086

10771087
gBinderProxyOffsets.mObject
1078-
= env->GetFieldID(clazz, "mObject", "I");
1088+
= env->GetFieldID(clazz, "mObject", M_OBJECT_TYPE);
10791089
assert(gBinderProxyOffsets.mObject);
10801090
gBinderProxyOffsets.mSelf
10811091
= env->GetFieldID(clazz, "mSelf", "Ljava/lang/ref/WeakReference;");
@@ -1453,19 +1463,19 @@ static void android_os_Parcel_init(JNIEnv* env, jobject clazz, jint parcelInt)
14531463
}
14541464
//LOGI("Initializing obj %p from C++ Parcel %p, own=%d\n", clazz, parcel, own);
14551465
env->SetIntField(clazz, gParcelOffsets.mOwnObject, own);
1456-
env->SetIntField(clazz, gParcelOffsets.mObject, (int)parcel);
1466+
SET_M_OBJECT(clazz, gParcelOffsets.mObject, parcel);
14571467
}
14581468

14591469
static void android_os_Parcel_destroy(JNIEnv* env, jobject clazz)
14601470
{
14611471
int32_t own = env->GetIntField(clazz, gParcelOffsets.mOwnObject);
14621472
if (own) {
14631473
Parcel* parcel = parcelForJavaObject(env, clazz);
1464-
env->SetIntField(clazz, gParcelOffsets.mObject, 0);
1474+
SET_M_OBJECT(clazz, gParcelOffsets.mObject, 0);
14651475
//LOGI("Destroying obj %p: deleting C++ Parcel %p\n", clazz, parcel);
14661476
delete parcel;
14671477
} else {
1468-
env->SetIntField(clazz, gParcelOffsets.mObject, 0);
1478+
SET_M_OBJECT(clazz, gParcelOffsets.mObject, 0);
14691479
//LOGI("Destroying obj %p: leaving C++ Parcel %p\n", clazz);
14701480
}
14711481
}
@@ -1666,7 +1676,7 @@ static int int_register_android_os_Parcel(JNIEnv* env)
16661676
LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.Parcel");
16671677

16681678
gParcelOffsets.mObject
1669-
= env->GetFieldID(clazz, "mObject", "I");
1679+
= env->GetFieldID(clazz, "mObject", M_OBJECT_TYPE);
16701680
gParcelOffsets.mOwnObject
16711681
= env->GetFieldID(clazz, "mOwnObject", "I");
16721682

jni/net_sqlcipher_CursorWindow.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ static jfieldID gWindowField;
3737
static jfieldID gBufferField;
3838
static jfieldID gSizeCopiedField;
3939

40-
#define GET_WINDOW(env, object) ((CursorWindow *)env->GetIntField(object, gWindowField))
41-
#define SET_WINDOW(env, object, window) (env->SetIntField(object, gWindowField, (int)window))
40+
#define GET_WINDOW(env, object) ((CursorWindow *)env->GetLongField(object, gWindowField))
41+
#define SET_WINDOW(env, object, window) (env->SetLongField(object, gWindowField, (long long int)window))
4242
#define SET_BUFFER(env, object, buf) (env->SetObjectField(object, gBufferField, buf))
4343
#define SET_SIZE_COPIED(env, object, size) (env->SetIntField(object, gSizeCopiedField, size))
4444

@@ -706,7 +706,7 @@ int register_android_database_CursorWindow(JNIEnv * env)
706706
return -1;
707707
}
708708

709-
gWindowField = env->GetFieldID(clazz, "nWindow", "I");
709+
gWindowField = env->GetFieldID(clazz, "nWindow", "J");
710710

711711
if (gWindowField == NULL) {
712712
LOGE("Error locating fields");

jni/net_sqlcipher_database_SQLiteCompiledSql.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ static jfieldID gStatementField;
3939

4040

4141
#define GET_STATEMENT(env, object) \
42-
(sqlite3_stmt *)env->GetIntField(object, gStatementField)
42+
(sqlite3_stmt *)env->GetLongField(object, gStatementField)
4343
#define GET_HANDLE(env, object) \
44-
(sqlite3 *)env->GetIntField(object, gHandleField)
44+
(sqlite3 *)env->GetLongField(object, gHandleField)
4545

4646

4747
sqlite3_stmt * compile(JNIEnv* env, jobject object,
@@ -55,7 +55,7 @@ sqlite3_stmt * compile(JNIEnv* env, jobject object,
5555
// Make sure not to leak the statement if it already exists
5656
if (statement != NULL) {
5757
sqlite3_finalize(statement);
58-
env->SetIntField(object, gStatementField, 0);
58+
env->SetLongField(object, gStatementField, 0);
5959
}
6060

6161
// Compile the SQL
@@ -67,7 +67,7 @@ sqlite3_stmt * compile(JNIEnv* env, jobject object,
6767
if (err == SQLITE_OK) {
6868
// Store the statement in the Java object for future calls
6969
LOGV("Prepared statement %p on %p", statement, handle);
70-
env->SetIntField(object, gStatementField, (int)statement);
70+
env->SetLongField(object, gStatementField, (long long int) statement);
7171
return statement;
7272
} else {
7373
// Error messages like 'near ")": syntax error' are not
@@ -98,7 +98,7 @@ static void native_finalize(JNIEnv* env, jobject object)
9898

9999
if (statement != NULL) {
100100
sqlite3_finalize(statement);
101-
env->SetIntField(object, gStatementField, 0);
101+
env->SetLongField(object, gStatementField, 0);
102102
}
103103
}
104104

@@ -119,8 +119,8 @@ int register_android_database_SQLiteCompiledSql(JNIEnv * env)
119119
return -1;
120120
}
121121

122-
gHandleField = env->GetFieldID(clazz, "nHandle", "I");
123-
gStatementField = env->GetFieldID(clazz, "nStatement", "I");
122+
gHandleField = env->GetFieldID(clazz, "nHandle", "J");
123+
gStatementField = env->GetFieldID(clazz, "nStatement", "J");
124124

125125
if (gHandleField == NULL || gStatementField == NULL) {
126126
LOGE("Error locating fields");

0 commit comments

Comments
 (0)