我正在开发一个 android 库,所以除了库用户需要访问的几个类之外,我希望将所有库代码包保密。
在这些类中有一个 IntentService。但是,应用程序崩溃并出现此错误:
java.lang.RuntimeException: Unable to instantiate service com.library.sdk.SaveDataIntentService: java.lang.IllegalAccessException: java.lang.Class<com.library.sdk.SaveDataIntentService> is not accessible from java.lang.Class<android.app.ActivityThread>
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3304)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6349)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
Caused by: java.lang.IllegalAccessException: java.lang.Class<com.library.sdk.SaveDataIntentService> is not accessible from java.lang.Class<android.app.ActivityThread>
at java.lang.Class.newInstance(Native Method)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3301)
at android.app.ActivityThread.-wrap5(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1635)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6349)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)
甚至 list 也会显示警告,因为 Intent 服务未声明为公共(public)类。
究竟是什么导致了这种情况,为什么需要公开 Intent 服务?
最佳答案
What exactly is causing this
包外的 Java 类需要创建 IntentService
的实例。
why does the intent service need to be public?
因为包外的 Java 类不能创建包私有(private)类的实例,也不能调用包私有(private)构造函数。
关于java - 为什么不能将 Intent Service 声明为私有(private)包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48323633/