请问任何人请告诉我android中存在的所有IPC机制是什么.
据我所知:
1)意图,
2)粘合剂.
我正在尝试为Android的OpenSSL1.0.1c的(.so)文件生成共享库.我发现他们在Android脚本中添加了三个用于编译Android的选项.
./Configure android-armv7 (or)
./Configure android-x86 (or)
./Configure android
Run Code Online (Sandbox Code Playgroud)
一旦我配置了操作系统,然后尝试编译,它的抛出错误.目前我正在使用x86 windows7并安装了Cygwin,Android sdk R20,Android NDK r8
sh-4.1$ make
making all in crypto...
make[1]: Entering directory `/cygdrive/d/SourceCodes/OpenSSL/openssl-1.0.1c/crypto'
gcc -I. -I.. -I../include -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -march=armv7-a -mandroid -I/include -B/lib -O3 -fomit-frame-pointer -Wall -DOPENSSL_BN_ASM_MONT -DOP
ENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DAES_ASM -DGHASH_ASM -c -o cryptlib.o cryptlib.c
cc1: error: unrecognized command line option "-mandroid"
cryptlib.c:1:0: error: bad value (armv7-a) for -march= switch
<builtin>: recipe for target `cryptlib.o' failed
make[1]: *** [cryptlib.o] Error 1
make[1]: Leaving …
Run Code Online (Sandbox Code Playgroud) 我试图将ndk-gdb附加到我的Android应用程序.
我使用的是Android-ndk-r6b
和设备是Android 2.3,三星Galaxy S II.
我按照本例中的所有步骤单击此处查看示例
当我尝试将gdb与另一个应用程序连接时,我尝试使用一个应用程序,但是详细显示它总是附加到第一个应用程序本身
Found package name: <1st attached package name>
Run Code Online (Sandbox Code Playgroud)
我试图ndk-gdb
第一次启动使用此命令:
ndk-gdb --start --force --verbose
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下命令附加到另一个应用程序但无法成功:
ndk-gdb --launch=com.example.hellogdbserver.HelloGdbServer --force --verbose
Run Code Online (Sandbox Code Playgroud)
第一次申请我总是得到以下错误:
ERROR: Non-debuggable application installed on the target device.Please re-install the debuggable version!
Run Code Online (Sandbox Code Playgroud)
这是我得到的完整的shell日志
sh-4.1$ ndk-gdb --verbose --start --force
Android NDK installation path: /cygdrive/c/Android/android-ndk
Using default adb command: /cygdrive/c/Android/android-sdk-windows/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.26
Using final ADB command: '/cygdrive/c/Android/android-sdk-windows/platform-tools/adb'
Using auto-detected project path: /cygdrive/d/EclipseTestWorkspace/hello-gdbserver
Found package name: com.example.hellogdbserver …
Run Code Online (Sandbox Code Playgroud) 将本机线程永久地附加到JVM(AttachCurrentThread)是否可行(或者)是否在需要时(调用java函数)更好地附加并在工作完成后立即分离
我用上面的案例写了一个示例本机应用程序,没有发现任何区别.但是通过谷歌搜索,模糊地我才知道,当连接到JVM时,JVM的线程调度负责调度,否则OS将调度本机线程(如果没有附加).这是真的?
分离以前连接过的任何线程都很重要; 否则,当您调用DestroyJavaVM时,程序不会退出.- http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniref.html#attach
会有任何性能问题吗?
如果有人知道,请告诉我,这是我的重要设计方面.
感谢和问候.
java java-native-interface multithreading android android-ndk
我试着谷歌谷歌但无法找到答案
有谁请让我知道,我如何从Android代码中检索当前的电话号码.我认为电话号码将存储在SIM卡中.
谢谢和问候,SSuman185
我试图在Android中挂钩本机库.基本上我试图挂钩libjavacore.so
文件中的套接字调用.
这里提到的类似方法
例如:
获取套接字地址(dlsym()
)libc.so
.
然后搜索套接字地址在libjavacore.so
像部分文件.got
,.plt
,.dlsym
,.dynamic
.
将实际套接字地址替换为内存中实际套接字地址所在位置的自定义套接字地址.
对于32位Android设备,上述方法适用于我.但对于64位Android设备,我不适合我.尝试使用适当的数据类型,uint_ptr
以便它将自动调整.但仍然失败.当我进一步调试时发现该libjavacore.so
文件是在64位系统上运行的32位ELF.因此,尝试使用uint32_t
和uint64_t
类型并尝试两者.但仍然失败.
请问任何人让我知道如何在onPrepareDialog()中更改警告对话框的消息(正文).
即使在onPrepareDialog()函数中对Dialog参数进行类型转换后,我也找不到像setText()这样的函数.
我不想使用
removeDialog()
showDialog()
,因为它将是GC清理对象的开销,如果我去自定义对话框,那么在主题的情况下代码变得非常大.
如果有人想知道在onPrepareDialog()函数中更改AlertDialog的文本,请告诉我.
谢谢和问候,
SSuman185
我正在尝试注册接收器以删除SD卡,但我的接收器没有被要求删除sd卡粘贴我的代码.我在oncreate()中注册接收器并在ondestroy函数中取消注册.如果我有任何错误,请告诉我.
void registerSDCardStateChangeListener() {
final String MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED";
final String MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED";
final String MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL";
// final String MEDIA_EJECT = "android.intent.action.MEDIA_EJECT";
final String MEDIA_EJECT = "android.intent.action.MEDIA_SCANNER_FINISHED";
mSDCardStateChangeListener = new BroadcastReceiver() {
@
Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equalsIgnoreCase(MEDIA_REMOVED) || action.equalsIgnoreCase(MEDIA_UNMOUNTED) || action.equalsIgnoreCase(MEDIA_BAD_REMOVAL) || action.equalsIgnoreCase(MEDIA_EJECT)) {
if (mMediaPlayer != null) {
stopPlayBack();
}
}
}
};
IntentFilter filter = new IntentFilter();
filter.addAction(MEDIA_REMOVED);
filter.addAction(MEDIA_UNMOUNTED);
filter.addAction(MEDIA_BAD_REMOVAL);
filter.addAction(MEDIA_EJECT);
registerReceiver(mSDCardStateChangeListener, filter);
}
Run Code Online (Sandbox Code Playgroud)
如果我的代码有任何问题,请告诉我.
在我的应用程序中,将有一个线程始终在运行,并将发送或侦听某个端口.
此应用程序在后台运行.有时在创建套接字时,我发现之前由同一个线程使用的端口没有在套接字的close()上释放.所以我试着这样
dc = new DatagramSocket(inetAddr);
dc.setReuseAddress(true);
Run Code Online (Sandbox Code Playgroud)
问题是,它也没有到达第二行.在第一行本身我得到了解释BindException: Address already in use
.
谁能帮助我如何处理这种情况.
有没有办法释放端口?
谢谢和问候,
SSuman185
开发环境:
NDK:r7
SDK和工具:r15
AVD:GB2.3.3,API级别10
我写了一个测试应用程序,其中的线程将在本机中启动.我在线程中保留了一个断点.(当我尝试使用Galaxy S2时,我遇到了错误,"此平台不支持线程调试".所以我创建了AVD 2.3.3等级10).
在此之后我得到了这样的错误
#0 0xafd0c51c in epoll_wait () from /Volumes/SecureCode/webos/rta/android/obj/local/armeabi/libc.so
#1 0xa81216a6 in ?? ()
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索并找到了这个解决方案(Link Here).
我按照那里的指导线
$ adb pull /system/lib lib
$ ndk-gdb
...
(gdb) set solib-search-path lib
Run Code Online (Sandbox Code Playgroud)
但在此之后我也无法达到突破点.我仍然卡在这个poll_wait()而不是前进.
D:\EclipseTestWorkspace\CallbackJava>sh
sh-4.1$ ndk-gdb --force --start --verbose
Android NDK installation path: /cygdrive/c/Android/android-ndk
Using default adb command: /cygdrive/c/Android/android-sdk-windows/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.29
Using final ADB command: '/cygdrive/c/Android/android-sdk-windows/platform-tools/adb'
Using auto-detected project path: .
Found package name: com.callback
ABIs targetted by application: armeabi …
Run Code Online (Sandbox Code Playgroud)