首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在android的proguard中保持类内的公共接口

如何在android的proguard中保持类内的公共接口
EN

Stack Overflow用户
提问于 2016-07-13 14:34:38
回答 2查看 768关注 0票数 1

我在android应用程序中有一个AB类。这个类有一个公共接口INF。当我尝试在启用proguard的情况下进行发布构建时,它会显示

错误:找不到符号类INF

在我的proguard.cfg文件中,我添加了以下几行:

代码语言:javascript
复制
-keep public interface com.some.somemore.AB$INF {*;}
-keep class com.some.somemore.AB {*;}

请帮助解释为什么会出现此错误。

代码语言:javascript
复制
public class AB {

public interface INF {
    public void Ready();
    public void Error(int error);
    public void Click();
    public void Complete();
    public void Dismiss();
}

}

以下是崩溃日志

代码语言:javascript
复制
E/AndroidRuntime: FATAL EXCEPTION: main
                                               Process: com.sliq.android.sliq, PID: 14828
                                               java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sliq.android.sliq/org.nexage.sourcekit.vast.activity.VASTActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.nexage.sourcekit.vast.a.e.a()' on a null object reference
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2314)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388)
                                                   at android.app.ActivityThread.access$800(ActivityThread.java:148)
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292)
                                                   at android.os.Handler.dispatchMessage(Handler.java:102)
                                                   at android.os.Looper.loop(Looper.java:135)
                                                   at android.app.ActivityThread.main(ActivityThread.java:5312)
                                                   at java.lang.reflect.Method.invoke(Native Method)
                                                   at java.lang.reflect.Method.invoke(Method.java:372)
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901)
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696)
                                                Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.nexage.sourcekit.vast.a.e.a()' on a null object reference
                                                   at org.nexage.sourcekit.vast.activity.VASTActivity.onCreate(Unknown Source)
                                                   at android.app.Activity.performCreate(Activity.java:5953)
                                                   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1128)
                                                   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2267)
                                                   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2388) 
                                                   at android.app.ActivityThread.access$800(ActivityThread.java:148) 
                                                   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1292) 
                                                   at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                   at android.os.Looper.loop(Looper.java:135) 
                                                   at android.app.ActivityThread.main(ActivityThread.java:5312) 
                                                   at java.lang.reflect.Method.invoke(Native Method) 
                                                   at java.lang.reflect.Method.invoke(Method.java:372) 
                                                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:901) 
                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:696) 

我正在使用这个开源项目https://github.com/nexage/sourcekit-vast-android作为我工作室项目中的一个模块。它在名为VAST的开源项目中崩溃了。我已经在我的studio项目中添加了VAST作为模块依赖项。我已经为我的工作室项目和庞大的模块启用了proguard。下面是我用于VAST模块的proguard.config文件:

代码语言:javascript
复制
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-dontshrink
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep class org.nexage.sourcekit.vast.VASTPlayer {*;}
-keep interface org.nexage.sourcekit.vast.VASTPlayerListener {*;}
-keep class org.nexage.sourcekit.vast.model.** {*;}
-keep class org.nexage.sourcekit.vast.processor.** {*;}
-keep class org.nexage.sourcekit.vast.activity.** {*;}
-keep class org.nexage.sourcekit.util.** {*;}
EN

回答 2

Stack Overflow用户

发布于 2016-07-13 15:20:28

您的实现应该如下所示:

代码语言:javascript
复制
import com.my.packagename.AB;

public class MainActivity extends ActionBarActivity implements AB.TestInterface {

 // other stuff

@Override
public void Ready() {

}

@Override
public void Error(int error) {

}

@Override
public void Click() {

}

@Override
public void Complete() {

}

@Override
public void Dismiss() {

}

}

你需要导入父类,希望这能对你有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2016-07-13 15:07:02

尝试使用

代码语言:javascript
复制
-keepclassmembers class com.some.somemore.AB { *; }

希望能有所帮助

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38344211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档