Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
58142299
Kaydet (Commit)
58142299
authored
Mar 22, 2012
tarafından
Tor Lillqvist
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Add JNI wrappers for InitVCL and osl_setCommandArgs
üst
38603465
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
120 additions
and
24 deletions
+120
-24
Bootstrap.java
android/Bootstrap/src/org/libreoffice/android/Bootstrap.java
+14
-0
lo-bootstrap.c
sal/android/lo-bootstrap.c
+106
-24
No files found.
android/Bootstrap/src/org/libreoffice/android/Bootstrap.java
Dosyayı görüntüle @
58142299
...
@@ -51,6 +51,11 @@ public class Bootstrap extends NativeActivity
...
@@ -51,6 +51,11 @@ public class Bootstrap extends NativeActivity
{
{
private
static
String
TAG
=
"lo-bootstrap"
;
private
static
String
TAG
=
"lo-bootstrap"
;
// Native methods in this class are all implemented in
// sal/android/lo-bootstrap.c as the lo-bootstrap library is loaded with
// System.loadLibrary() and Android's JNI works only to such libraries, it
// seems.
private
static
native
boolean
setup
(
String
dataDir
,
private
static
native
boolean
setup
(
String
dataDir
,
String
apkFile
,
String
apkFile
,
String
[]
ld_library_path
);
String
[]
ld_library_path
);
...
@@ -79,6 +84,15 @@ public class Bootstrap extends NativeActivity
...
@@ -79,6 +84,15 @@ public class Bootstrap extends NativeActivity
// Wrapper for putenv()
// Wrapper for putenv()
public
static
native
void
putenv
(
String
string
);
public
static
native
void
putenv
(
String
string
);
// A wrapper for InitVCL() in libvcl (svmain.cxx), called indirectly
// through the lo-bootstrap library
public
static
native
void
initVCL
();
// A wrapper for osl_setCommandArgs(). Before calling
// osl_setCommandArgs(), argv[0] is prefixed with the parent directory of
// where the lo-bootstrap library is.
public
static
native
void
setCommandArgs
(
String
[]
argv
);
public
static
void
setup
(
Activity
activity
)
public
static
void
setup
(
Activity
activity
)
{
{
String
dataDir
=
null
;
String
dataDir
=
null
;
...
...
sal/android/lo-bootstrap.c
Dosyayı görüntüle @
58142299
...
@@ -533,46 +533,60 @@ Java_org_libreoffice_android_Bootstrap_setup__Ljava_lang_String_2Ljava_lang_Stri
...
@@ -533,46 +533,60 @@ Java_org_libreoffice_android_Bootstrap_setup__Ljava_lang_String_2Ljava_lang_Stri
return
JNI_TRUE
;
return
JNI_TRUE
;
}
}
// public statuc native boolean setup(int lo_main_ptr,
static
jboolean
// Object lo_main_argument,
get_jni_string_array
(
JNIEnv
*
env
,
// int lo_main_delay);
const
char
*
function_and_parameter_name
,
jobject
strv
,
__attribute__
((
visibility
(
"default"
)))
int
*
argc
,
jboolean
const
char
***
argv
)
Java_org_libreoffice_android_Bootstrap_setup__ILjava_lang_Object_2I
(
JNIEnv
*
env
,
jobject
clazz
,
void
*
lo_main_ptr
,
jobject
lo_main_argument
,
jint
lo_main_delay
)
{
{
jclass
StringArray
;
jclass
StringArray
;
int
i
;
int
i
;
(
void
)
clazz
;
lo_main
=
lo_main_ptr
;
StringArray
=
(
*
env
)
->
FindClass
(
env
,
"[Ljava/lang/String;"
);
StringArray
=
(
*
env
)
->
FindClass
(
env
,
"[Ljava/lang/String;"
);
if
(
StringArray
==
NULL
)
{
if
(
StringArray
==
NULL
)
{
LOGE
(
"Could not find String[] class"
);
LOGE
(
"Could not find String[] class"
);
return
JNI_FALSE
;
return
JNI_FALSE
;
}
}
if
(
!
(
*
env
)
->
IsInstanceOf
(
env
,
lo_main_argument
,
StringArray
))
{
if
(
!
(
*
env
)
->
IsInstanceOf
(
env
,
strv
,
StringArray
))
{
LOGE
(
"
lo_main_argument is not a String[]?"
);
LOGE
(
"
%s is not a String[]?"
,
function_and_parameter_name
);
return
JNI_FALSE
;
return
JNI_FALSE
;
}
}
lo_main_argc
=
(
*
env
)
->
GetArrayLength
(
env
,
lo_main_argument
);
*
argc
=
(
*
env
)
->
GetArrayLength
(
env
,
strv
);
lo_main_argv
=
malloc
(
sizeof
(
char
*
)
*
(
lo_main_
argc
+
1
));
*
argv
=
malloc
(
sizeof
(
char
*
)
*
(
*
argc
+
1
));
for
(
i
=
0
;
i
<
lo_main_
argc
;
i
++
)
{
for
(
i
=
0
;
i
<
*
argc
;
i
++
)
{
const
char
*
s
=
(
*
env
)
->
GetStringUTFChars
(
env
,
(
*
env
)
->
GetObjectArrayElement
(
env
,
lo_main_argument
,
i
),
NULL
);
const
char
*
s
=
(
*
env
)
->
GetStringUTFChars
(
env
,
(
*
env
)
->
GetObjectArrayElement
(
env
,
strv
,
i
),
NULL
);
lo_main_argv
[
i
]
=
strdup
(
s
);
(
*
argv
)
[
i
]
=
strdup
(
s
);
(
*
env
)
->
ReleaseStringUTFChars
(
env
,
(
*
env
)
->
GetObjectArrayElement
(
env
,
lo_main_argument
,
i
),
s
);
(
*
env
)
->
ReleaseStringUTFChars
(
env
,
(
*
env
)
->
GetObjectArrayElement
(
env
,
strv
,
i
),
s
);
/* LOGI("argv[%d] = %s", i, lo_main_argv[i]); */
/* LOGI("argv[%d] = %s", i, lo_main_argv[i]); */
}
}
lo_main_argv
[
lo_main_argc
]
=
NULL
;
(
*
argv
)[
*
argc
]
=
NULL
;
return
JNI_TRUE
;
}
// public static native boolean setup(int lo_main_ptr,
// Object lo_main_argument,
// int lo_main_delay);
__attribute__
((
visibility
(
"default"
)))
jboolean
Java_org_libreoffice_android_Bootstrap_setup__ILjava_lang_Object_2I
(
JNIEnv
*
env
,
jobject
clazz
,
void
*
lo_main_ptr
,
jobject
lo_main_argument
,
jint
lo_main_delay
)
{
(
void
)
clazz
;
lo_main
=
lo_main_ptr
;
if
(
!
get_jni_string_array
(
env
,
"setup: lo_main_argument"
,
lo_main_argument
,
&
lo_main_argc
,
&
lo_main_argv
))
return
JNI_FALSE
;
sleep_time
=
lo_main_delay
;
sleep_time
=
lo_main_delay
;
...
@@ -1484,6 +1498,8 @@ extract_files(const char *prefix)
...
@@ -1484,6 +1498,8 @@ extract_files(const char *prefix)
lo_apk_closedir
(
tree
);
lo_apk_closedir
(
tree
);
}
}
// public static native void patch_libgnustl_shared();
__attribute__
((
visibility
(
"default"
)))
__attribute__
((
visibility
(
"default"
)))
void
void
Java_org_libreoffice_android_Bootstrap_patch_libgnustl_shared
(
JNIEnv
*
env
,
Java_org_libreoffice_android_Bootstrap_patch_libgnustl_shared
(
JNIEnv
*
env
,
...
@@ -1495,6 +1511,72 @@ Java_org_libreoffice_android_Bootstrap_patch_libgnustl_shared(JNIEnv* env,
...
@@ -1495,6 +1511,72 @@ Java_org_libreoffice_android_Bootstrap_patch_libgnustl_shared(JNIEnv* env,
patch_libgnustl_shared
();
patch_libgnustl_shared
();
}
}
/* Android's JNI works only to libraries loaded through Java's
* System.loadLibrary(), it seems. Not to functions loaded by a dlopen() call
* in native code. For instance, to call a function in libvcllo.so, we need to
* have its JNI wrapper here, and then call the VCL function from it. Oh well,
* one could say it's clean to have all the Android-specific JNI functions
* here in this file.
*/
// public static native void initVCL();
__attribute__
((
visibility
(
"default"
)))
void
Java_org_libreoffice_android_Bootstrap_initVCL
(
JNIEnv
*
env
,
jobject
clazz
)
{
void
(
*
InitVCLWrapper
)(
void
);
(
void
)
env
;
(
void
)
clazz
;
/* This obviously should be called only after libvcllo.so has been loaded */
InitVCLWrapper
=
dlsym
(
RTLD_DEFAULT
,
"InitVCLWrapper"
);
if
(
InitVCLWrapper
==
NULL
)
{
LOGE
(
"InitVCL: InitVCLWrapper not found"
);
return
;
}
(
*
InitVCLWrapper
)();
}
__attribute__
((
visibility
(
"default"
)))
void
Java_org_libreoffice_android_Bootstrap_setCommandArgs
(
JNIEnv
*
env
,
jobject
clazz
,
jobject
argv
)
{
char
**
c_argv
;
int
c_argc
;
Dl_info
lo_bootstrap_info
;
void
(
*
osl_setCommandArgs
)(
int
,
char
**
);
(
void
)
clazz
;
if
(
!
get_jni_string_array
(
env
,
"setCommandArgs :argv"
,
argv
,
&
c_argc
,
(
const
char
***
)
&
c_argv
))
return
;
if
(
lo_dladdr
(
Java_org_libreoffice_android_Bootstrap_setCommandArgs
,
&
lo_bootstrap_info
)
!=
0
)
{
char
*
new_argv0
=
malloc
(
strlen
(
lo_bootstrap_info
.
dli_fname
)
+
strlen
(
c_argv
[
0
]));
char
*
slash
;
strcpy
(
new_argv0
,
lo_bootstrap_info
.
dli_fname
);
slash
=
strrchr
(
new_argv0
,
'/'
);
if
(
slash
!=
NULL
)
*
slash
=
'\0'
;
slash
=
strrchr
(
new_argv0
,
'/'
);
strcpy
(
slash
+
1
,
c_argv
[
0
]);
free
(
c_argv
[
0
]);
c_argv
[
0
]
=
new_argv0
;
}
osl_setCommandArgs
=
dlsym
(
RTLD_DEFAULT
,
"osl_setCommandArgs"
);
if
(
osl_setCommandArgs
==
NULL
)
{
LOGE
(
"setCommandArgs: osl_setCommandArgs not found"
);
return
;
}
(
*
osl_setCommandArgs
)(
c_argc
,
c_argv
);
}
__attribute__
((
visibility
(
"default"
)))
__attribute__
((
visibility
(
"default"
)))
JavaVM
*
JavaVM
*
lo_get_javavm
(
void
)
lo_get_javavm
(
void
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment