Gradle 6.5 Released Posted: 03 Jun 2020 01:50 AM PDT |
Introducing compose.academy - snippets and guides for Jetpack Compose Posted: 03 Jun 2020 06:18 AM PDT |
Restore RecyclerView scroll position Posted: 03 Jun 2020 05:33 AM PDT |
Material Components for Android 1.3.0-alpha01 Posted: 02 Jun 2020 02:26 PM PDT |
Loophole in Android App allowing any URL to deeplink by default into an App Posted: 03 Jun 2020 07:29 AM PDT |
Create an expandable Recyclerview with the MergeAdapter Posted: 03 Jun 2020 01:15 AM PDT |
A Google Play anomaly explained: How a trivial update for existing users can cause a sharp drop in daily *new* users. Posted: 02 Jun 2020 11:34 AM PDT It's a known fact that Google play factors in 'uninstalls' in your app ranking. The reasoning behind this is to factor in 'retention' rate to predict if users like your app. or otherwise 80% uninstall it first or second day. But here is an unwanted side effect: I have a game with very good retention, low uninstalls in first weeks of download, therefore it's ranked in a good place and gets a very healthy and failry constant daily downloads for last 10 months. Now I've released a minor 'typo' update. As expected for a game that user do "finish playing with" and it continue setting for months as dead weight in user device, users do uninstall once they notice the game updating. ( We all do) So after 8 months, the game accumulated tens of thousands "finished users"' who uninstalled in same day. But should a user that played my game for weeks\months and uninstalls it when I update , hurt app ranking, like same day uninstall ? Retention among new users is still very high, but Google play interpreted those 50k uninstalls in one day as a bad sign. rank plummeted and downloads where hurt considerably. This is anomaly because:1- game still has hight retention for weeks. if users who finished after weeks uninstalled it ASAP and didn't accumulate my app ranking wouldn't get punished. if I updated more frequently and those 'dead weight' we're spread, ranking wouldn't hurt. Key lessons: - if you have a "finite puzzle game" , and you update after a long time. consider this to a cause to download drop. - leave that typo alone ! I hope Play team, implements an heuristic that distinguished between "uninstalls" due to bad experience and "uninstall" from finished an happy users that accumulated over time. An update can hurt you submitted by /u/1998_best_year_ever [link] [comments] |
Complexity of requesting permissions - the default Kotlin example Posted: 03 Jun 2020 06:30 AM PDT |
Is Jetpack Navigation good? Posted: 02 Jun 2020 07:10 PM PDT I just went over the Codelab Jetpack Navigation project. I don't really feel it is very intuitive. Especially with all the XMLs. What do you guys think? What kinds of benefit does it brings to your app/projects? submitted by /u/sssurvey [link] [comments] |
Resources$NotFoundException on Android 10 devices. Posted: 03 Jun 2020 02:36 AM PDT Hey community! ProblemI've noticed a lot of unexpected crashes only on Android 10 devices. Crashes are pointing to missing resource ID in different layouts but I was not able to reproduce it even on same device and OS as I saw in crash reports.Weirdly enough, after hours of digging through google search results page 4 and further(I've got lost and results were in Mandarin) i found post pointing to Developer options -> Enable view attribute inspection . After enabling it on my device I've could reproduce it but it's still not clear how to fix it. Disabling it helped and app users are not seeing crashes there. QuestionEven though that helped I want to know what's the culprit of it and what is the right approach to fix it. Crash log android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f040378 at android.content.res.ResourcesImpl.getResourceTypeName(ResourcesImpl.java:305) at android.content.res.Resources.getResourceTypeName(Resources.java:2111) at android.content.res.Resources$Theme.getExplicitStyle(Resources.java:1769) at android.view.View.retrieveExplicitStyle(View.java:6731) at android.view.View.<init>(View.java:5639) at android.view.ViewGroup.<init>(ViewGroup.java:687) at android.widget.FrameLayout.<init>(FrameLayout.java:99) at android.widget.FrameLayout.<init>(FrameLayout.java:94) at androidx.cardview.widget.CardView.<init>(SourceFile:121) at com.google.android.material.card.MaterialCardView.<init>(SourceFile:52) at com.google.android.material.card.MaterialCardView.<init>(SourceFile:48) at java.lang.reflect.Constructor.newInstance0(Constructor.java) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at android.view.LayoutInflater.createView(LayoutInflater.java:854) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1126) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) at android.view.LayoutInflater.inflate(LayoutInflater.java:682) at android.view.LayoutInflater.inflate(LayoutInflater.java:534) at androidx.databinding.DataBindingUtil.inflate$45cd3863(SourceFile:126) at androidx.databinding.ViewDataBinding.inflateInternal$5250870e(SourceFile:1366) at com.example.app.LoginFragmentBinding.inflate(SourceFile:1090) at com.example.app.LoginFragment.onCreateView(SourceFile:66) at androidx.fragment.app.Fragment.performCreateView(SourceFile:2439) at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(SourceFile:1460) at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(SourceFile:1784) at androidx.fragment.app.BackStackRecord.executeOps(SourceFile:797) at androidx.fragment.app.FragmentManagerImpl.executeOps(SourceFile:2625) at androidx.fragment.app.FragmentManagerImpl.moveToState(SourceFile:2411) at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(SourceFile:2366) at androidx.fragment.app.FragmentManagerImpl.execPendingActions(SourceFile:2273) at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(SourceFile:3273) at androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(SourceFile:3229) at androidx.fragment.app.Fragment.performActivityCreated(SourceFile:2466) at androidx.fragment.app.FragmentManagerImpl.moveToState(SourceFile:1483) at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(SourceFile:1784) at androidx.fragment.app.BackStackRecord.executeOps(SourceFile:797) at androidx.fragment.app.FragmentManagerImpl.executeOps(SourceFile:2625) at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(SourceFile:2411) at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(SourceFile:2366) at androidx.fragment.app.FragmentManagerImpl.execPendingActions(SourceFile:2273) at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(SourceFile:3273) at androidx.fragment.app.FragmentActivity.androidx.fragment.app.FragmentManagerImpl.dispatchActivityCreated(SourceFile:17229) at androidx.appcompat.app.AppCompatActivity.onStart(SourceFile:178) at com.ing.mobile.app.activities.INGMobileActivity.onStart(SourceFile:145) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1433) at android.app.Activity.performStart(Activity.java:7978) at android.app.ActivityThread.handleStartActivity(ActivityThread.java:3472) at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:221) at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:201) at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:173) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2147) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:237) at android.app.ActivityThread.main(ActivityThread.java:7814) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075) Layout <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <data> <import type="model.CustomerType" /> <import type="android.view.View" /> <import type="AccessibilityUtils" /> <variable name="view" type="login.LoginView" /> <variable name="presenter" type="login.LoginPresenter" /> </data> <androidx.coordinatorlayout.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:liftOnScroll="?attr/myAppBarLayoutScrollingBehaviorEnabled"> <androidx.appcompat.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" app:navigationContentDescription="@string/login__cancel_content_description" app:navigationIcon="?attr/navigationCloseDrawable"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:contentDescription="@string/login__header_content_description" app:srcCompat="@drawable/logo" /> </androidx.appcompat.widget.Toolbar> </com.google.android.material.appbar.AppBarLayout> <androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="?attr/myAppBarLayoutScrollingBehavior"> <com.google.android.material.card.MaterialCardView style="?attr/myCardViewFullWidthStyle" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" app:contentPadding="0dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <com.google.android.material.tabs.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabGravity="fill" app:tabMode="fixed" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="@dimen/card_content_padding"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:orientation="vertical" android:visibility="@{view.customerType == CustomerType.PRIVATE ? View.VISIBLE : View.GONE}"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/text_vertical_spacing" android:text="@string/login__title_private" android:textAppearance="?attr/textAppearanceHeadline5" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="@string/login__body_private_accessibility" android:text="@{AccessibilityUtils.makeWordAccessible(@string/login__body_private)}" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" android:orientation="vertical" android:visibility="@{view.customerType == CustomerType.BUSINESS ? View.VISIBLE : View.GONE}"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/text_vertical_spacing" android:text="@string/login__title_business" android:textAppearance="?attr/textAppearanceHeadline5" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:contentDescription="@string/login__body__accessibility" android:text="@{AccessibilityUtils.makeWordAccessible(@string/login__body)}" /> </LinearLayout> <com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="-4dp" android:layout_marginTop="16dp" android:layout_marginEnd="-4dp" android:layout_marginBottom="@dimen/input_vertical_spacing" android:hint="@string/login__username"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/username" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleLine="true" android:text="@={view.username}" /> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.textfield.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="-4dp" android:layout_marginEnd="-4dp" android:hint="@string/login_password_hint"> <com.google.android.material.textfield.TextInputEditText android:id="@+id/password" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:singleLine="true" android:text="@={view.password}" /> </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.button.MaterialButton android:id="@+id/login_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/buttons_margin_top" android:layout_marginBottom="@dimen/button_vertical_spacing" android:onClick="@{() -> presenter.onLoginClicked(view.username, view.password)}" android:text="@string/login_label" /> <com.google.android.material.button.MaterialButton android:id="@+id/help_button" style="?attr/buttonTextStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="@{() -> presenter.onForgotCredentialsClicked()}" android:text="@string/login_help" /> </LinearLayout> </LinearLayout> </com.google.android.material.card.MaterialCardView> </androidx.core.widget.NestedScrollView> </androidx.coordinatorlayout.widget.CoordinatorLayout> </layout> Attribute/Style <item name="myCardViewFullWidthStyle">@style/CardView.FullWidth</item> <style name="CardView.FullWidth" parent="Widget.MaterialComponents.CardView"> <item name="cardCornerRadius">@dimen/card_fullwidth_corner_radius</item> <item name="cardElevation">@dimen/card_fullwidth_elevation</item> <item name="contentPadding">@dimen/card_fullwidth_content_padding</item> <item name="android:layout_width">@dimen/card_fullwidth_width</item> <item name="android:layout_marginTop">@dimen/card_fullwidth_margin_top</item> <item name="android:layout_marginBottom">@dimen/card_fullwidth_margin_bottom</item> </style> And the resource ID #0x7f040378 that system is unable to find seems to be style="?attr/myCardViewFullWidthStyle" or at least something in related to CardView because that's where the crash is pointing in the layout. <com.google.android.material.card.MaterialCardView style="?attr/myCardViewFullWidthStyle" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" app:contentPadding="0dp"> Hope I've put enough details and it's understable what my goal is. Looking forward for suggestion, ideas or fix! Edit: It happens on prod app version with proguard. submitted by /u/msqdev [link] [comments] |
Google Removes The Indian App That Helped Users To Remove Chinese Apps Posted: 03 Jun 2020 02:16 AM PDT |
how to implement adview with databinding correctly. Posted: 03 Jun 2020 04:19 AM PDT |
Android Volley Issue Posted: 03 Jun 2020 08:02 AM PDT I have a project in which i have to get data from a HTTP server hosted on an ESP8266. To do that i used android volley and i'm using the GET method on a JSON. I connect to my ESP via Wi-Fi (I configured the ESP as an access point) and after connecting to it i have no real access to the internet. Does Volley require a permanent internet connection or is there some issue other than no internet access? (When i try the app on some other fake json server like https://my-json-server.typicode.com/typicode/demo/db it works as intended) https://pastebin.com/MATdMWzz submitted by /u/andrey1515 [link] [comments] |
Playing with Github Actions Posted: 03 Jun 2020 04:02 AM PDT |
Help on app getting rejected Posted: 03 Jun 2020 07:13 AM PDT | Hey guys, I developed an app using flutter and that has been approved and live on apple store but I am having a hard time getting that to be approved on google play. I am hoping that since it is my first one I am missing something that you guys can help me identify. All that I receive from google are some generic rejection messages that do not point me to the issue itself (apple does a much better job on it). I tried opening a support ticket and look on the console but everything that I receive back from them is more generic messages. Here is the email I received: After a recent review, we found that your app BOTW Armor Tracker is not compliant with one or more of our Developer Program Policies. See below for more information about your app's status and how to correct the issue. Google reserves the discretion to include or remove apps from Google Play. We may take action based on a number of factors including, but not limited to, a pattern of harmful behavior or high risk of abuse. We identify risk of abuse using various items such as previous violation history, user feedback, and use of popular brands, characters, and other assets.App status: Rejected - Your app has been rejected and wasn't published due to a policy violation. If you submitted an update, the previous version of your app is still available on Google Play. Reading this I don't know what is wrong. So maybe you guys being more experienced in android apps could point me to a better direction or somehow find out exactly what they are complaining about. My app is related to the Legend of Zelda game and you can track the armor that you have obtained etc... if you check the apple store link you can see the images, listing, icons etc https://apps.apple.com/us/app/botw-armor-tracker/id1512674940?ls=1 I basically add the same images, icon, and text for the app on google play but after some rejections, I started to change some things. I changed the font to not use this customized font, it is using the default android font on the icon, and within the app. So the font should no longer be a problem. I thought that you guys know more about what I can search for or try out. - I know that my app is related to a Nintendo game, but there are tons of apps there, so I don't think that solo would be a problem, right? - Would my bundle name be a problem? Is it com.mycompany.zeldabotw Here is an image of the android app. Any help would be very appreciated https://preview.redd.it/vk5fqngtcp251.png?width=1080&format=png&auto=webp&s=b9707966f74e22e88ba97f3567ffcb8999e227f9 submitted by /u/leojesus [link] [comments] | |
Junior dev for tips, tricks & advice. Posted: 03 Jun 2020 06:38 AM PDT So a little more than a week ago, I finished up a two-year vocational university and am now a fullfledged junior android developer. Sadly, the start-up company that I did my internship at couldn't employ me, so I'm out and searching for steady employment. While I search, does r/androiddev have any, as the title says, tricks, tips or other advice to give me? I'm mostly looking for ways to improve my programming skills. Some tips on what would be useful to learn, how to develop a better understanding of the lingo and generally keep up with the android world. But any advice is welcomed! Just some general info, the university taught me Java, Unity, API, UI/UX and a bit of JavaScript and HTML5. I learned Kotlin on my own during my Master thesis and the internship. And currently am trying to understand the Navigation View component. submitted by /u/TomRoke [link] [comments] |
Article: How to get the result from callback within coroutine function Posted: 03 Jun 2020 02:12 AM PDT |
Fragment Lifecycle - onAttach vs onCreate Posted: 03 Jun 2020 05:17 AM PDT Looking at the lifecycle of a fragment, I am wondering what would stop me from moving my logic in onCreate to onAttach . I am using ViewModel instead of savedInstanceState , so there is not obvious benefit to me using onCreate . Why is onCreate a separate callback? Please do not ask why I wouldn't just use onCreate , I have my reasons. submitted by /u/A_RandomTurtle [link] [comments] |
How to sell my mobile game app? Posted: 03 Jun 2020 04:54 AM PDT Hi, so I created a mobile game, and I'm not sure how to sell it now, the game on the play store, integrated with my AdMob id ads earning around few dollars a day. How does the process of me selling the app work? I Know I can list the app on flippa, but I'm not sure how to change the game app AdMob id's to the new buyer or transfer the app to the new buyer google developer account, is there any guides about this online? Thanks for the help! submitted by /u/Repboi123 [link] [comments] |
Testing with Hilt and a Preview of Hilt/AndroidX Posted: 02 Jun 2020 03:19 PM PDT |
Help with sort of font to use on my social networking app Posted: 03 Jun 2020 05:26 AM PDT Would someone help me by telling me what font would be good to use on my social networking app. Currently i am using roboto but it's bot easy on the eyes and a not pleasant at all. I would like suggestions for fonts i could use. Thanks in advance submitted by /u/fireking09 [link] [comments] |
female(22) Posted: 03 Jun 2020 06:57 AM PDT Hello, i am junior Android developer. I've been working(internship) in a software company as android developer and now I want to apply for that position and to work there full time. What are your recommendations about youtube chanals, projects and literature to read before i apply? submitted by /u/random_gal_mk [link] [comments] |
Android MVI with Kotlin Coroutines & Flow Posted: 02 Jun 2020 08:11 AM PDT |
No comments:
Post a Comment