更新3. KOTLIN 现在正在为ANDROID开发提供正式支持.通过GOOGLE.YAAAAAAAAS!
更新2:从长远来看,看起来JetBrains真的致力于支持Kotlin for Android.我是一个快乐的kotlin用户:).
更新:来自JetBrains的Hadi Hariri 提到他们将发布有关此主题的一些信息.一旦他们这样做,我会更新这篇文章.
===下一个被弃用的东西===
谷歌刚刚发布了即将推出的Android N的预览版,其中包含一些有趣的功能,最值得注意的是部分Java 8语言支持.这是可能的,因为Google正在开发新的Jack工具链.
使用javac或kotlinc的当前工具链:
javac(.java- > .class) - > dx(.class- > .dex)
kotlinc(.kt- > .class) - > dx(.class- > .dex)
新杰克工具链:
杰克(.java- > .jack- > .dex)
我假设谷歌将推动杰克成为Android开发的默认工具链.更新:Jack现已弃用.亚斯. …
谷歌已经为Android开发者发布了针对Android Studio 2.1 的新JACK编译器测试版.
我的问题是,我们如何使用JACK为APK进行模糊处理?下面的文章说JACK 本地执行模糊处理并且不需要Proguard:
以下文章说JACK使用Proguard配置文件(即.pro文件)来执行混淆:
它也说
在此过程中,Jack还处理任何请求的代码缩小(缩小和/或混淆).
这到底是什么意思?我们是否必须使用该minifyEnabled选项并定义.pro包含Proguard选项的文件?
综上所述:
我们究竟如何与JACK实现混淆?我们是否可以绕过Proguard的使用,或者Proguard在混淆过程中扮演事实上的角色,即使我们使用JACK编译?
JACK目前是否支持混淆,是否可以在Android Studio的稳定(即非beta/canary)版本中使用?
注意:
我已经提到了以下帖子:
进一步参考:
更新:
android android-sdk-tools android-studio android-jack-and-jill android-proguard
最新更新: 查看Android Studio 2.0(预览版)即时运行它真棒!!!!
我发现了一些提示(通过Gradle和Android Studio构建和运行应用程序比通过Eclipse慢)来加速Android Studio(Gradle)的编译过程,但我仍然觉得它太慢了.编译项目并在设备上运行大约需要15秒.
gradle.properties已设置为:
org.gradle.daemon =真
org.gradle.parallel =真
编辑: 太棒了!!! 我的同事报告说Jack和Jill可能是解决方案:http: //www.infoworld.com/article/2856113/mobile-technology/androids-new-jack-and-jill-compilers-head-uphill-to-developers .html我正在读它.
查看此说明:https: //www.saikoa.com/blog/the_upcoming_jack_and_jill_compilers_in_android
编辑2: 杰克和吉尔的新信息!:http: //tools.android.com/tech-docs/jackandjill
编辑3: Android Studio 2.0似乎让我们摆脱了所有的负担!查看"即时运行". http://android-developers.blogspot.nl/2015/11/android-studio-20-preview.html
performance android gradle android-studio android-jack-and-jill
我正在尝试使用新的Jack工具链构建一个简单的项目.我的项目依赖于android-apt插件(它使用了一些注释处理工具,但是在我尝试添加此工具之前发生了构建错误).这是我的模块构建脚本(我使用的是Android Studio 1.3和gradle插件1.3.0):
apply plugin: 'com.android.application'
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.6'
}
}
apply plugin: 'android-apt'
android {
compileSdkVersion 22
buildToolsVersion "22.0.1"
defaultConfig {
applicationId "com.netimen.ui.demo"
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"
useJack=true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
}
Run Code Online (Sandbox Code Playgroud)
当我尝试同步我的项目时,我得到以下ouptup:
Error:Could not find property 'options' on task ':demo:compileDebugJavaWithJack'.
Run Code Online (Sandbox Code Playgroud)
当我尝试运行时,gradlew …
谷歌正式发布了他们的博客上提到的杰克和吉尔http://android-developers.blogspot.fr/2014/12/hello-world-meet-our-new-experimental.html
但是,如果我使用以下属性:
defaultConfig {
applicationId 'xxx'
minSdkVersion 10
targetSdkVersion 19
versionCode 162
versionName 'xxx'
// Enabling multidex support.
multiDexEnabled true
testInstrumentationRunner "android.support.multidex.MultiDexTestRunner"
manifestPlaceholders = [ cappId:"xxx",cappLog:"false" ]
useJack = true
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
Error:Cannot get property 'destinationDir' on null object
Run Code Online (Sandbox Code Playgroud)
如果我评论使用Jack属性我没有问题
我知道这是一个实验工具,但你知道我该如何解决这个问题?
我的Android Studio或配置有什么问题?
Error:(22, 0) Could not find method jackOptions() for arguments [build_1b0umrzpkhcolzr325bxbizec$_run_closure1$_closure5@41c39fc1] on project ':app' of type org.gradle.api.Project.
Run Code Online (Sandbox Code Playgroud)
这是我的build.gradle
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.twtstudio.wepeiyanglite"
minSdkVersion 14
targetSdkVersion 23
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
jackOptions {
enabled true
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories …Run Code Online (Sandbox Code Playgroud) 也许还为时过早,但正如杰克和吉尔今天宣布的那样,我对此感到非常兴奋.我真的很想去,但他们也说:
读取.class文件的各种工具(例如JaCoCo,Mockito和一些lint检查)目前与Jack编译器不兼容.
杰克编译器已有一个模拟替代品吗?
升级我的项目以启用Jack和Java8功能后,我的16gb macbook似乎无法构建我的项目了.我看到内存使用量越来越高,但进程总是停留在同一点.
我的Gradle控制台:
Executing tasks: [:app:assembleDebug]
Configuration on demand is an incubating feature.
Incremental java compilation is an incubating feature.
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
:app:compileDebugNdk UP-TO-DATE
:app:checkDebugManifest
:app:preReleaseBuild UP-TO-DATE
:app:prepareComAndroidSupportAnimatedVectorDrawable2421Library UP-TO-DATE
:app:prepareComAndroidSupportAppcompatV72421Library UP-TO-DATE
:app:prepareComAndroidSupportCardviewV72421Library UP-TO-DATE
:app:prepareComAndroidSupportCustomtabs2340Library UP-TO-DATE
:app:prepareComAndroidSupportDesign2421Library UP-TO-DATE
:app:prepareComAndroidSupportRecyclerviewV72421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportCompat2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportCoreUi2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportCoreUtils2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportFragment2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportMediaCompat2421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportV42421Library UP-TO-DATE
:app:prepareComAndroidSupportSupportVectorDrawable2421Library UP-TO-DATE
:app:prepareComBluelinelabsConductor203Library UP-TO-DATE
:app:prepareComFacebookAndroidFacebookAndroidSdk4160Library UP-TO-DATE
:app:prepareComGithubJkwiecienEasyImage130Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAuth940Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesAuthBase940Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBase940Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesBasement940Library UP-TO-DATE
:app:prepareComGoogleAndroidGmsPlayServicesTasks940Library UP-TO-DATE
:app:prepareComGoogleFirebaseFirebaseAnalytics940Library UP-TO-DATE
:app:prepareComGoogleFirebaseFirebaseAnalyticsImpl940Library UP-TO-DATE
:app:prepareComGoogleFirebaseFirebaseAuth940Library UP-TO-DATE
:app:prepareComGoogleFirebaseFirebaseAuthCommon940Library UP-TO-DATE
:app:prepareComGoogleFirebaseFirebaseAuthModule940Library …Run Code Online (Sandbox Code Playgroud) android build.gradle android-gradle-plugin android-jack-and-jill
看似随机,Android Studio安装的apk已损坏.它通常以lambdas为中心(但每次都是不同的).我正在使用Jack编译和所有内容的最新版本(最后列出).问题一直存在,直到我做了一个干净的构建(然后一切都很好).间歇性故障是一种新现象.Jack和Java 8功能暂时保持稳定.不幸的是,我无法确定在片状失败开始之前发生了什么变化.
示例代码:
private static final Ordering<Foo> ORDER_BY_FOO =
Ordering.natural().onResultOf(Foo::getId);
Run Code Online (Sandbox Code Playgroud)
实际问题分配(在Guava代码中):
ByFunctionOrdering(Function<F, ? extends T> function, Ordering<T> ordering) {
this.function = checkNotNull(function); // <-- Fails
[...]
class ByFunctionOrdering<F, T> extends Ordering<F> {
final Function<F, ? extends T> function;
Run Code Online (Sandbox Code Playgroud)
示例运行时异常:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.mypackage, PID: 32222
java.lang.ExceptionInInitializerError
at com.mypackage.MyFragment.myOtherMethod(MyFragment.java)
at com.mypackage.MainActivity.myMethod(MainActivity.java:144)
at com.mypackage.MainActivity.onActivityResult(MainActivity.java:107)
at android.app.Activity.dispatchActivityResult(Activity.java:6932)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4085)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4132)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1533)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Caused by: …Run Code Online (Sandbox Code Playgroud) 我在我的Android项目中使用Java 8.我已经设置了Jack(在Android应用程序模块中)和Retrolambda(在其他模块中).
我遇到的问题是当我尝试使用类变量(并且我可以在任何模块中重现它)时,我的Lambda表达式在一个特定场景中崩溃,在所有其他情况下,它按预期工作.也许这是标准的Java行为,但到目前为止我找不到任何解释.有谁知道问题在哪里?我的班级和崩溃如下:
public class LambdaBugTest {
private final String parentClassVariableString = "parentClassVariableString";
public void testLambdas() {
// ----------- THESE WORK OK --------------
final Functional simpleLambdaWorks = text -> System.out.print(text);
final Functional methodReferenceWorks = System.out::print;
final Functional interfaceWithClassParamWorks = new Functional() {
@Override
public void doSomething(String text) {
System.out.print(text + " " + parentClassVariableString);
}
};
// -----------------------------------------
// ----------- THIS ONE CRASHES ------------
final Functional lambdaWithClassParamCrashes = text -> System.out.print(text + " " + parentClassVariableString);
// -----------------------------------------
simpleLambdaWorks.doSomething("Text from …Run Code Online (Sandbox Code Playgroud) android ×8
java ×3
gradle ×2
lambda ×2
android-apt ×1
build.gradle ×1
dex ×1
java-8 ×1
kotlin ×1
mockito ×1
performance ×1
retrolambda ×1