在这篇文章中,我们将带领您了解proguard-rules.pro文件上的FileNotFoundException的全貌,包括progranfiles的相关情况。同时,我们还将为您介绍有关.cspr
在这篇文章中,我们将带领您了解proguard-rules.pro文件上的FileNotFoundException的全貌,包括progran files的相关情况。同时,我们还将为您介绍有关.csproj称为Nuget包时,FileNotFoundException、.NET Standard库引用导致的FileNotFoundException探究、@PropertySource绝对路径(java.io.FileNotFoundException问题解决)、android – FileNotFoundException将文件写入SD卡的知识,以帮助您更好地理解这个主题。
本文目录一览:- proguard-rules.pro文件上的FileNotFoundException(progran files)
- .csproj称为Nuget包时,FileNotFoundException
- .NET Standard库引用导致的FileNotFoundException探究
- @PropertySource绝对路径(java.io.FileNotFoundException问题解决)
- android – FileNotFoundException将文件写入SD卡
proguard-rules.pro文件上的FileNotFoundException(progran files)
我正在使用Android Studio v.1.0我的构建文件:
buildTypes { debug { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' } release { minifyEnabled true proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro'' }}
但是,当我尝试进行发行版本构建时,出现错误:错误:任务’:app:proguardRelease’的执行失败。
java.io.FileNotFoundException:F:.... \ app \ proguard-rules.pro(未找到文件)
我认为,proguard-android.txt是Android SDK的一部分,对吗?
为什么Android Studio无法找到它?
我也尝试过proguard-android.pro-相同的结果
答案1
小编典典我已经创建了自己的proguard-android.pro文件,并且对我来说可以正常使用:
-dontwarn org.apache.commons.**-dontwarn com.google.**-dontwarn com.j256.ormlite**-dontwarn org.apache.http**-keepattributes SourceFile,LineNumberTable-keep class com.j256.**-keepclassmembers class com.j256.** { *; }-keep enum com.j256.**-keepclassmembers enum com.j256.** { *; }-keep interface com.j256.**-keepclassmembers interface com.j256.** { *; }-keepattributes Signature# GSON Library# For using GSON @Expose annotation-keepattributes *Annotation*# Gson specific classes-keep class sun.misc.Unsafe { *; }#-keep class com.google.gson.stream.** { *; }# Application classes that will be serialized/deserialized over Gson-keep class com.google.gson.examples.android.model.** { *; }# Google Map-keep class com.google.android.gms.maps.** { *; }-keep interface com.google.android.gms.maps.** { *; }
.csproj称为Nuget包时,FileNotFoundException
我通过在.csproj中添加以下内容来解决此问题,
<ItemGroup>
<Content Include="ContentFiles\**" PackagePath="contentFiles\any\any;content" CopyToOutputDirectory="Always" PackageCopyToOutput="true" />
</ItemGroup>
.NET Standard库引用导致的FileNotFoundException探究
微软近几年推出.NET Standard,将.NET Framework,.NET Core,Xamarin等目标平台的api进行标准化和统一化,极大地方便了类库编写人员的工作。简单的说,类库编写人员在发布库的时候,只需要基于.NET Standard进行发布,那么编写的程序可以在各个目标平台上都能到运行。
.NET Standard是一种标准,只要符合这个标准的平台都可以运行基于此标准api构建的程序。
感觉挺好用的,但是实际上用起来就有一些坑了。比如说这个常见的FileNotFoundException,当有这个情况的时候,经常出现:
主程序的目标平台是某个具体平台(不是.NET Standard,比如说是.NET Framework 4.0),随后为了引入新的特性,升级了Framework为4.6.1,它并且引用了一个.NET Standard类库,恰好,这个类库还引用了其他的package。(即传递引用A->B->C的形式,其中A是.NET Framework程序,B是nuget包,C是B引用的nuget包。)在此情况下,如果F5启动程序,就会报FileNotFoundException。
测试条件 Visual Studio 2015 Community 测试用包:UnifiedConfig v1.1.6
提示未找到System.IO.FileSystem。乍看感觉是一个简单的引用错误,但unifiedconfig包里面已经正常引用了这个项目,按道理vs能够正常帮我们处理引用问题。到文件输出路径中查看,发现对应的包没有正确复制过来。手动从package文件夹中复制过来,问题解决。
原因出在这个跨平台上。由于存在引用传递,B不能确定需要复制哪个目标平台的package到A的输出路径。当程序是从旧的Framework升级而来的时候,旧版的项目文件不能很好地处理.NET Standard的这个问题。但我们手动一个一个复制也不是办法,以下给出解决方案。
解决方案:
- 最直接的方案,修改主项目的.csproj文件,将
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
添加到第一个PropertyGroup - 如果还不行,加上
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
或者
- 在工具->nuget包管理器->程序包管理->默认包管理格式,从Packages.config改成PackageReference。
后记
我记得在visual studio 2017早期版本还存在这个bug,升级之后visual studio 2017 15.6.4这个版本测试新建项目,已经没有这个问题。并且默认生成的基于4.5.2以上Framework的.csproj文件已经添加<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
这个配置。但是当老版本的项目引用.NET Standard类库的时候,还是经常会出现这个问题,这时候,就需要我们手动添加配置项目了。
@PropertySource绝对路径(java.io.FileNotFoundException问题解决)
经常使用@PropertySource 来指定配置文件,然后@value获取配置参数:
1 @Component
2 @PropertySource(value= {"classpath:rules.yml"})
3 @ConfigurationProperties(prefix = "busi-udid-mapper")
默认,配置文件都是指定classpath下的文件路径,如果使用绝对路径(操作系统下某个配置文件路径),请使用如下方式:
1 @Component
2 @PropertySource(value= {"file:${rule.fullpath}"})
3 @ConfigurationProperties(prefix = "busi-udid-mapper")
这里的rule.funnpath是在系统配置文件中变量化的参数
参考:
http://www.voidcn.com/article/p-scladotq-bva.html
android – FileNotFoundException将文件写入SD卡
我正在尝试从网上下载文件并将其写入SD卡.我启用了WRITE_EXTERNAL_STORAGE权限.代码在这里失败:
OutputStream output = new FileOutputStream(filePath);
09-15 19:40:31.630: WARN/System.err(7933): java.io.FileNotFoundException: /sdcard/artoo/Customerv08.apk
09-15 19:40:31.630: WARN/System.err(7933): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:231)
09-15 19:40:31.630: WARN/System.err(7933): at java.io.FileOutputStream.<init>(FileOutputStream.java:96)
09-15 19:40:31.630: WARN/System.err(7933): at java.io.FileOutputStream.<init>(FileOutputStream.java:169)
09-15 19:40:31.630: WARN/System.err(7933): at java.io.FileOutputStream.<init>(FileOutputStream.java:147)
09-15 19:40:31.640: WARN/System.err(7933): at com.artoo.settings.InstallerActivity$ProgressDialogAsyncTask.doInBackground(InstallerActivity.java:148)
09-15 19:40:31.640: WARN/System.err(7933): at com.artoo.settings.InstallerActivity$ProgressDialogAsyncTask.doInBackground(InstallerActivity.java:1)
09-15 19:40:31.640: WARN/System.err(7933): at android.os.AsyncTask$2.call(AsyncTask.java:185)
09-15 19:40:31.640: WARN/System.err(7933): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:256)
09-15 19:40:31.640: WARN/System.err(7933): at java.util.concurrent.FutureTask.run(FutureTask.java:122)
09-15 19:40:31.640: WARN/System.err(7933): at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:648)
09-15 19:40:31.640: WARN/System.err(7933): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:673)
09-15 19:40:31.651: WARN/System.err(7933): at java.lang.Thread.run(Thread.java:1060)
09-15 19:40:31.670: WARN/InputManagerService(53): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@43868480
我正在尝试编写该文件,它从以前不存在.关于如何做到这一点的任何想法?
解决方法:
您收到该错误,因为指定的文件无法打开或不存在.这很简单.
我总是先创建一个文件并使用bufferedstream写入它,例如:
File file = new File(path, name);
file.createNewFile();
bufferedoutputstream out = new bufferedoutputstream(new FileOutputStream(file), BUFFER);
关于proguard-rules.pro文件上的FileNotFoundException和progran files的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于.csproj称为Nuget包时,FileNotFoundException、.NET Standard库引用导致的FileNotFoundException探究、@PropertySource绝对路径(java.io.FileNotFoundException问题解决)、android – FileNotFoundException将文件写入SD卡等相关内容,可以在本站寻找。
本文标签: