Androidmanifest.xml 中遇到的问题 怎么又是这个问题,参考一些吧:http://hi.baidu.com/gaogaf/item/c2165abf1a073b42bb0e1240 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的方法我看了。不是这个原因。而且出错的log也不一样。我是写了一个service。这个service在java层通过jni中一个函数的时候调用instantiate()加入servicemanager中。其中instantiate()中有一个 android::defaultServiceManager()->addService(IMyService::descriptor, myService);就是在调用这个的时候报错。报的错是:add_service('android.JNI.MyService',0x3d) uid=10004 - PERMISSION DENIED 我目前尝试的方法是 修改Androidmanifest。但是不知道修改的恰不恰当。<uses-permission android:name="android.permission.ADD_SYSTEM_SERVICE" ></uses-permission> <activity ................................................................................ android:sharedUserId="android.uid.system" > </activity>还有一种方法,就是将我写的service放入到init.rc中。在系统启动的时候,就开启服务。当时这种方法我正在做。所以这里求高手帮忙。感谢。真心感谢。我纠结了6天了。谢谢!!!真心向高手学习。谢谢!谢谢! jellybean:http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission.html看样子删了frameworks/base/cmds/servicemanager/service_manager.cint svc_can_register(unsigned uid, uint16_t *name){ unsigned n; if ((uid == 0) || (uid == AID_SYSTEM)) return 1; for (n = 0; n < sizeof(allowed) / sizeof(allowed[0]); n++) if ((uid == allowed[n].uid) && str16eq(name, allowed[n].name)) return 1; return 0;}另外不用喊高手低手的,大家知道的就会告诉你 多谢,我现在是把这个service加入到init.rc中,我调用的时候报了这个错误: Waiting for service android.myclient.IMyClient...我的addservice是这样写的int main(int argc, char** argv) { sp<IServiceManager> sm = defaultServiceManager(); MyService::instantiate();//初始化MyService服务 ProcessState::self()->startThreadPool();//看名字,启动Process的线程池 IPCThreadState::self()->joinThreadPool();//将自己加入到刚才的线程池 }能不能帮我看看,android.myclient.IMyClient是名字,这里主要就是发现它会在等待,然后整个界面就起不来了。求帮忙! 我想继续在这个上面问一个问题。 1 。我在 a.h 中定义了JNIEnv *Jenv; 和 jobject Jobj ;这2个变量是我用来C++调用java 必须要的。 2。我在b_jni.cpp 中引入 a.h并且 extern JNIEnv *Jenv; extern jobject Jobj ; 在这个b_jni.cpp中对它们赋值。 3. 在 c.cpp 中引入 a.h 调用 并且使用到了 Jenv和 Jobj的一些方法。 这是我判断了Jenv。 结构发现每次 Jenv 都是 NULL。 请问有什么好的方法,能使这个Jenv 和 Jobj 被b_jni.cpp中赋值了,然后再c.cpp中被我调用,而不是NULL。这里有一点说明,我每次都是先执行第二步中的赋值,才执行第三部。 或者有什么好的方法能够传递JNIEnv和jobject。 1. 如果你要用全局变量,不要在头文件中定义它,而是声明它extern JNIEnv *Jenv;,或者你可以在b.cpp中定义它:JNIEnv *Jenv = null;并赋值然后再c.cpp中声明它:extern JNIEnv *Jenv;就可以用了。2. 或者你在c.cpp中static JNIEnv *Jenv = null;然后提供一个函数让b设置过来。 嗯,谢谢,我刚跟老大谈了,这个方法行不通。jnienv 是不能再2个进程之间传递,我写的service就是一个进程。然后xx_jni.so 也是运行的一个在apk调用的时候的一个进程。所以,这种方法不行。我想问一下。java层能不能启动有binder机制的一个service。直接和我写的service通信。使得我的数据能够直接传递给java层? java 和 c++ 通过 binder机制、能不能通过jni?? google map在模拟器上显示正常,在真机上显示不出来是什么情况 媒体播放进度条更新功能使用AsyncTask异步处理问题。 想入门一下,求入门书籍。 Android设备如何通过USB和PC实现通讯 请问 如何把listView数据 更新 ? android如何连接Exchange Server? Galaxy S4 模拟器无法启动 ADT如何把StringArray的某一个元素赋值给PlainText android 更改应用签名微信不能分享了 listview的getview中如何不添加该条list? 关于GridView求解 Android ListView滚动卡
我是写了一个service。
这个service在java层通过jni中一个函数的时候
调用instantiate()加入servicemanager中。
其中instantiate()中有一个 android::defaultServiceManager()->addService(IMyService::descriptor, myService);
就是在调用这个的时候报错。
报的错是:add_service('android.JNI.MyService',0x3d) uid=10004 - PERMISSION DENIED
我目前尝试的方法是 修改Androidmanifest。但是不知道修改的恰不恰当。
<uses-permission android:name="android.permission.ADD_SYSTEM_SERVICE" ></uses-permission>
<activity
................................................................................
android:sharedUserId="android.uid.system" >
</activity>
还有一种方法,就是将我写的service放入到init.rc中。在系统启动的时候,就开启服务。当时这种方法我正在做。
所以这里求高手帮忙。感谢。真心感谢。我纠结了6天了。谢谢!!!真心向高手学习。谢谢!
谢谢!
http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission.html
看样子删了frameworks/base/cmds/servicemanager/service_manager.cint svc_can_register(unsigned uid, uint16_t *name)
{
unsigned n; if ((uid == 0) || (uid == AID_SYSTEM))
return 1; for (n = 0; n < sizeof(allowed) / sizeof(allowed[0]); n++)
if ((uid == allowed[n].uid) && str16eq(name, allowed[n].name))
return 1; return 0;
}
另外不用喊高手低手的,大家知道的就会告诉你
我现在是把这个service加入到init.rc中,
我调用的时候报了这个错误:
Waiting for service android.myclient.IMyClient...
我的addservice是这样写的
int main(int argc, char** argv) {
sp<IServiceManager> sm = defaultServiceManager();
MyService::instantiate();//初始化MyService服务
ProcessState::self()->startThreadPool();//看名字,启动Process的线程池
IPCThreadState::self()->joinThreadPool();//将自己加入到刚才的线程池
}
能不能帮我看看,android.myclient.IMyClient是名字,这里主要就是发现它会在等待,然后整个界面就起不来了。
求帮忙!
1 。我在 a.h 中定义了JNIEnv *Jenv; 和 jobject Jobj ;这2个变量是我用来C++调用java 必须要的。 2。我在b_jni.cpp 中引入 a.h并且
extern JNIEnv *Jenv;
extern jobject Jobj ;
在这个b_jni.cpp中对它们赋值。
3. 在 c.cpp 中引入 a.h 调用 并且使用到了 Jenv和 Jobj的一些方法。 这是我判断了Jenv。
结构发现每次 Jenv 都是 NULL。
请问有什么好的方法,能使这个Jenv 和 Jobj 被b_jni.cpp中赋值了,然后再c.cpp中被我调用,而不是NULL。这里有一点说明,我每次都是先执行第二步中的赋值,才执行第三部。
或者有什么好的方法能够传递JNIEnv和jobject。
或者你可以在b.cpp中定义它:
JNIEnv *Jenv = null;并赋值
然后再c.cpp中声明它:
extern JNIEnv *Jenv;
就可以用了。
2. 或者你在c.cpp中
static JNIEnv *Jenv = null;
然后提供一个函数让b设置过来。
jnienv 是不能再2个进程之间传递,
我写的service就是一个进程。
然后xx_jni.so 也是运行的一个在apk调用的时候的一个进程。
所以,这种方法不行。
我想问一下。java层能不能启动有binder机制的一个service。直接和我写的service通信。使得我的数据能够直接传递给java层?