1

我有一个 targetVersion 为 16 的项目,我正在使用 SherlockActionBar 和 support-library 来支持 API 级别 8。我正在尝试将CarouselView集成到我的项目中。我计划将 CarouselView 用于支持的版本,将 pageViewer 用于其他版本。我正在使用 Jetbrains IDEA 进行开发。通常我可以使用 IDEA 毫无问题地构建和部署我的应用程序。但是我无法使用 android-tools 构建应用程序。产生的错误在底部。

在调查错误时,我意识到 renderscript 尝试使用 api-level 8 进行编译。我查看了 %sdk.dir%\tools\ant\build.xml 并看到 renderscript 目标使用 project.minSdkVersion 作为 targetApi。这是一个错误还是什么?

<renderscript executable="${renderscript}"
            includePathRefId="android.renderscript.include.path"
            genFolder="${gen.absolute.dir}"
            resFolder="${out.res.absolute.dir}/raw"
            targetApi="${project.minSdkVersion}"
            optLevel="${renderscript.opt.level}"
            buildType="${build.is.packaging.debug}"
            previousBuildType="${build.last.is.packaging.debug}">
        <source path="${source.absolute.dir}"/
</renderscript> 

-代码生成:

[mergemanifest] 找到已删除的目标文件 [mergemanifest] 将 AndroidManifest 文件合并为一个。[mergemanifest] 清单合并已禁用。仅使用项目清单。[echo] 处理aidl 文件... [aidl] 没有要编译的AIDL 文件。[echo] ---------- [echo] 处理 RenderScript 文件... [renderscript] 找到 1 个 RenderScript 文件。 [renderscript] 使用 -target-api 8 编译 1 个 RenderScript 文件[renderscript] 优化级别:0 [llvm-rs-cc.exe] D:\Projects\TEB\teb\src\com\pozitron\teb\customwidgets\carousel\carousel.rs:236:14:错误:包含向量的结构维度 3 无法在此 API 级别导出:'carouselPlane' [llvm-rs-cc.exe] D:\Projects\TEB\teb\src\com\pozitron\teb\customwidgets\carousel\carousel.rs:242: 17:错误:无法在此 API 级别导出包含维度 3 向量的结构:'carouselCylinder' [llvm-rs-cc.exe] D:\Projects\TEB\teb\src\com\pozitron\teb\customwidgets\carousel \carousel.rs:254:21:错误:无法在此 API 级别导出包含维度 3 向量的结构:'cardVertices' [llvm-rs-cc.exe] D:\Projects\TEB\teb\src\com\ pozitron\teb\customwidgets\carousel\carousel.rs:262:26: 错误:无法在此 API 级别导出包含维度 3 向量的结构:'camera' [llvm-rs-cc.exe] D:\Projects\TEB\teb\src\com\pozitron\teb\customwidgets\carousel\carousel.rs :1503:20: 错误:无法在此 API 级别导出包含维度 3 向量的结构:'p' [llvm-rs-cc.exe] D:\Projects\TEB\teb\src\com\pozitron\teb\ customwidgets\carousel\carousel.rs:1045:9:错误:无法在此 API 级别导出包含维度 3 向量的结构:'ray' [llvm-rs-cc.exe] D:\Projects\TEB\teb\src \com\pozitron\teb\customwidgets\carousel\carousel.rs:1092:9:错误:无法在此 API 级别导出包含维度 3 向量的结构:'ray' [llvm-rs-cc.exe] D:\项目 [llvm-rs-cc.exe] ects\TEB\teb\src\com\pozitron\teb\customwidgets\carousel\carousel.rs:1503:20: 错误:包含维度为 3 c [llvm-rs-cc.exe] 的向量的结构不能在此 API 级别导出:'p' [llvm-rs-cc.exe] D:\Projects\TEB\teb\src\com\pozitron \teb\customwidgets\carousel\carousel.rs:1781:17:错误:无法在此 API 级别导出包含维度 3 向量的结构:'ray'

