我想用proguard来混淆类名.我在Proguard.cfg中有这一行
-keepclasseswithmembers class * {
public static <fields>;
}
-keepnames class * implements java.io.Serializable
-keep public class com.google.**
Run Code Online (Sandbox Code Playgroud)
而且我注意到没有混淆的是类名.所以运行jdgui我看到com/test/abcd/ActualClass.java公共类ActualClassName扩展Activity等
此外,我看到返回真正的类名的方法.喜欢
ActualClassname aa();
Run Code Online (Sandbox Code Playgroud)
和导入语句一样
import com.abcd.ActualClassName
Run Code Online (Sandbox Code Playgroud)
如何让Proguard对类名本身进行模糊处理.它不仅适用于我看到的活动,我的适配器也没有被混淆.好吧有混淆但不是类名.
上面的规则是什么阻止了类名被混淆了?
更新:我已经删除了上面的规则,并且没有从Android扩展任何东西的Utility类没有被混淆.我现在想知道是否有一些隐含的规则来保持类的类名被保存为类派生类的类?名称未被混淆的类有一些共同点:
1)静态方法2)导入其他类型,这些类型保存为源自活动或可序列化的类型.3)他们有方法与其他类的参数(其中一些可能需要保留).
但是,我没有特别要求保留这些实用程序类的地方.
我有一个例外我从未想过会看到.从ListView(原文如此)中删除页脚视图时适配器的类强制转换异常.
java.lang.ClassCastException: com.test.MyAdapter
at android.widget.ListView.removeFooterView(ListView.java:381)
Run Code Online (Sandbox Code Playgroud)
怎么会发生这种情况?删除页脚与类强制转换异常有什么关系????
该列表是一个多列表适配器,也许这就是为什么但仍然是一个用于删除页脚(sic)的类强制转换异常.
我需要组合两个列表,每个列表在它自己单独的异步调用之后返回.如何最好地协调像这样的异步调用.是否有任何标准的SDK方法可以等待另一个异步任务完成?
我需要在列表视图中检测水平滑动.我应该使用手势检测器还是onTouch事件.我需要支持Android 2.1+
一篇帖子表明需要在ListView中覆盖onInterceptTouchEvent,如下所示:
@Override public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: // reset difference values mDiffX = 0; mDiffY = 0;
mLastX = ev.getX();
mLastY = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();
mDiffX += Math.abs(curX - mLastX);
mDiffY += Math.abs(curY - mLastY);
mLastX = curX;
mLastY = curY;
// don't intercept event, when user tries to scroll vertically
if (mDiffX > mDiffY) {
return false; // do not react …Run Code Online (Sandbox Code Playgroud) 我想单独点击文本的几个部分,例如在下面的文本中:
天气预报一天,两天,七天.
我希望能够单独点击文本的三个不同区域,以获得一天,两天或七天的预测.我不想让它转到网页网址,只是抓住显示TextView的活动内部文本区域的点击.
你怎么解决蚂蚁的财产?所以这是作为财产完全删除?
<condition property="proguard.config" value="proguard.cfg">
<isset property="proguarded"/>
</condition>
<condition property="proguard.config" value="">
<not>
<isset property="proguarded"/>
</not>
</condition>
Run Code Online (Sandbox Code Playgroud)
这似乎有效.然而,即使存在proguard.config这样的属性,proguard也会运行.那么如何有条件地将proguard.config作为属性删除呢?我知道如果proguard看到.properties文件中存在proguard.config属性,它将运行.
导致此错误的原因是什么:
java.lang.RuntimeException: Unable to pause activity {
com.test/com.test.activities.MyActivity}: java.lang.IllegalArgumentException:
Receiver not registered: android.widget.VideoView$EventReceiver@98976 at android.app.ActivityThread.performPauseActivity(ActivityThread.java:2354) at
android.app.ActivityThread.performPauseActivity(ActivityThread.java:2311) at
android.app.ActivityThread.handlePauseActivity(ActivityThread.java:2291) at
android.app.ActivityThread.access$1700(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:942) at
android.os.Handler.dispatchMessage(Handler.java:99) at
android.os.Looper.loop(Looper.java:130) at
android.app.ActivityThread.main(ActivityThread.java:3683) at
java.lang.reflect.Method.invokeNative(Native Method) at
java.lang.reflect.Method.invoke(Method.java:507) at
com.android.internal.os.ZygoteInit$MethodAndArg…
Run Code Online (Sandbox Code Playgroud) 我想处理容器级别的所有触摸事件.换句话说,我希望所有触摸事件都达到容器级别.现在我发现,如果触摸的位置没有落在视图组包含的UI组件上,TouchEvents只会到达包含的ViewGroup.包含的UI元素处理TouchEvent,它不会冒泡到容器.有谁知道如何保证所有触摸事件都达到顶级容器?
为了清楚起见,用几个按钮,几个编辑文本和几个复选框来描绘一个活动.典型的形式.通常情况下,我看到每个UI组件都会捕获落在它上面的TouchEvent,并且容器不是更明智的.因此,我想知道容器/视图组如何被告知在其区域内任何地方的所有触摸,无论该区域是否被按钮,空白区域或编辑文本占据.
当用户点击内置搜索对话框中的应用程序图标时,是否有捕获?请注意我不是指自定义对话框,而是指内置于搜索对话框中的android.
我有一个ListView,我添加了一个页脚.我可以在列表视图上调用什么来确定给定的页脚当前是否已添加到列表视图中?
listView.findViewById(errorFooterid) ?
Run Code Online (Sandbox Code Playgroud)
似乎没有一种方法
view.containsView(viewReference)
Run Code Online (Sandbox Code Playgroud)
检查现有视图是否包含在另一个中似乎是一个基本操作,但我不知道是否有一种可靠的方法可以在android中检查它.
为什么SDK不支持一种清晰简单的方法来检查?甚至findByView(R.id.viewId)和null检查也不是很优雅的做布尔检查的方法.