在 app/build.gradle 中:
implementation 'com.android.support:appcompat-v7:28.0.0'
Run Code Online (Sandbox Code Playgroud)
在我的活动中我使用
import android.support.v7.widget.Toolbar
Run Code Online (Sandbox Code Playgroud)
好的。这是找工作。
但是当我迁移到androidx我添加这个:
android.useAndroidX=true
android.enableJetifier=true
Run Code Online (Sandbox Code Playgroud)
结果现在我的活动没有编译错误:
import android.support.v7.widget.Toolbar;
Cannot resolve symbol 'v7'
Run Code Online (Sandbox Code Playgroud)
可以android.support.v7.widget.Toolbar和anrdoidx.*包一起使用吗?
android android-appcompat android-support-library android-toolbar androidx
在我的Kotlin项目中,我想在编译时声明常量:
所以我用这个:
@RunWith(AndroidJUnit4::class)
class TradersActivityTest {
private lateinit var mockServer: MockWebServer
private const val ONE_TR = "no_wallets.json" // error here
Run Code Online (Sandbox Code Playgroud)
但是我有编译时错误:
Const 'val' are only allowed on top level or in objects
Run Code Online (Sandbox Code Playgroud)
如何声明编译时间常数?
Android 8.启动我的应用并立即最小化.几秒钟后我收到错误:
startActivity called from finishing ActivityRecord{7497c34 u0 com.myproject..dev/com.myproject.activity.SplashActivity t-1 f}; forcing Intent.FLAG_ACTIVITY_NEW_TASK for: Intent { cmp=com.myproject..dev/com.myproject.activity.RegistrationActivity }
Exception during pending activity launch pal=com.android.server.am.ActivityStackSupervisor$PendingActivityLaunch@a454565
java.lang.NullPointerException: Attempt to read from field 'android.content.Intent com.android.server.am.TaskRecord.intent' on a null object reference
at com.android.server.am.ActivityStarter.computeSourceStack(ActivityStarter.java:1425)
at com.android.server.am.ActivityStarter.startActivityUnchecked(ActivityStarter.java:983)
at com.android.server.am.ActivityStarter.startActivity(ActivityStarter.java:953)
at com.android.server.am.ActivityStarter.doPendingActivityLaunchesLocked(ActivityStarter.java:1964)
at com.android.server.am.ActivityManagerService$MainHandler.handleMessage(ActivityManagerService.java:2055)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.os.HandlerThread.run(HandlerThread.java:65)
at com.android.server.ServiceThread.run(ServiceThread.java:46)
Run Code Online (Sandbox Code Playgroud)
此错误仅适用于Android 8.在另一个Android版本中没有此错误.
在stacktrace中没有对特定行的引用(如您所见).仅限活动名称(SplashActivity).
这是我的SplashActivity:
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startActivity(new Intent(this, RegistrationActivity.class)); …Run Code Online (Sandbox Code Playgroud) 我是Android开发人员。结果,我使用Gradle来构建android项目。我在Groovy上编写(大约2年)gradle脚本。结果,脚本非常紧凑,清晰并且易于支持。这很棒。
但是在新版本的Gradle中引入了新的语言-Kotlin。
我的问题是:如果我从Groovy切换到Kotlin,对于编写Gradle脚本有什么好处?
安卓工作室 3.4.2 安卓 6.0
dependencies {
annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'commons-io:commons-io:2.6'
implementation 'edu.vt.middleware:vt-password:3.1.2'
implementation 'org.apache.commons:commons-collections4:4.1'
implementation "org.androidannotations:androidannotations-api:$AAVersion"
Run Code Online (Sandbox Code Playgroud)
在android 6.0代码成功工作之前
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.*;
import org.apache.commons.io.FileUtils;
private File myPhotoTempDir;
if (myPhotoTempDir != null && myPhotoTempDir.exists()) {
FileUtils.deleteDirectory(myPhotoTempDir);
}
Run Code Online (Sandbox Code Playgroud)
在 Android 6.0 上,我收到运行时错误:
FATAL EXCEPTION: main
Process: com.myproject.debug, PID: 7667
java.lang.NoSuchMethodError: No virtual method toPath()Ljava/nio/file/Path; in class Ljava/io/File; or its super classes (declaration of 'java.io.File' appears in /system/framework/core-libart.jar)
at org.apache.commons.io.FileUtils.isSymlink(FileUtils.java:3107) …Run Code Online (Sandbox Code Playgroud) 安卓工作室3.4.2
我有一个使用模块mytransport的主项目(应用程序) ,如下所示:
app/build.gradle
dependencies {
annotationProcessor "org.androidannotations:androidannotations:$AAVersion"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation('com.crashlytics.sdk.android:crashlytics:2.7.0@aar') { transitive = true; }
implementation 'com.google.android.material:material:1.1.0-alpha07'
implementation "org.androidannotations:androidannotations-api:$AAVersion"
implementation project(':mytransport')
}
Run Code Online (Sandbox Code Playgroud)
在mytransport/build.gradle中:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.google.code.gson:gson:2.8.5'
}
Run Code Online (Sandbox Code Playgroud)
在mytransport代码中我成功使用这样的代码:
在 MyProject\mytransport\src\main\java\com\mycompany\android\mytransport\util\MyUtil.java
片段:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
public class JSONUtil {
private static GsonBuilder gsonbuilder = new GsonBuilder();
Run Code Online (Sandbox Code Playgroud)
好的。
现在我想在主应用程序中使用 …
安卓工作室 3.4.2
在 build.gradle 中:
buildscript {
ext.kotlin_version = '1.3.41'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
Run Code Online (Sandbox Code Playgroud)
在 app/build.gradle 中:
buildscript {
repositories {
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'io.fabric.tools:gradle:1.29.0'
}
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'io.fabric'
Run Code Online (Sandbox Code Playgroud)
在我的 android 项目中,我将活动作为 java 类 - LoginActivity.java
导入 …
在我的片段中,我从图库中选择照片
在 Manifest.xml 中
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_GPS"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
之前?这是我的应用程序显示权限对话框。我按允许
public class EditProfileFragment extends androidx.fragment.app.Fragment {
private void choosePhotoFromGallery() {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}
Run Code Online (Sandbox Code Playgroud)
但是方法
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (BuildConfig.DEBUG)
Log.d(TAG, "onActivityResult_requestCode = " + requestCode + ", resultCode = " + resultCode + ", data = "
+ AndroidUtil.intent2String(data)); …Run Code Online (Sandbox Code Playgroud)