如何从我在安卓上包含的第三方库中删除未使用的资源?
我链接到应用程序的第三方库通常包括我的应用程序未使用的资源文件,因此,最终会膨胀我的APK. 例如,包括Google Play服务库,但不使用登录按钮功能;所有这些图像和布局资源最终都进入了我的最终构建. 由于这些资源包含在编译的库中,我该如何从构建中删除它们? 解决方案 This answer is summarized from Removing Unused Resources which explains how to使用MinifyEnabled和收缩率,在官方文档上,它们在 对于第三方库来说,包括您的应用程序Codepath不使用的资产是一个普遍的问题,删除这些资产以便为您的用户生产较小的APK文件非常重要.值得庆幸的是,Gradle和Android Studio的最新版本提供了帮助的解决方案. 通过设置 MinifyEnabled 和缩小 在您的Gradle配置中,该系统将从您的应用程序中删除未使用的资源. android {
4 2023-05-23
编程技术问答社区
从assets或res/raw中的文件获取Uri
我试图实现此功能,并且在网上查看了许多不同的资源(从我所做的所有评论中可以看到).我想访问位于资产或RES中的.pdf文件;最简单的方法是什么都没关系. i具有下面的方法,该方法将获取实际文件,并将在参数中使用URI调用另一种方法(在下面的第一个方法下). 非常感谢您的帮助,我将旁边回答问题或添加更多内容. private void showDocument(File file) { //////////// ORIGINAL //////////////////// //showDocument(Uri.fromFile(file)); ////////////////////////////////////////// // try 1 //File file = new File("file:///android_asset/RELATIVEPATH"); // try 2 //Resources res
2 2023-05-22
编程技术问答社区
如何从res/raw文件夹打开PDF文件?
我正在编写一个应用程序,该应用程序在您单击按钮时打开PDF文件.以下是我的代码: File pdfFile = new File( "android.resource://com.dave.pdfviewer/" + R.raw.userguide); Uri path = Uri.fromFile(pdfFile); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.setDataAndType(path, "application/pdf"); star
0 2023-05-22
编程技术问答社区
android.content.res.Resources$NotFoundException。资源ID#0x7f07007e
我正在尝试在应用程序中实现类似功能,这是从回收视图中的视图中的摘要. 回收器CustomAdapter public class PostAdapterViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { TextView title,user,description,tag,time,designation; Long date; ImageView imageView,bookmark,profilepic,sharebutton,like; RelativeLayout head; LinearLayout content; DatabaseReference reference; Context context; String name; public void setContext(Context context) { this.context = con
8 2023-05-08
编程技术问答社区
掩盖可能泄露过多编程逻辑信息的资源字符串
我目前将LVL和Proguard的组合用作对盗版的第一道防线. 但是,资源字符串呢?例如,如果有一个资源字符串,例如"许可证检查失败",那么海盗不需要将资源ID追溯到代码中使用的位置?实际上,如果字符串是通用的东西,例如"请联系Dev". 也是如此. 最好的方法是什么? 解决方案 如果定义了资源字符串,则可能在: 中定义或使用它. 字符串资源文件 res/values/strings.xml , 布局文件 res/layout/*.xml , 生成的资源文件 r.java , 您的Java代码 src/**.java . 编译后,资源字符串,其名称和整数代码最终出现在: 资源文件 resources.arsc (字符串,名称和代码), 资源类 r $ string.class (名称,代码), 您的编译代码 **.类 proguard将完全删除 r $ string.class ,但是Android Encompilers可以从 Re
0 2023-05-02
编程技术问答社区
在android.content.ContextWrapper的NullPointerException
当我尝试通过getResources().getColor(R.color.yellow)获得颜色时,我会得到以下例外: 07-12 11:58:38.019: E/AndroidRuntime(3233): FATAL EXCEPTION: main 07-12 11:58:38.019: E/AndroidRuntime(3233): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.moveinblue.planner/com.moveinblue.planner.controller.plan.PlanDayScreen}: java.lang.NullPointerException 07-12 11:58:38.019: E/AndroidRuntime(3233): at android.app.ActivityThread.performLaunchAct
2 2023-04-30
编程技术问答社区
对于对话框中的视图,findById()返回null。
问题是,无论我在何处或如何要求该布局的组件,它们总是返回null. setView(inflater.inflate(R.layout.search_layout, null)) 这很好.它显示Dialog内的布局,但是,孩子们总是以findViewById(R.id.some_search_layout_children)>. 为null返回 我已经尝试多次清洁项目,试图为我的Dialog实现另一个类,称为findViewById()作为我的主Activity的成员,initSearch()方法和内部的匿名实现OnClickListener的OnClickListener,但所有结果都具有相同的结果.我还尝试将孩子分解为独立View,并以编程方式打电话给他们: TextView text = (TextView) findResourceById(R.id.new_independant_textview); ,但同样是相同的结果. 这是相关代码:
Xamarin.Droid。更新后Resource.Designer.cs损坏
我正在使用Xamarin进行Android,并且正在使用支持库.该项目工作正常,但是在将支持存储库从23.1.1.1更新为23.3.0之后,Resource.Designer.cs被损坏了. 注意:我确实删除了文件,我通过手动删除obj和bin文件夹进行了完整的重建,我使所有Android软件包都是最新的(Android SDK Manager). 错误都是public static void UpdateIdValues()函数的一部分,基本上都是这样的: 'Resource.Color' does not contain a definition for 'design_textinput_error_color' 使用代码: global::Acr.UserDialogs.Resource.Color.design_textinput_error_color = global::EVM.Droid.Resource.Color.design_textin
0 2023-04-30
编程技术问答社区
从资产文件夹中设置通知声音
我将声音文件附加在资产文件夹中,以获取通知中的播放声音,但我无法从资产文件夹中播放声音. 我有设置页面,用户可以从中为通知设置声音,并且用户也可以播放声音.该部分已完成.我可以使用媒体播放器从资产文件夹中播放声音.我可以在通知创建时间使用相同的逻辑,但是当用户单击通知时可能会发生问题,因为媒体播放器仍在播放声音. 我尝试了 notification.sound = Uri.parse("file:///android_asset/Sound/Long/AlarmClock.mp3"); 也像这样尝试了 notification.sound = Uri.parse("android_asset/Sound/Long/AlarmClock.mp3"); 但我的问题仍未解决. 还有其他方法可以从资产目录中设置通知中的声音? logcat 01-10 09:57:01.509: ERROR/PlayerDriver(31): Command PL
6 2023-04-27
编程技术问答社区
如何获得FileInputStream到assets文件夹中的文件
我知道如何使用AssetManager从res/raw目录中读取InputStream> InputStream的File,但是对于我的特殊用例,我需要FileInputStream.我需要特别需要一个FileInputStream的原因是因为我需要通过调用getChannel(). 从中获取FileChannel对象 这是我到目前为止的代码,它读取File>>>> 的数据(在我的情况下是原始列表) public static int[] loadByMappedBuffer(Context context, String filename) throws IOException{ FileInputStream fis = context.openFileInput(filename); FileChannel ch = fis.getChannel(); MappedByteBuffer mbuff = ch.map(MapMode.READ_ONL
4 2023-04-23
编程技术问答社区
字符串资源新行/n不可能?
似乎不可能在XML资源字符串中添加新行/n.还有另一种方法吗? 解决方案 使用blackslash而不是前向斜线. \n Hello\nWorld! 另外,如果您打算将字符串用作HTML,则可以使用
进行线路休息( ) Hello
World! 其他解决方案 我知道这是非常古老的问题,但是当我搜索时,它在列表中排名榜首.所以我想用另一种方法更新. 在strings.xml文件中您可以执行\ n,也可以按Enter:
0 2023-04-22
编程技术问答社区
在如何命名资源方面是否有惯例?
是否有约定如何在Android中命名资源?例如,按钮,文本视图,菜单等 解决方案 我不知道是否有任何官方建议. 对于带有小部件和容器的布局中的ID,我使用惯例: __ 我在这些布局中使用的任何尺寸,字符串,数字和颜色都采用相同的策略.但是,我确实尝试概括.例如,如果所有按钮都有一个通用的文本彩色,则我不会以布局为前缀.资源名称为" button_textcolor".如果所有TextColor都使用的是相同的资源,则将命名为" TextColor".对于样式,通常也就是这种情况. 对于菜单资源我使用: menu__ 动画只有不同,因为您无法使用大写字母.我相信可绘制的XML资源也是如此. 其他解决方案 Android SDK将是一个很好的起点. 例如,我尝试在活动中范围内范围内ID. 如果我有ListView在所有活动中都将是@andro
12 2023-04-20
编程技术问答社区
getResources().getString()如何工作 安卓
对于例如,在我的活动/ui中提供了多语言支持的应用,我调用getResources().getString(R.string.hello) strings.xml中,以便 values\strings.xml values-ru\strings.xml 现在打电话getResources().getString(R.string.hello)并需要基于系统语言环境访问字符串,因此将从values\strings.xml或values-ru\strings.xml? 获得字符串 或 是否需要根据系统语言环境(保持应用程序语言环境与系统语言环境相同)更改我的应用程序网站,然后从getString()中检索该值 get-string-from-default-locale-using-string-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-in-strin
24 2023-04-05
编程技术问答社区
libVLCsharp.forms不能播放Android资源视频文件,而iOS可以
尝试在Xamarinforms项目中使用libvlcsharp.forms. 需要播放资源视频文件. 安装了libvlcsharp.forms,videolan.libvlc.android,videolan.libvlc.ios 将MP4文件复制到iosproject/资源;被标记为捆绑包. 将同一文件复制到AndroidProject/Resources/RAW;标记为AndroidResource iOS可以从互联网上玩 Anroid可以玩与iOS相同的在线地址 iOS可以播放资源文件 Android无法播放相同的资源文件 错误>媒体文件错误://///bigbuckbunny.mp4 认为它不喜欢我的MP4文件格式或类似的东西. 下载了可以从URL播放的文件. 改了那个. 相同的结果. 帮助!!! 虽然(Android)可以播放url> 的视频 XAML部分:
4 2023-04-02
编程技术问答社区
如何从静态环境中获取资源内容?
我想在xml文件上读取字符串,然后才能在窗口小部件上执行其他操作,所以我该如何在没有活动对象的情况下执行此操作? 解决方案 创建一个 Application 的子类 在AndroidManifest.xml中设置android:name标签的android:name属性,以指向您的新类,例如android:name=".App" 在您的应用程序实例的onCreate()方法中,将上下文(例如this)保存到名为mContext的静态字段中,并创建返回此字段的静态方法,例如getContext(): 这就是应该的外观: public class App extends Application{ private static Context mContext; @Override public void onCreate() { super.onCreate(); mContext = this; }
8 2023-03-28
编程技术问答社区
平板电脑和移动电话的支持资源
我需要支持BITH MDPI,HDPI和XHDPI手机以及7'和10'平板电脑的应用程序,我必须承认我有点丢失. 到目前为止,我只做了平板电脑版本,我所做的是: 一个称为"布局"的单个文件夹 3个不同的文件夹,称为"可绘制的sw600dp","可绘制的sw800dp"和"可绘制的sw1200",其中包含600px大,800px大,大和1200px的图像. 我的印象是我把它弄乱了,我应该拥有创建的标准"可绘制的mdpi"," drabable-hdpi"和" drabable-xhdpi"文件夹. ,但如果我这样做: 我必须在哪个文件夹中放置平板电脑的图像?仅xhdpi? 平板电脑的图像应该是多大的? 手机的图像应该多大? 和最后但不是最不重要的:如何命名"布局"文件夹才能为手机和平板电脑具有不同的版本吗? 我已经阅读了1000次的Android推荐,但我仍然很困惑... 编辑1 这个来自Android网站的段落要命名"布局"文件夹以
2 2023-03-28
编程技术问答社区
createConfigurationContext在API级别上不工作 <26以编程方式改变语言
我已经阅读了有关在运行时更改应用程序内语言的所有内容.当前的所有功能都适用于API 26+27+28+29(是的,我已经测试过所有这些),并开始在API 25及以下闯入. 但是,这确实给了我零线索. 这是我的代码: public class BaseApp extends MultiDexApplication { //for MinSDK
2 2023-03-28
编程技术问答社区
是在运行中加载资源还是在内存中预先加载?
我正在开发一个跨越几个类的应用程序,因此,我不得不将应用程序上下文传递给使用全局字符串或整数的所有类,以便从strings.xml中提取它们或dimens.xml文件,而不是硬编码.到目前为止,我一直在加载一度需要的资源,但是我想知道是否会更有效地加载我在构造函数中需要的所有资源,请记住它们只是字符串和整数值. 解决方案 对于小对象(字符串,数字),您可以预紧它们,因为它不会花费太多记忆. 对于大对象(图像,媒体),最好根据需要加载. 我对小物体的个人偏爱是懒惰加载它们(按需要加载,但加载后,请保持内存以供以后使用),例如: public class Values{ private static Object pref1; public static Object getPreference1(){ if(pref1 == null){ pref1 = heavyLoadingOfPref1();
14 2023-03-25
编程技术问答社区
如何从内存转储中找出预装系统可画图(位图)的ID或名称?
我正在分析应用程序的内存使用情况,并发现了奇怪的Drawables,它不断地"吃掉"很少的巨型堆.这里有一些屏幕截图,来自 统治树,带2个很大的位图 上述位图之一的GC根路径 这个位图总是出现在我的手机的堆转储中( samsung galaxy nexus,OS 4.1.1 ),无论我使用多长时间或使用我们的应用程序多长时间. 我已经尝试使用垫子搜索此位图的来源 - 没有运气.我能找到的所有有用的信息是位图的width和height,都是512x512: 但是我们的应用程序没有任何单个512x512可抽签.我认为这是一些"系统"可抽签.但是到底是什么?为什么他们这么大? 我还研究了android.content.res.Resources类的源代码,搜索sPreloadedDrawables字段的用法 - 也没有运气.我从内存转储中获得的只是key从sPreloadedDrawables数组中,但我无法从此键确定文件名或资源ID. 所以,我的问题是: