4个回答
2016-01-24 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
2015-12-28 · 知道合伙人教育行家
关注
展开全部
要了解eclipse编译时怎么选择安卓版本,就要先了解eclipse和android源码编译应用效果有差异
1.查看代码,但是很明显代码里画焦点框和阴影都是同时画的,坐标也是一样的,文字那里没有加阴影的代码
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void onDrawFocus(Canvas canvas, int left, int top) {
//阴影
paint.reset();
paint.setShadowLayer(20f, 10f, 10f, Color.BLACK);
RectF focusRectF = new RectF(x - space, y - space, r + space, b
+ space);
canvas.save();
canvas.drawRoundRect(focusRectF, 10f, 10f, paint);
canvas.restore();
// 显示全图
canvas.save();
canvas.drawBitmap(image_temp, x - space, y - space, null);
canvas.restore();
paint.reset();
paint.setStrokeWidth(6);
paint.setStyle(Style.STROKE);
paint.setColor(Color.rgb(255, 201, 42));
RectF focusRectF1 = new RectF(x - space, y - space, r + space, b
+ space); // 焦点框
canvas.save();
canvas.drawRoundRect(focusRectF1, 0, 0, paint);
canvas.restore();
}
所以想来代码是不会出现这样的的效果的。为了得到结论,重新加了段代码,画了个红色矩形块放到android源码里编译,也正常显示了。唯独这个阴影跑到文字上去了。莫名中...
2.折磨良久未果,老大过来反馈下,给我建议:反编译对比2个apk,有哪些地方不一样。
dex2jar.bat反编译源码,不对呀,不应该是源码问题导致的,2者编译过程最多是编译部分代码的顺序不一致。
apktool反编译资源文件。2者()最后对比,发现:
android 源码编译的apk eclipse编译的apk
lib下面的库首先排除,smali也是源码里的东西,也可排除;但当时注意了以下smali/android/annotation/下面多了2个文件,打开之后:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.class public interface abstract annotation Landroid/annotation/TargetApi;
.super Ljava/lang/Object;
.source "TargetApi.java"
# interfaces
.implements Ljava/lang/annotation/Annotation;
# annotations
.annotation runtime Ljava/lang/annotation/Retention;
value = .enum Ljava/lang/annotation/RetentionPolicy;->CLASS:Ljava/lang/annotation/RetentionPolicy;
.end annotation
.annotation runtime Ljava/lang/annotation/Target;
value = {
.enum Ljava/lang/annotation/ElementType;->TYPE:Ljava/lang/annotation/ElementType;,
.enum Ljava/lang/annotation/ElementType;->METHOD:Ljava/lang/annotation/ElementType;,
.enum Ljava/lang/annotation/ElementType;->CONSTRUCTOR:Ljava/lang/annotation/ElementType;
}
.end annotation
# virtual methods
.method public abstract value()I
.end method
没看明白,╮(╯▽╰)╭
网上找下,原来是代码注释的接口。代码中使用:
@TargetApi annotaion:高版本API的代码在低版本SDK兼容
但好像,这个也并没有方法解决此时的问题。接着往下看AndroidManifest.xml:
只有这个一个地方不一样:
android:targetSdkVersion="15"
此时也点愣了,我了个去,作者代码上传svn时并没有这个android:targetSdkVersion="15" 啊。绞尽脑思没明白这是为什么?抓狂中...
(android:minSdkVersion="" android:targetSdkVersion="" android:minSdkVersion=""可以网上找下了解这个区别)
查看官方api,这么描述:
设置这个属性是为了使你的应用能正常兼容运行在你的设备上,当设备平台的系统API高于你应用中设置的targetSdkVersion。
但是明显有一句:
?
1
An integer designating the API Level that the application targets. If not set, the default value equals that given to minSdkVersion.
当没有设置时,默认值为你给出最小的minSdkVersion。那此时这个应该就是我设置8呀,为什么会是15?痛苦中...
接着找原因。我用的android源码版本就是4.0.3的,正好是对应15的level。是不android源码编译时,默认加进去了?
半天,这猜测没有找到解释。悲催中...
那就按照boss的解决问题的终极思路---死办法:试试呗。不能老纠结在这个问题,只能试过才能验证。
3.猜想碰运气
a>eclipse中的AndroidManifest.xml中加上android:targetSdkVersion="15",编译运行发现,出现和android源码编译的apk一样,阴影跑到上面文字上去了╮(╯▽╰)╭
这怎么整,源码里编译,有方法可以不让加上android:targetSdkVersion="15" 这个么?表示没找到。无奈继续试...
b>eclipse中的android:targetSdkVersion="14",编译还是同样的效果,不是说设备机的版本高于刚设置的“14”,就启用兼容运行么?为什么效果还是和15一样的?表示极度不解?
c>继续调android:targetSdkVersion="13",效果正常了,阴影在焦点框周围了。这是为什么?为什么?不懂....
没办法,接着试下把android:targetSdkVersion="13",放到android源码了编译,效果正常显示
4.附:
问题是解决了,但是这搞得不明不白的。
这原因现在还没弄明白,为什么api里说的有误差?让我怀疑这已经最准确的释义?诚心求遇到同样问题并解决问题的朋友转告下,tksO(∩_∩)O~
1.查看代码,但是很明显代码里画焦点框和阴影都是同时画的,坐标也是一样的,文字那里没有加阴影的代码
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void onDrawFocus(Canvas canvas, int left, int top) {
//阴影
paint.reset();
paint.setShadowLayer(20f, 10f, 10f, Color.BLACK);
RectF focusRectF = new RectF(x - space, y - space, r + space, b
+ space);
canvas.save();
canvas.drawRoundRect(focusRectF, 10f, 10f, paint);
canvas.restore();
// 显示全图
canvas.save();
canvas.drawBitmap(image_temp, x - space, y - space, null);
canvas.restore();
paint.reset();
paint.setStrokeWidth(6);
paint.setStyle(Style.STROKE);
paint.setColor(Color.rgb(255, 201, 42));
RectF focusRectF1 = new RectF(x - space, y - space, r + space, b
+ space); // 焦点框
canvas.save();
canvas.drawRoundRect(focusRectF1, 0, 0, paint);
canvas.restore();
}
所以想来代码是不会出现这样的的效果的。为了得到结论,重新加了段代码,画了个红色矩形块放到android源码里编译,也正常显示了。唯独这个阴影跑到文字上去了。莫名中...
2.折磨良久未果,老大过来反馈下,给我建议:反编译对比2个apk,有哪些地方不一样。
dex2jar.bat反编译源码,不对呀,不应该是源码问题导致的,2者编译过程最多是编译部分代码的顺序不一致。
apktool反编译资源文件。2者()最后对比,发现:
android 源码编译的apk eclipse编译的apk
lib下面的库首先排除,smali也是源码里的东西,也可排除;但当时注意了以下smali/android/annotation/下面多了2个文件,打开之后:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.class public interface abstract annotation Landroid/annotation/TargetApi;
.super Ljava/lang/Object;
.source "TargetApi.java"
# interfaces
.implements Ljava/lang/annotation/Annotation;
# annotations
.annotation runtime Ljava/lang/annotation/Retention;
value = .enum Ljava/lang/annotation/RetentionPolicy;->CLASS:Ljava/lang/annotation/RetentionPolicy;
.end annotation
.annotation runtime Ljava/lang/annotation/Target;
value = {
.enum Ljava/lang/annotation/ElementType;->TYPE:Ljava/lang/annotation/ElementType;,
.enum Ljava/lang/annotation/ElementType;->METHOD:Ljava/lang/annotation/ElementType;,
.enum Ljava/lang/annotation/ElementType;->CONSTRUCTOR:Ljava/lang/annotation/ElementType;
}
.end annotation
# virtual methods
.method public abstract value()I
.end method
没看明白,╮(╯▽╰)╭
网上找下,原来是代码注释的接口。代码中使用:
@TargetApi annotaion:高版本API的代码在低版本SDK兼容
但好像,这个也并没有方法解决此时的问题。接着往下看AndroidManifest.xml:
只有这个一个地方不一样:
android:targetSdkVersion="15"
此时也点愣了,我了个去,作者代码上传svn时并没有这个android:targetSdkVersion="15" 啊。绞尽脑思没明白这是为什么?抓狂中...
(android:minSdkVersion="" android:targetSdkVersion="" android:minSdkVersion=""可以网上找下了解这个区别)
查看官方api,这么描述:
设置这个属性是为了使你的应用能正常兼容运行在你的设备上,当设备平台的系统API高于你应用中设置的targetSdkVersion。
但是明显有一句:
?
1
An integer designating the API Level that the application targets. If not set, the default value equals that given to minSdkVersion.
当没有设置时,默认值为你给出最小的minSdkVersion。那此时这个应该就是我设置8呀,为什么会是15?痛苦中...
接着找原因。我用的android源码版本就是4.0.3的,正好是对应15的level。是不android源码编译时,默认加进去了?
半天,这猜测没有找到解释。悲催中...
那就按照boss的解决问题的终极思路---死办法:试试呗。不能老纠结在这个问题,只能试过才能验证。
3.猜想碰运气
a>eclipse中的AndroidManifest.xml中加上android:targetSdkVersion="15",编译运行发现,出现和android源码编译的apk一样,阴影跑到上面文字上去了╮(╯▽╰)╭
这怎么整,源码里编译,有方法可以不让加上android:targetSdkVersion="15" 这个么?表示没找到。无奈继续试...
b>eclipse中的android:targetSdkVersion="14",编译还是同样的效果,不是说设备机的版本高于刚设置的“14”,就启用兼容运行么?为什么效果还是和15一样的?表示极度不解?
c>继续调android:targetSdkVersion="13",效果正常了,阴影在焦点框周围了。这是为什么?为什么?不懂....
没办法,接着试下把android:targetSdkVersion="13",放到android源码了编译,效果正常显示
4.附:
问题是解决了,但是这搞得不明不白的。
这原因现在还没弄明白,为什么api里说的有误差?让我怀疑这已经最准确的释义?诚心求遇到同样问题并解决问题的朋友转告下,tksO(∩_∩)O~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
project.properties文件中的target就是编译版本
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在mainfest文件里面开头处有最小和最大版本号,简单点就在properties文件里面最后一行改,如用4.0的就改成14 2.2的改成8就OK了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询