我一直在讨论即时运行,好像它处于一个很好的状态,但是我和我的团队经常会遇到这个功能的重大问题,并且由于它而导致编码体验降级.
在即时运行之前,我们的干净构建是〜1分30秒,之后我们得到的构建大约是25秒或偶尔的40秒.虽然即时运行确实似乎有时会将构建减少到6-12秒,但有时候,它会导致我们进入疯狂的长版本,我们已经看到长达13分钟,大大抵消了增量编译的任何收益.
它似乎在大多数时候,小的变化仍然需要40秒.有时它是6秒,但这是非常罕见的.
感觉很像是即时运行降低了我们始终如一地高效工作的能力.以下是我们的一些应用程序特定配置:
Android Studio 2.1.1,Android插件2.1
multiDexEnabled true
dexOptions {
preDexLibraries true
javaMaxHeapSize "4g"
maxProcessCount 4
incremental true
dexInProcess true
}
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.jvmargs=-Xmx6g -XX:MaxPermSize=512m
Run Code Online (Sandbox Code Playgroud)
我们做错了什么,或者有人找到了解决方法吗?
android android-build android-gradle-plugin android-instant-run
我最近发现了Android的新MultiDex功能,用于处理超过65,000个引用的应用程序.请参阅:https://developer.android.com/tools/building/multidex.html
有人可以帮我理解以下问题:
1)Gradle构建插件如何确定主要dex文件(classes.dex)与次要dex文件的放置内容?基于该文档,在主要dex中需要某些东西,但它没有给出任何示例.是否所有活动都必须在主要dex文件中?
引用文字:
在Dalvik运行时执行时,主要dex文件中需要哪些类有复杂的要求.Android构建工具更新处理Android需求,但其他包含的库可能还有其他依赖性要求,包括使用内省或从本机代码调用Java方法.在更新multidex构建工具之前,可能无法使用某些库,以允许您指定必须包含在主dex文件中的类.
2)仅针对Android API Level 21(Android L)及更高版本构建时,Gradle Build Plugin中存在不同的行为.它说它更快,因为它"将应用程序的每个模块(包括依赖项)构建为单独的dex文件.这通常被称为预先dexing." Android中模块的定义是什么?这是这里提到的Java库,Android库和Android应用程序模块:http://developer.android.com/sdk/installing/studio-build.html#projectModules?远程或本地二进制依赖项(例如:Jars)是否计为单独的模块,因此可以放入不同的dex文件中,还是根据它们包含在模块中?
android android-build android-activity android-gradle-plugin android-multidex
我目前在我的Ubuntu 14.04上运行的java版本是
java -version
java version "1.7.0_72"
Java(TM) SE Runtime Environment (build 1.7.0_72-b14)
Java HotSpot(TM) 64-Bit Server VM (build 24.72-b04, mixed mode)
Run Code Online (Sandbox Code Playgroud)
我输入了更改java版本的命令
sudo update-alternatives --config java
There are 2 choices for the alternative java (providing /usr/bin/java).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 auto mode
* 1 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 manual mode
2 /usr/lib/jvm/java-7-oracle/jre/bin/java 1 manual mode
Press enter to keep the current choice[*], or type selection number: 1
test@test-ZX-530:/media/test/SSD/N7$ sudo update-alternatives --config javac
There are 2 choices for …Run Code Online (Sandbox Code Playgroud) 我现在正在做android自定义ROM开发.aosp的构建系统基于Android.mk,但我想包含一些aar库,是否有可能在Android.mk中包含aar库?
我安装android sdk到我的ubuntu服务器来构建/测试我的项目.
我需要为命令行安装依赖项,我发现现在只能android/tools从Android下载链接下载文件夹了.
在那里,你可以找到bin/sdkmanager,所以我用来安装build-tools和platform-tools,却发现我可以用它来安装Android SDK版本,支持存储库,等等.
什么区别
android update sdk --no-ui --all --filter android-25
Run Code Online (Sandbox Code Playgroud)
和
sdkmanager "platforms;android-25"
Run Code Online (Sandbox Code Playgroud)
?
我正在尝试签署一个APK,以便在最初使用Cordova和Ionic构建的Play商店发布.现在,经过以下步骤:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore release-key.jks android-release-unsigned.apk xxxxxx
zipalign -v 4 android-release-unsigned.apk HelloWorld.apk
apksigner verify HelloWorld.apk
Run Code Online (Sandbox Code Playgroud)
然后,当我使用apksigner验证时,我得到错误,如下所示:
WARNING: META-INF/services/com.google.protobuf.GeneratedExtensionRegistryLoader
not protected by signature. Unauthorized modifications to this JAR entry will no
t be detected. Delete or move the entry outside of META-INF/.
Run Code Online (Sandbox Code Playgroud)
这有关系吗?我怎么能解决这个问题?我的构建中有什么问题吗?
我们在构建 multidex 应用程序时遇到问题。我们java.lang.NoClassDefFoundError在应用程序启动期间不断收到不同的错误。
我们注意到它们很可能与 multidex 问题有关。由于启动应用程序所需的类必须存在于主 DEX 文件中,并且它们不包含在classes.dex. 我们执行了https://developer.android.com/studio/build/multidex.html#keep 中描述的步骤,
但我们在 中指定的类multidex-config.txt,甚至在 中指定的类multidex-config.pro没有放置在主 dex 文件 ( classes.dex) 中。
你们有使用multiDexKeepFile或 multiDexKeepProguard 的经验吗?它真的有效吗?有什么技巧可以使它工作并将文件放在classes.dex?
每次在组装过程中我都会看到它"由于批量更新而暂停索引"
我希望它像以前一样,首先索引文件,然后构建.
而且我不必等到组装结束或手动按下开始按钮进行索引.
请告诉我如何定制它是否可能?
我知道有关索引冻结的消息:由于批量更新 而导致索引暂停但我没有挂起问题,我的问题是索引在项目构建时暂停.
我们的应用程序拥有大量本机库以及一些 Java 类,并且我们正在构建仅适用于 32 位架构的应用程序。我们知道,自 2019 年 8 月 1 日起,Google 已强制要求提供 64 位本机二进制文件,但目前我们不使用 Play 商店,在准备好 64 位二进制文件之前,我们希望禁止显示以下警告:不构建 64 位本机二进制文件。
Android Studio:4.0.1 Cmake版本:3.10.2
那么,我如何抑制这些警告,我们有很多本机二进制文件,并且对于每个二进制文件都会生成这些警告行。构建窗口充满了很多这样的行,可能每次都是针对每个本机库。
可以借助 CMAKE_C_FLAGS 并添加要抑制的警告类型来抑制代码中生成的警告,例如 -Wno-unknown-pragmas (仅抑制我们确定的警告)。但不知道如何抑制这种类型的警告。
警告:此应用程序仅具有 32 位 [armeabi-v7a,x86] 本机库。从 2019 年 8 月 1 日开始,Google Play 商店要求所有包含本机库的应用程序必须提供 64 位版本。有关更多信息,请访问https://g.co/64-bit-requirement 此应用程序仅具有 32 位 [armeabi-v7a,x86] 本机库。从 2019 年 8 月 1 日开始,Google Play 商店要求所有包含本机库的应用程序必须提供 64 位版本。欲了解更多信息,请访问https://g.co/64-bit-requirement
提前致谢。
在我的应用程序中,我有 30 多个构建变体。每次发布应用程序时,我都需要将其发布到不同的平台,因此我构建了 5 个不同的构建变体。
目前,我正在这样做:
我正在寻找的是一个 Gradle 任务,当我运行它时,它会为我构建这些特定的构建变体。我知道有一项任务要构建所有构建变体,但这对我来说太多了。
我进行了搜索,但找不到任何与我开始认为不可能的观点相关的内容。
有人能指出我正确的方向吗?谢谢。
android-build ×10
android ×9
gradle ×2
aar ×1
android-ndk ×1
android.mk ×1
build ×1
gradle-task ×1
gradlew ×1
java ×1