BUILD FAILED D:\Android\android-sdk\tools\ant\build.xml:645:执行此行时出现以下错误:D:\Android\android-sdk\tools\ant\build.xml:665: null返回:1

编辑:正如 Selvin 建议的那样,我从旧版本中复制了 renderscript 文件夹和 llvm-rs-cc.exe。现在我收到以下错误:

[mergemanifest] Found Deleted Target File
[mergemanifest] Merging AndroidManifest files into one.
[mergemanifest] Manifest merger disabled. Using project manifest only.
     [echo] Handling aidl files...
     [aidl] No AIDL files to compile.
     [echo] ----------
     [echo] Handling RenderScript files...
[renderscript] Found 1 RenderScript files.
[renderscript] Compiling 1 RenderScript files with -target-api 8
[renderscript] Optimization Level: 0
[llvm-rs-cc.exe] Generating ScriptC_carousel.java ...
[llvm-rs-cc.exe] Generating ScriptField_ProgramStore_s.java ...
[llvm-rs-cc.exe] Generating ScriptField_Card.java ...
[llvm-rs-cc.exe] Generating ScriptField_FragmentShaderConstants_s.java ...
     [echo] ----------
     [echo] Handling Resources...
     [aapt] Found Deleted Target File
     [aapt] Generating resource IDs...

BUILD FAILED
D:\Android\android-sdk\tools\ant\build.xml:645: The following error occurred while executing this line:
D:\Android\android-sdk\tools\ant\build.xml:683: java.lang.IllegalAccessError: tried to access class com.google.common.base.Platform from class com.google.common.base.CharMatcher
        at com.google.common.base.CharMatcher.precomputed(CharMatcher.java:684)
        at com.google.common.base.CharMatcher.<clinit>(CharMatcher.java:63)
        at com.google.common.base.Splitter.on(Splitter.java:129)
        at com.android.sdklib.internal.build.SymbolWriter.write(SymbolWriter.java:51)
        at com.android.ant.AaptExecTask.execute(AaptExecTask.java:711)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
        at com.android.ant.IfElseTask.execute(IfElseTask.java:120)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:398)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
        at org.apache.tools.ant.Task.perform(Task.java:348)
        at org.apache.tools.ant.Target.execute(Target.java:390)
        at org.apache.tools.ant.Target.performTasks(Target.java:411)
        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
        at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
        at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
        at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
        at org.apache.tools.ant.Main.runBuild(Main.java:809)
        at org.apache.tools.ant.Main.startAnt(Main.java:217)
        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)
4

2 回答 2

3

您关于目标 API 与最低 API 级别的 SDK 错误实际上是 Android SDK 编译代码的方式中的错误。至于使用较旧的 SDK/编译器来忽略 float3 问题,请不要这样做。这实际上是旧编译器和设备的一个错误,因为 float3 对齐/打包没有正确处理。旧设备的正确解决方案是使用 float4(在所有设备上都可以正常工作)。如果您使用 r15 中的旧编译器,您最终会得到仅适用于旧设备的某些子集的代码。

于 2012-11-28T03:47:59.370 回答
0

i've got the same problem...

i assuming that you're using newest SDK (21) with platform tool 16...

from this version render script doesn't like structures like

typedef struct Ray_s {
    float3 position;
    float3 direction;
} Ray;

with float3... so download older platform tools from:

http://dl.google.com/android/repository/platform-tools_r15_rc9-linux.zip

http://dl.google.com/android/repository/platform-tools_r15_rc9-windows.zip

http://dl.google.com/android/repository/platform-tools_r15_rc9-macosx.zip

make copy of your

C:\adsdk\platform-tools\llvm-rs-cc.exe <= this file

and

C:\adsdk\platform-tools\renderscript <= whole folder

and replace them with the ones from zip

OR

replace float3 with float4 in render script and do other code change(i'm pretty sure that changing only float3 to float4 will not work)

于 2012-11-27T13:48:24.313 回答